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