最近我用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);
} |