最近因为接了一个老师的项目,要用STM8
单片机做一个小玩意,其中用到了LCD1602.但做了好久,就是做不通。吧代码贴出来,希望大家帮我看看到底是哪里不对。
#include
#define uchar unsigned char
#define uint unsigned int
_Bool LCD1602_RS @PA_ODR:1;
_Bool LCD1602_RW @PA_ODR:2;
_Bool LCD1602_E @PA_ODR:3;
void Lcd1602_Delay1ms(uint c)
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void init_stm8(void)
{
PA_DDR=0x07;
PA_CR1=0x07;
PA_CR2=0x00;
PB_DDR=0xff;
PB_CR1=0xff;
PB_CR2=0x00;
}
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_RW = 0; //选择写入
PB_ODR = dat; //由于4位的接线是接到P0口的高四位,所以传送
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
PB_ODR = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 0; //选择写入命令
LCD1602_RW = 0; //选择写入
PB_ODR = com; //由于4位的接线是接到P0口的高四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
// Lcd1602_Delay1ms(1);
PB_ODR = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void main(void)
{
unsigned char i;
init_stm8();
LcdWriteCom(0x32); //将8位总线转为4位总线
LcdWriteCom(0x28); //在四位线下的初始化
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针起点
LcdWriteData(123);
while(1)
{
}
}
程序检查没有任何错误,接线也没有任何问题,但LCD就是一点反应都没有。老师也看不出是哪里不对。希望有人能帮看一下到底是哪里的问题