亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
STM32驅(qū)動GDEW042Z15電子墨水屏源程序
[打印本頁]
作者:
清拭風(fēng)
時間:
2018-6-18 15:33
標(biāo)題:
STM32驅(qū)動GDEW042Z15電子墨水屏源程序
因為項目需求,最近一直在研究GDEW042Z15電子墨水屏幕。
電子墨水屏即為使用電子墨水的屏幕。電子墨水屏又被稱為電子紙顯示技術(shù)。
電子墨水是一種革新信息顯示的新方法和技術(shù)。像多數(shù)傳統(tǒng)墨水一樣,電子墨水和改變它顏色的線路是可以打印到許多表面的,從彎曲塑料、聚脂膜、紙到布。和傳統(tǒng)紙差異是電子墨水在通電時改變顏色,并且可以顯示變化的圖象,像計算器或手機(jī)那樣的顯示。
再驅(qū)動屏幕時使用了STM32芯片,可以驅(qū)動屏幕進(jìn)行切換圖片,高速刷新等功能。
單片機(jī)源程序如下:
/*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "24cxx.h"
#include "sys.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
ErrorStatus HSEStartUpStatus;
/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
void uart_init(u32 bound);
void LED_Init(void);
void EEPROM_PLAY(void);
void EEPROM_Display(void);
void EPPROM_READ(void);
#define SDA_H GPIO_SetBits(GPIOD, GPIO_Pin_10); //PD.10
#define SDA_L GPIO_ResetBits(GPIOD, GPIO_Pin_10); //PD.10
#define SCLK_H GPIO_SetBits(GPIOD, GPIO_Pin_9); //PD.9
#define SCLK_L GPIO_ResetBits(GPIOD, GPIO_Pin_9);
#define nCS_H GPIO_SetBits(GPIOD, GPIO_Pin_8); //PD.8
#define nCS_L GPIO_ResetBits(GPIOD, GPIO_Pin_8);
#define nDC_H GPIO_SetBits(GPIOE, GPIO_Pin_15); //PE.15
#define nDC_L GPIO_ResetBits(GPIOE, GPIO_Pin_15);
#define nRST_H GPIO_SetBits(GPIOE, GPIO_Pin_14); //PE.14
#define nRST_L GPIO_ResetBits(GPIOE, GPIO_Pin_14);
#define nBUSY GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_13) //PE.13
#define nBS_H GPIO_SetBits(GPIOE, GPIO_Pin_11); //PE.11
#define nBS_L GPIO_ResetBits(GPIOE, GPIO_Pin_11);
#define VPP_H GPIO_SetBits(GPIOA, GPIO_Pin_4); //PA4
#define VPP_L GPIO_ResetBits(GPIOA, GPIO_Pin_4); //PA4
#define LED_1 GPIO_ResetBits(GPIOE, GPIO_Pin_12);
#define LED_0 GPIO_SetBits(GPIOE, GPIO_Pin_12);
void SPI4W_WRITECOM(unsigned char INIT_COM);
void SPI4W_WRITEDATA(unsigned char INIT_DATA);
void SPI4W_WRITE(unsigned char INIT_COM,unsigned char INIT_DATA);
void MYRESET(void);
void DELAY_100nS(unsigned int delaytime);
void DELAY_mS(unsigned int delaytime);
void DELAY_S(unsigned int delaytime);
void DELAY_M(unsigned int delaytime);
void READBUSY(void);
int k=0;
//unsigned char RECEIVE[15000];
int RxCounter;
unsigned int ReceiveState;
unsigned char ZW[]=
{
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
…………
…………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};*/
void DELAY_100nS(unsigned int delaytime) // 30us
{
int i,j;
for(i=0;i<delaytime;i++)
for(j=0;j<1;j++);
}
void DELAY_mS(unsigned int delaytime) // 1ms
{
int i,j;
for(i=0;i<delaytime;i++)
{for(j=0;j<200;j++);}
}
void DELAY_S(unsigned int delaytime) // 1s
{
int i,j,k;
for(i=0;i<delaytime;i++)
{
for(j=0;j<4000;j++)
{
for(k=0;k<222;k++);
}
}
}
void DELAY_M(unsigned int delaytime) // 1M
{
int i;
for(i=0;i<delaytime;i++)
DELAY_S(60);
}
void lcd_chkstatus(void)
{
unsigned char busy;
do
{
SPI4W_WRITECOM(0x71);
busy = nBUSY;
busy =!(busy & 0x01);
}
while(busy);
DELAY_mS(200);
}
void EPD_W21_Init(void)
{
nBS_L; //4 wire spi mode selected
nRST_L; //module reset
DELAY_mS(1000);
nRST_H;
DELAY_mS(1000);
}
void Ultrachip1(void)
{
unsigned int i;
for(i=0;i<15000;i++)
{
SPI4W_WRITEDATA(G_Ultrachip1[i]);
}
DELAY_mS(2);
}
void Ultrachip_red1(void)
{
unsigned int i;
for(i=0;i<15000;i++)
{
SPI4W_WRITEDATA(G_Ultrachip_red1[i]);
}
DELAY_mS(2);
}
/*void Ultrachip2(void)
{
unsigned int i;
for(i=0;i<15000;i++)
{
SPI4W_WRITEDATA(G_Ultrachip2[i]);
}
DELAY_mS(2);
}*/
void Ultrachip_red2(void)
{
unsigned int i;
for(i=0;i<15000;i++)
{
SPI4W_WRITEDATA(G_Ultrachip_red2[i]);
}
DELAY_mS(2);
}
void EPPROM_READ(void)
{
unsigned int i,b;
unsigned char c;
b =100 ;
for(i=0;i<15000;i++)
{
c=AT24CXX_ReadOneByte(b);
SPI4W_WRITEDATA(c);
b++;
}
DELAY_mS(2);
}
void pic_display(void)
{
SPI4W_WRITECOM(0x10);
Ultrachip1();
SPI4W_WRITECOM(0x13);
Ultrachip_red1();
}
void Display(void)
{
EPD_W21_Init();
SPI4W_WRITECOM(0x06); //boost設(shè)定
SPI4W_WRITEDATA (0x17);
SPI4W_WRITEDATA (0x17);
SPI4W_WRITEDATA (0x17); //07 0f 17 1f 27 2F 37 2f
SPI4W_WRITECOM(0x04);
lcd_chkstatus();
SPI4W_WRITECOM(0x00);
SPI4W_WRITEDATA(0x0f); // LUT from OTP
pic_display();
SPI4W_WRITECOM(0x12);
DELAY_mS(100);
lcd_chkstatus();
SPI4W_WRITECOM(0X50);
SPI4W_WRITEDATA(0xf7); //border floating
SPI4W_WRITECOM(0X02); //power off
lcd_chkstatus();
SPI4W_WRITECOM(0X07); //deep sleep
SPI4W_WRITEDATA(0xA5);
DELAY_mS(100);
}
void EEPROM_Display(void)
{
EPD_W21_Init();
SPI4W_WRITECOM(0x06); //boost設(shè)定
SPI4W_WRITEDATA (0x17);
SPI4W_WRITEDATA (0x17);
SPI4W_WRITEDATA (0x17); //07 0f 17 1f 27 2F 37 2f
SPI4W_WRITECOM(0x04);
lcd_chkstatus();
SPI4W_WRITECOM(0x00);
SPI4W_WRITEDATA(0x0f); // LUT from OTP
EEPROM_PLAY();
SPI4W_WRITECOM(0x12);
DELAY_mS(100);
lcd_chkstatus();
/************************power off Sequence************************/
SPI4W_WRITECOM(0X50);
SPI4W_WRITEDATA(0xf7); //border floating
SPI4W_WRITECOM(0X02); //power off
lcd_chkstatus();
SPI4W_WRITECOM(0X07); //deep sleep
SPI4W_WRITEDATA(0xA5);
/************************power off Sequence************************/
DELAY_mS(100);
}
void EEPROM_PLAY(void)
{
SPI4W_WRITECOM(0x10);
EPPROM_READ();
SPI4W_WRITECOM(0x13);
Ultrachip_red2();
}
/*****************************************************************************************************/
void SPI4W_WRITECOM(unsigned char INIT_COM)
{
unsigned char TEMPCOM;
unsigned char scnt;
TEMPCOM=INIT_COM;
nCS_H
nCS_L
SCLK_L
nDC_L
for(scnt=0;scnt<8;scnt++)
{
if(TEMPCOM&0x80)
SDA_H
else
SDA_L
DELAY_100nS(10);
SCLK_H
DELAY_100nS(10);
SCLK_L
TEMPCOM=TEMPCOM<<1;
DELAY_100nS(10);
}
nCS_H
}
void SPI4W_WRITEDATA(unsigned char INIT_DATA)
{
unsigned char TEMPCOM;
unsigned char scnt;
TEMPCOM=INIT_DATA;
nCS_H
nCS_L
SCLK_L
nDC_H
for(scnt=0;scnt<8;scnt++)
{
if(TEMPCOM&0x80)
SDA_H
else
SDA_L
DELAY_100nS(10);
SCLK_H
DELAY_100nS(10);
SCLK_L
TEMPCOM=TEMPCOM<<1;
DELAY_100nS(10);
}
nCS_H
}
/*******************************************************************************
* Function Name : main
* Description : Main program
* Input : None
* Output : None
* Return : None
#define NVIC_VectTab_FLASH misc.h
*******************************************************************************/
/*int main(void)
{
#ifdef DEBUG
debug();
#endif
int v,q,s;
char c;
DELAY_S(1);
// 系統(tǒng)時鐘設(shè)置
RCC_Configuration();
//GPIO參數(shù)設(shè)置
GPIO_Configuration();
uart_init(115200);
AT24CXX_Init();
LED_Init();
//EPD_W21_Init();
AT24CXX_Init();
// VPP_H;
k=0;
v=100;
//EEPROM_Display();
Display();
while(1)
{
if(ReceiveState==1)
{
ReceiveState=0;
while(RxCounter--)
{
AT24CXX_WriteOneByte(v,RECEIVE[k]);
v++;
k++;
//DELAY_mS(5);
}
LED_0;
//c=AT24CXX_ReadOneByte(107);
//USART_SendData(USART1,c);
//while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
EEPROM_Display();
RxCounter=0;
v=100;
k=0;
}
}
}*/
int main(void)
{
#ifdef DEBUG
debug();
#endif
int i;
char c;
DELAY_S(1);
// 系統(tǒng)時鐘設(shè)置
RCC_Configuration();
//GPIO參數(shù)設(shè)置
GPIO_Configuration();
uart_init(115200);
AT24CXX_Init();
LED_Init();
//EPD_W21_Init();
AT24CXX_Init();
DELAY_mS(5000);
for(i=1;i<30000;i++)
{
//c=ZW[i];
//USART_SendData(USART1,c);
//while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
AT24CXX_WriteOneByte(i,0x1c);
}
for(i=1;i<30000;i++)
{
c=AT24CXX_ReadOneByte(i); ;
USART_SendData(USART1,c);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
LED_1;
while(1);
}
/*******************************************************************************
* Function Name : RCC_Configuration
* Description : Configures the different system clocks.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RCC_Configuration(void)
{
// 復(fù)位RCC時鐘配置(用于調(diào)試模式)
RCC_DeInit();
// 使能外部晶振
RCC_HSEConfig(RCC_HSE_ON);
// 等待外部晶振穩(wěn)定
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
// 設(shè)置鎖相環(huán)頻率PLLCLK = 8MHz * 9 = 72 MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
}
else {
// 使能內(nèi)部晶振
RCC_HSICmd(ENABLE);
// 等待內(nèi)置振蕩器穩(wěn)定
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
// 設(shè)置鎖相環(huán)頻率PLLCLK = 8MHz/2 * 16 = 64 MHz
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_16);
}
// 使能FLASH的預(yù)取緩沖
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//設(shè)置代碼延時值,FLASH_Latency_2為兩個延時周期
FLASH_SetLatency(FLASH_Latency_2);
//設(shè)置系統(tǒng)總線時鐘
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//設(shè)置高速設(shè)備總線時鐘,RCC_HCLK_Div1為系統(tǒng)時鐘除以1
RCC_PCLK2Config(RCC_HCLK_Div1);
//設(shè)置低速設(shè)備總線時鐘,RCC_HCLK_Div2為系統(tǒng)時鐘除以2
RCC_PCLK1Config(RCC_HCLK_Div2);
//使能鎖相環(huán)倍頻
RCC_PLLCmd(ENABLE);
// 等待鎖相環(huán)倍頻后的頻率穩(wěn)定
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
// 選擇鎖相環(huán)時鐘為系統(tǒng)時鐘源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// 等待設(shè)置完成
while(RCC_GetSYSCLKSource() != 0x08);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,
ENABLE);
}
/*******************************************************************************
* 函數(shù)名 : GPIO_Configuration
* 描述 : 設(shè)置設(shè)置串口所用GPIO引腳的參數(shù)
* 輸入 : None
* 輸出 : None
* 返回 : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10; //abcd OE ST LT0輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_14 |GPIO_Pin_15; //abcd OE ST LT0輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //abcd OE ST LT0輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //VPP
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void uart_init(u32 bound)
{
//GPIO端口設(shè)置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA時鐘
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優(yōu)先級3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器
//USART 初始化設(shè)置
USART_InitStructure.USART_BaudRate = bound;//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據(jù)格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式
USART_Init(USART1, &USART_InitStructure); //初始化串口1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟串口接受中斷
USART_Cmd(USART1, ENABLE); //使能串口1
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_12);
}
/*******************************************************************************
* Function Name : NVIC_Configuration
* Description : Configures Vector Table base location.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void NVIC_Configuration(void)
{
// NVIC_InitTypeDef NVIC_InitStructure;
;
}
#ifdef DEBUG
/*******************************************************************************
* Function Name : assert_failed
* Description : Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* Input : - file: pointer to the source file name
* - line: assert_param error line source number
* Output : None
* Return : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/*void USART1_IRQHandler(void)
{
unsigned char num;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
num=USART_ReceiveData(USART1);
LED_1;
if(num==0XDD)
{
ReceiveState=1;
}
else
{
RECEIVE[RxCounter++]=num;
}
//USART_SendData(USART1,RECEIVE[2]);
}
}*/
復(fù)制代碼
所有資料51hei提供下載:
GDEW042Z15程序示例-OTP.rar
(225.26 KB, 下載次數(shù): 59)
2018-6-19 04:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
XuANiu
時間:
2018-11-5 08:51
好資源
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1