最近在做一個可定時的插座。原計劃降低成本,用數(shù)碼管做為倒計時顯示。后面想到除了定時通電,還需要定時斷電,或許后面還要增加其他功能。這樣數(shù)碼管的表現(xiàn)力就不夠了。剛好手上還有一塊閑置的1602,于是就尋思著用它來做一個有設置菜單選擇的顯示。不好意思,扯得有點遠了。。
1602我就不介紹了,大家都知道它具有自定義字符的功能,但是只能存儲8個字符。按一般的思路,把字符寫入CGRAM,然后取這8個定義好的字符來顯示。但是,還可以用一種動態(tài)寫入字符的方法。
動態(tài)寫入字符就是在需要顯示該字符之前,才把字符寫入到CGRAM中。所以,我們?nèi)『玫淖帜4娣旁贏RDUINO上,在顯示前才寫入。還有一點要注意的是,顯示坐標的設置應該放在顯示之前,如果放在寫入字符之前就不能正常顯示。
//不能顯示:
LCD_SetXY(line, column); //設置坐標
LCD_WriteCGRAM(index, fontB[fontnum]); //寫入自定義字符
LCD_WriteData(index); //顯示字符
//正常顯示:
LCD_WriteCGRAM(index, fontB[fontnum]);
LCD_SetXY(line, column);
LCD_WriteData(index);
例如我現(xiàn)在需要將數(shù)字反顯(反顯要自定義),但是一共有0-9,10個數(shù)字,如果按一般思路只寫入8個字符是肯定不能實現(xiàn)的了,但如果是動態(tài)寫入呢。如果我要反顯'1',那么我就將反顯的數(shù)字'1'寫入CGRAM。而要顯示'4',就寫入'4'覆蓋原來的'1'在CGRAM中的內(nèi)存。這樣,把10個數(shù)字顯示完,也只用到了一個自定義字符的空間。不過在同一時間也還是最多顯示8個自定字符。我原來以為一個字符顯示出來后,如果不刷新屏幕,這個字符是不會受影響的。而實際上當我嘗試寫入新的字符時(在不同位置顯示),原來顯示的字符也會改變成最新寫入的字符。
雖然一次最多還是顯示8個自定義字符,但在某些場合一個界面需要8個自定義字符,在另一個界面卻需要另外8個自定義字符,就可以用這種方法實現(xiàn)。比如我就用來實現(xiàn)了菜單選項的反顯,而且用這樣即時寫入字符的方法顯示起來一點延遲也沒有。
下面是我顯示的效果圖 反顯"timer on"
005808yedeokdnnddjdbnh.jpg (57.3 KB, 下載次數(shù): 83)
下載附件
2017-3-15 23:52 上傳
設置選項2
005851qnyznnnvna3ro34z.jpg (56 KB, 下載次數(shù): 102)
下載附件
2017-3-15 23:52 上傳
時間設置
005922v9z6o7fd9d7dyiv9.jpg (52.18 KB, 下載次數(shù): 78)
下載附件
2017-3-15 23:52 上傳
這個界面用自帶的光標會挺方便的,但我的程序是在一個循環(huán)體里更新,光標效果不好。。
010017exnrcu2rqeewxggo.jpg (49.79 KB, 下載次數(shù): 77)
下載附件
2017-3-15 23:52 上傳
|