51單片機(jī)學(xué)習(xí)筆記:ST7920控制器的12864液晶使用總結(jié)
總結(jié):
1、 控制芯片不同,液晶接口定義,或者寄存器定義也可能不同
2、 顯示方式有并行和串行,串行方式據(jù)說(shuō)不能讀數(shù)據(jù)寄存器(DR),那指令暫存器IR是否可讀?
3、 含字庫(kù)芯片顯示字符時(shí)不必對(duì)字符取模了,但字庫(kù)有可能缺斤少兩,就是說(shuō)有一部分字(哪怕是常用字),在字庫(kù)中沒(méi)有,如果你第一次測(cè)試代碼就遇到該字在字庫(kù)中沒(méi)有的情況,建議去買體育彩票,支持體育運(yùn)動(dòng)!
4、 對(duì)芯片的結(jié)構(gòu)地址一定要理解清楚,個(gè)人閱讀網(wǎng)上一些資料發(fā)現(xiàn)大多是不準(zhǔn)確的,甚至自相矛盾
很多數(shù)據(jù)手冊(cè)中內(nèi)容更是模棱兩可,不明所以,數(shù)據(jù)手冊(cè)之間也有矛盾的!
我根據(jù)自己的實(shí)驗(yàn)結(jié)果,再結(jié)合一些資料,得出以下結(jié)論:
ST7920可以控制256×64 點(diǎn)陣的二維繪圖緩沖空間,
對(duì)于我們的12864液晶,GDRAM大小為256*64, 不是網(wǎng)上普遍說(shuō)的只用到了一半,其實(shí)是全部用了,
它包含可視區(qū)和滾動(dòng)可視區(qū),滾動(dòng)可視區(qū)就是默認(rèn)不顯示的,要滾屏之后才能看到,
可視區(qū)對(duì)應(yīng)GDRAM的上半部分點(diǎn)陣區(qū)域256*32,滾動(dòng)可視區(qū)是GDRAM的下半部分256*32,
然后再將可視區(qū)的水平(128-255)和垂直(0-31)區(qū)域的GDRAM映射到液晶的下半屏,
這就是我們的12864. 我畫個(gè)圖給大家看就清楚了!
再補(bǔ)充一些:
1.網(wǎng)上一些資料給出的繪圖步驟說(shuō)第一步設(shè)置為擴(kuò)充指令集0x34,其實(shí)這個(gè)根據(jù)實(shí)際情況來(lái)定,
比如要播放視頻或動(dòng)畫,開(kāi)著繪圖就很流暢
2. 打點(diǎn)法畫圖實(shí)在太慢了,不建議使用打點(diǎn)法進(jìn)行全屏繪圖
3.反白的一些方法
打點(diǎn)法反白矩形區(qū)還可以,建議矩形范圍小一些,不然比較慢,
打點(diǎn)法反白文字效果很好,因?yàn)槲淖值木匦螀^(qū)比較小,速度很快,不閃動(dòng)!
不過(guò)繪圖法反白文字效率更高,flash空間充裕的話建議用繪圖法 ,
看到網(wǎng)上的一些代碼,打點(diǎn)時(shí)一般先讀出當(dāng)前地址16位數(shù)據(jù),和點(diǎn)合成后再分2個(gè)字節(jié)寫進(jìn)GDRAM,
其實(shí)我們可以提高點(diǎn)效率,讀只要讀一個(gè)字節(jié),寫也只要寫一個(gè)字節(jié),沒(méi)必要把16位數(shù)據(jù)一起讀出來(lái)再寫進(jìn)去
4.關(guān)于液晶顯示文字
液晶顯示英文和漢字時(shí),應(yīng)該做到一個(gè)函數(shù)里,做到2個(gè)函數(shù)里是完全沒(méi)必要,也是不可取的
因?yàn)樽龅揭粋€(gè)函數(shù)里可以直接輸出全角和半角的字符,可以中英文加標(biāo)點(diǎn)符號(hào)一起混合輸出.
5.關(guān)于繪圖清零,網(wǎng)上的代碼中一般都是清256*32,下半屏都不清的,這是可以的
但是如果你要滾屏顯示就要清,不清的話數(shù)據(jù)是隨機(jī)的,一個(gè)個(gè)點(diǎn)隨機(jī)出來(lái)向上冒
6.看到一個(gè)帖子,實(shí)現(xiàn)滾屏用了算法,
其實(shí)只要搞清楚地址結(jié)構(gòu),重寫個(gè)setScrollPos方法,也就是對(duì)setPos方法改幾個(gè)地址就可實(shí)現(xiàn)循環(huán)滾動(dòng).
如果為了靈活的滾動(dòng),可以將setPos方法中的4個(gè)行坐標(biāo),擴(kuò)展到8個(gè)行坐標(biāo),因?yàn)楸緛?lái)就應(yīng)該有8個(gè)行坐標(biāo),
可視區(qū)4行,滾動(dòng)可視區(qū)4行,而且他們是連續(xù)的
以上是我個(gè)人的一些實(shí)驗(yàn)結(jié)論! ,也畫了其結(jié)構(gòu)圖, 方便新手理解, 不當(dāng)之處敬請(qǐng)指出,謝謝!
由于不同的控制器,不同型號(hào)的液晶代碼可能都不一樣,網(wǎng)上的那些代碼一般也不完全通用,
只要理解了控制器的地址結(jié)構(gòu)與液晶的位置關(guān)系,就可以將常見(jiàn)的功能寫出來(lái),新手有問(wèn)題直接跟帖吧,
大家一起交流.