標(biāo)題: 1602自定義字符的另一種思路,實(shí)現(xiàn)超過8種自定義字符的顯示 [打印本頁]

作者: 51hei小胡    時(shí)間: 2017-3-15 23:52
標(biāo)題: 1602自定義字符的另一種思路,實(shí)現(xiàn)超過8種自定義字符的顯示
最近在做一個(gè)可定時(shí)的插座。原計(jì)劃降低成本,用數(shù)碼管做為倒計(jì)時(shí)顯示。后面想到除了定時(shí)通電,還需要定時(shí)斷電,或許后面還要增加其他功能。這樣數(shù)碼管的表現(xiàn)力就不夠了。剛好手上還有一塊閑置的1602,于是就尋思著用它來做一個(gè)有設(shè)置菜單選擇的顯示。不好意思,扯得有點(diǎn)遠(yuǎn)了。。
       1602我就不介紹了,大家都知道它具有自定義字符的功能,但是只能存儲(chǔ)8個(gè)字符。按一般的思路,把字符寫入CGRAM,然后取這8個(gè)定義好的字符來顯示。但是,還可以用一種動(dòng)態(tài)寫入字符的方法。
       動(dòng)態(tài)寫入字符就是在需要顯示該字符之前,才把字符寫入到CGRAM中。所以,我們?nèi)『玫淖帜4娣旁贏RDUINO上,在顯示前才寫入。還有一點(diǎn)要注意的是,顯示坐標(biāo)的設(shè)置應(yīng)該放在顯示之前,如果放在寫入字符之前就不能正常顯示。
//不能顯示:
LCD_SetXY(line, column);                    //設(shè)置坐標(biāo)
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個(gè)數(shù)字,如果按一般思路只寫入8個(gè)字符是肯定不能實(shí)現(xiàn)的了,但如果是動(dòng)態(tài)寫入呢。如果我要反顯'1',那么我就將反顯的數(shù)字'1'寫入CGRAM。而要顯示'4',就寫入'4'覆蓋原來的'1'在CGRAM中的內(nèi)存。這樣,把10個(gè)數(shù)字顯示完,也只用到了一個(gè)自定義字符的空間。不過在同一時(shí)間也還是最多顯示8個(gè)自定字符。我原來以為一個(gè)字符顯示出來后,如果不刷新屏幕,這個(gè)字符是不會(huì)受影響的。而實(shí)際上當(dāng)我嘗試寫入新的字符時(shí)(在不同位置顯示),原來顯示的字符也會(huì)改變成最新寫入的字符。
       雖然一次最多還是顯示8個(gè)自定義字符,但在某些場合一個(gè)界面需要8個(gè)自定義字符,在另一個(gè)界面卻需要另外8個(gè)自定義字符,就可以用這種方法實(shí)現(xiàn)。比如我就用來實(shí)現(xiàn)了菜單選項(xiàng)的反顯,而且用這樣即時(shí)寫入字符的方法顯示起來一點(diǎn)延遲也沒有。
       下面是我顯示的效果圖
反顯"timer on"

設(shè)置選項(xiàng)2


時(shí)間設(shè)置




這個(gè)界面用自帶的光標(biāo)會(huì)挺方便的,但我的程序是在一個(gè)循環(huán)體里更新,光標(biāo)效果不好。。




作者: imxuheng    時(shí)間: 2017-3-16 17:11
不錯(cuò),就是接線不美觀
作者: dzbj    時(shí)間: 2017-3-16 17:27
樓主高人 贊

1602寫個(gè)菜單太費(fèi)勁了 出一點(diǎn)點(diǎn)效果就要折騰半天 現(xiàn)在已經(jīng)完全投入串口屏 不再用1602之類的東西了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1