前幾天看到了這個電子鐘的帖子 原帖:單片機+ds1302+dht11+無字庫12864帶溫濕度的電子鐘(程序+仿真)
仿真后發現有點小問題,正想問怎么解決,才看到帖子的作者已經把存在問題提出了。。。于是自己嘗試了一下@ ai58520
最終效果
211338.jpg (106.96 KB, 下載次數: 51)
下載附件
2020-1-3 09:46 上傳
原有的問題的解決,最主要的兩點
1.字符顯示的小錯亂
sss.png (194.49 KB, 下載次數: 56)
下載附件
2020-1-3 10:36 上傳
首先我的解決思路是:既然是顯是的問題,那么就是有顯示的代碼錯了,
我通過將其注釋掉的方法,想定位到出錯的地方,結果失敗
我通過多次嘗試發現,錯亂的地方會根據代碼的不同而改變
最終確定是定時器中斷的問題
- 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屏幕顯示的運算量不小,
aaa.png (179.96 KB, 下載次數: 61)
下載附件
2020-1-3 10:36 上傳
我在中斷中只留下了秒,其他轉移到main()中
按鍵部分和DTH11溫度還沒還得及研究
最后用了我喜歡的喜歡的字體,布局顯示界面
無字庫12864 ds1302_小清新版.7z
(120.89 KB, 下載次數: 50)
2020-1-3 10:47 上傳
點擊文件名下載附件
無字庫12864+ds1302_小清新版.7z 下載積分: 黑幣 -5
Inkedssssss_LI.jpg (2.22 MB, 下載次數: 49)
下載附件
2020-1-3 10:52 上傳
動態效果可以在https://www.bilibili.com/video/av81812478/查看
|