前几天看到了这个电子钟的帖子 原帖:单片机+ds1302+dht11+无字库12864带温湿度的电子钟(程序+仿真)
仿真后发现有点小问题,正想问怎么解决,才看到帖子的作者已经把存在问题提出了。。。于是自己尝试了一下@ ai58520
最终效果
原有的问题的解决,最主要的两点
1.字符显示的小错乱
首先我的解决思路是:既然是显是的问题,那么就是有显示的代码错了,
我通过将其注释掉的方法,想定位到出错的地方,结果失败
我通过多次尝试发现,错乱的地方会根据代码的不同而改变
最终确定是定时器中断的问题
- void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant
- {
- uchar i;
- [color=#9932cc]TR0=0;[/color]
- if(L<64)
- {
- CS1=1;
- CS2=0;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL+L);
- if(L+W<64)
- {
- for(i=0;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- else
- {
- for(i=0;i<64-L;i++)
- Write_Data_To_LCD(r[i]);
- CS1=0;
- CS2=1;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL);
- for(i=64-L;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- }
- else
- {
- CS1=0;
- CS2=1;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL+L-64);
- for(i=0;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- TR0=1;
- }//添加代码
复制代码 2.秒时间变换的不准确
因为中断中代码放多了,恰巧lcd屏幕显示的运算量不小,
我在中断中只留下了秒,其他转移到main()中
按键部分和DTH11温度还没还得及研究
最后用了我喜欢的喜欢的字体,布局显示界面
无字库12864 ds1302_小清新版.7z
(120.89 KB, 下载次数: 50)
动态效果可以在https://www.bilibili.com/video/av81812478/查看
|