可能是读出的时钟数据没有屏蔽掉无关的位。 |
原因:程序语句里是否含有中文字符,或者不可见字符,第二,通信异常,延迟不足也会产生,但是我更觉得是字符问题 |
我估计你是用到时钟芯片了。DS1302、1307等。 可能是读取芯片数据没有正确读取出来, 检查一下程序是否正确?适当加一点延时可能会有帮助。 数据线是否正确连接?数据线上加上拉电阻了吗? |
两个思路 读取1302的时序适当加点延时,1302坏 换一片 读取的数据可以通过发串口来测试 |
理论上你是在读DS1302的时钟,但是没看到你这部分代码 |
有DS1302等芯片吗?IO线接对没,芯片确定正常?我以前遇过时钟芯片不正常有类似情况,99:00 |
检查写的字符串有没有结束符“\x00", |
除了使用不同参数的芯片外,无需修改延时数值 |
长风007 发表于 2020-9-23 17:12 这是lcd1602的程序,时序有问题吗? #include "LCD1602.h" //**************************************************** //MS延时函数(12M晶振下测试) //**************************************************** void LCD1602_delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<123;j++); } //**************************************************** //写指令 //**************************************************** void LCD1602_write_com(unsigned char com) { LCD1602_RS = 0; LCD1602_delay_ms(1); LCD1602_EN = 1; LCD1602_PORT = com; LCD1602_delay_ms(1); LCD1602_EN = 0; } //**************************************************** //写数据 //**************************************************** void LCD1602_write_data(unsigned char dat) { LCD1602_RS = 1; LCD1602_delay_ms(1); LCD1602_PORT = dat; LCD1602_EN = 1; LCD1602_delay_ms(1); LCD1602_EN = 0; } //**************************************************** //连续写字符 //**************************************************** void LCD1602_write_word(unsigned char *s) { while(*s>0) { LCD1602_write_data(*s); s++; } } void Init_LCD1602() { LCD1602_EN = 0; //设置为写状态 LCD1602_write_com(0x38); //显示模式设定 LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置 LCD1602_write_com(0x06); //写一个字符后指针加一 LCD1602_write_com(0x01); //清屏指令 } |
本帖最后由 长风007 于 2020-9-23 17:16 编辑 查一下你的显示位,还有显示的时间间隔。实物是有时序要求的! |
Hei002.jpg (61.75 KB, 下载次数: 87)
可以参考一下这个图
除了仿真使用的是89c52,实物使用的是89c54RD芯片以外,其余连接均和仿真一样 |
你要搞清楚时序图 ![]() //**************************************************** //写指令 //**************************************************** void LCD1602_write_com(unsigned char com) { LCD1602_RS = 0; //LCD1602_delay_ms(1); LCD1602_EN = 0; //<------ LCD1602_PORT = com; LCD1602_EN = 1; //<------ LCD1602_delay_ms(1); LCD1602_EN = 0; } //**************************************************** //写数据 //**************************************************** void LCD1602_write_data(unsigned char dat) { LCD1602_RS = 1; //LCD1602_delay_ms(1); LCD1602_EN = 0; //<------ LCD1602_PORT = dat; LCD1602_EN = 1; LCD1602_delay_ms(1); LCD1602_EN = 0; } |