STM32
直播中

英雄孤寂

11年用户 1109经验值
私信 关注
[问答]

关于STM8驱动LCD1602遇到的问题求解

最近因为接了一个老师的项目,要用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就是一点反应都没有。老师也看不出是哪里不对。希望有人能帮看一下到底是哪里的问题

回帖(1)

董达勇

2024-4-28 10:19:39
注意设置读写延时 
举报

更多回帖

发帖
×
20
完善资料,
赚取积分