|
最近我用STM8L15x的固件库编写一个12864的液晶显示,但是液晶无法显示出来,而且有时会乱码 #include
"stm8l15x.h" #define uchar unsigned char #define E_H()
(GPIO_SetBits(GPIOD,GPIO_Pin_7)) #define E_L()
(GPIO_ResetBits(GPIOD,GPIO_Pin_7)) #define RS_H()
(GPIO_SetBits(GPIOD,GPIO_Pin_5)) #define RS_L()
(GPIO_ResetBits(GPIOD,GPIO_Pin_5)) #define RW_H()
(GPIO_SetBits(GPIOD,GPIO_Pin_6)) #define RW_L()
(GPIO_ResetBits(GPIOD,GPIO_Pin_6))
uchar table0[]="中国"; uchar
table1[]="我爱电子"; uchar
table2[]="1234567890"; /***********延时函数*************/ void
delay(uint8_t a) { uchar i;
for(a;a>0;a--) for(i=0;i<200;i++); } /************使用外部时钟**************/ void
CLK_CONFIG(void) {
CLK_HSEConfig(CLK_HSE_ON); //使用HSE时钟 CLK_SYSCLKSourceSwitchCmd(ENABLE);//启用切换时钟 CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);//将系统时钟换成HSE CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
//系统时钟预分频 CLK_ClockSecuritySystemEnable(); //使用时钟安全系统CSS } /*************GPIO初始化****************/ void
GPIO_CONFIG(void) {
GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Fast);
//初始化GPIOB推挽输出,低,高速 GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Fast); } /***********写指令函数**************/ void
wcom(uchar com) { RS_L(); E_L();
GPIO_Write(GPIOB,com); delay(2); E_H();
E_L(); } /**************12864液晶初始化********************/ void
init_12864(void) { wcom(0x38); wcom(0x0c);
wcom(0x06); wcom(0x01); wcom(0x80);
RW_L(); } /***********写指令函数**************/ void wdata(uchar
data) { RS_L(); E_L(); GPIO_Write(GPIOB,data);
delay(2); E_H();
E_L(); } /***********显示函数************/ void display(uchar *s) {
while(*s<0) { wdata(*s++); delay(200);
} } void
main(void) { CLK_CONFIG(); GPIO_CONFIG(); init_12864();
wcom(0x80); display(table2); wcom(0x91); //第二行地址值
display(table1); wcom(0x88); //第三行地址值
display(table2); while(1); }
|
|