|
最近因为接了一个老师的项目,要用STM8单片机做一个小玩意,其中用到了LCD1602.但做了好久,就是做不通。吧代码贴出来,希望大家帮我看看到底是哪里不对。 #include<STM8S103F3P.H> #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就是一点反应都没有。老师也看不出是哪里不对。希望有人能帮看一下到底是哪里的问题 |
STM8S103飞线外接芯片,I2C不能得到slaveAddress应答,通讯失败。
测试标签123
IAR FOR ARM和IAR FOR STM8无法共存,
STM8L052,液晶内部电源怎么用?
STM8S105C6T6 UART2串口,能接收数据,不能发送数据
STM8S105K4 串口2 无奇偶校验,也能接收 偶校验的 数据
在STM8S的IAP使用中断和APP使用中断问题
STM8L151 SMBUS设计
STM8S103F复位异常
STM8L的LCD调试时不亮
微信公众号
手机版
基于战舰STM32的1602液晶驱动程序.zip
2015-11-13 11:03 上传
点击文件名下载附件
下载积分: ST金币 -12.61 MB, 下载次数: 28, 下载积分: ST金币 -1