目錄
1 LCD12864簡介ST7920 GND VCC V0 RS R/W E DB0-DB7 PSB RES VOUT BLA BLK
KS0108 GND VCC V0 RS R/W E DB0-DB7 CS1 CS2 RES VOUT BLA BLK
T6963C FG GND VCC V0 WR RD DB0-DB7 RS CS RES FS BLA BLK
S6B0724 GND VCC RS WR RD CS DB0-DB7 RES BLA BLK
管腳名稱 | LEVER | 管腳功能描述 |
VSS | 0 | 電源地 |
VDD | +5.0V | 電源電壓 |
V0 | - | 液晶顯示器驅動電壓 |
D/I(RS) | H/L | D/I=“H”,表示DB7∽DB0為顯示數據 D/I=“L”,表示DB7∽DB0為顯示指令數據 |
R/W | H/L | R/W=“H”,E=“H”數據被讀到DB7∽DB0 R/W=“L”,E=“H→L”數據被寫到IR或DR |
E | H/L | R/W=“L”,E信號下降沿鎖存DB7∽DB0 R/W=“H”,E=“H”DDRAM數據讀到DB7∽DB0 |
DB0 | H/L | 數據線 |
DB1 | H/L | 數據線 |
DB2 | H/L | 數據線 |
DB3 | H/L | 數據線 |
DB4 | H/L | 數據線 |
DB5 | H/L | 數據線 |
DB6 | H/L | 數據線 |
DB7 | H/L | 數據線 |
CS1 | H/L | H:選擇芯片(右半屏)信號 |
CS2 | H/L | H:選擇芯片(左半屏)信號 |
RET | H/L | 復位信號,低電平復位 |
VOUT | -10V | LCD驅動負電壓 |
LED+ | - | LED背光板電源 |
LED- | - | LED背光板電源 |
指 | 指 令 碼 | 功 能 | |||||||||
令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
清除 顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 將DDRAM填滿"20H",并且設定DDRAM的地址計數器(AC)到"00H" |
地址 歸位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | 設定DDRAM的地址計數器(AC)到"00H",并且將游標移到開頭原點位置;這個指令不改變DDRAM 的內容 |
顯示狀態開/關 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | D=1: 整體顯示 ON C=1: 游標ON B=1:游標位置反白允許 |
進入點 設定 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 指定在數據的讀取與寫入時,設定游標的移動方向及指定顯示的移位 |
游標或顯示移位控制 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X | 設定游標的移動與顯示的移位控制位;這個指令不改變DDRAM 的內容 |
功能 設定 | 0 | 0 | 0 | 0 | 1 | DL | X | RE | X | X | DL=0/1:4/8位數據 RE=1: 擴充指令操作 RE=0: 基本指令操作 |
設定CGRAM 地址 | 0 | 0 | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 設定CGRAM 地址 |
設定DDRAM 地址 | 0 | 0 | 1 | 0 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 設定DDRAM 地址(顯示位址) 第一行:80H-87H 第二行:90H-97H |
讀取忙標志和地址 | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 讀取忙標志(BF)可以確認內部動作是否完成,同時可以讀出地址計數器(AC)的值 |
寫數據到RAM | 1 | 0 | 數據 | 將數據D7——D0寫入到內部的RAM (DDRAM/CGRAM/IRAM/GRAM) | |||||||
讀出RAM的值 | 1 | 1 | 數據 | 從內部RAM讀取數據D7——D0 (DDRAM/CGRAM/IRAM/GRAM) |
指令表2:(RE=1:擴充指令)
指 | 指 令 碼 | 功 能 | |||||||||
令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
待命 模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 進入待命模式,執行其他指令都棵終止 待命模式 |
卷動地址開關開啟 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SR | SR=1:允許輸入垂直卷動地址 SR=0:允許輸入IRAM和CGRAM地址 |
反白 選擇 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | R1 | R0 | 選擇2行中的任一行作反白顯示,并可決定反白與否。初始值R1R0=00,第一次設定為反白顯示,再次設定變回正常 |
睡眠 模式 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SL | X | X | SL=0:進入睡眠模式 SL=1:脫離睡眠模式 |
擴充 功能 設定 | 0 | 0 | 0 | 0 | 1 | CL | X | RE | G | 0 | CL=0/1:4/8位數據 RE=1: 擴充指令操作 RE=0: 基本指令操作 G=1/0:繪圖開關 |
設定繪圖RAM 地址 | 0 | 0 | 1 | 0 AC6 | 0 AC5 | 0 AC4 | AC3 AC3 | AC2 AC2 | AC1 AC1 | AC0 AC0 | 設定繪圖RAM 先設定垂直(列)地址AC6AC5…AC0 再設定水平(行)地址AC3AC2AC1AC0 將以上16位地址連續寫入即可 |
備注:當IC1在接受指令前,微處理器必須先確認其內部處于非忙碌狀態,即讀取BF標志時,BF需為零,方可接受新的指令;如果在送出一個指令前并不檢查BF標志,那么在前一個指令和這個指令中間必須延長一段較長的時間,即是等待前一個指令確實執行完成。
2、字符顯示
帶中文字庫的128X64-0402B每屏可顯示4行8列共32個16×16點陣的漢字,每個顯示RAM可顯示1個中文字符或2個16×8點陣全高ASCII碼字符,即每屏最多可實現32個中文字符或64個ASCII碼字符的顯示。帶中文字庫的128X64-0402B內部提供128×2字節的字符顯示RAM緩沖區(DDRAM)。字符顯示是通過將字符顯示編碼寫入該字符顯示RAM實現的。根據寫入內容的不同,可分別在液晶屏上顯示CGROM(中文字庫)、HCGROM(ASCII碼字庫)及CGRAM(自定義字形)的內容。三種不同字符/字型的選擇編碼范圍為:0000~0006H(其代碼分別是0000、0002、0004、0006共4個)顯示自定義字型,02H~7FH顯示半寬ASCII碼字符,A1A0H~F7FFH顯示8192種GB2312中文字庫字形。字符顯示RAM在液晶模塊中的地址80H~9FH。字符顯示的RAM的地址與32個字符顯示區域有著一一對應的關系,其對應關系如下表所示。
80H | 81H | 82H | 83H | 84H | 85H | 86H | 87H |
90H | 91H | 92H | 93H | 94H | 95H | 96H | 97H |
88H | 89H | 8AH | 8BH | 8CH | 8DH | 8EH | 8FH |
98H | 99H | 9AH | 9BH | 9CH | 9DH | 9EH | 9FH |
在數字電路中,所有的數據都是以0和1保存的,對LCD控制器進行不同的數據操作,可以得到不同的結果。對于顯示英文操作,由于英文字母種類很少,只需要8位(一字節)即可。而對于中文,常用卻有6000以上,于是我們的DOS前輩想了一個辦法,就是將ASCII表的高128個很少用到的數值以兩個為一組來表示漢字,即漢字的內碼。而剩下的低128位則留給英文字符使用,即英文的內碼。
那么,得到了漢字的內碼后,還僅是一組數字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數字,但它的意義卻與數字的意義有了根本的變化,它是用數字的各位信息來記載英文或漢字的形狀,如英文的'A'在字模的記載方式如圖1所示:
圖1 “A”字模圖
而中文的“你”在字模中的記載卻如圖2所示:
圖2 “你”字模圖
根據芯片的不同取模的方式不同,有多種取模方式:單色點陣液晶字模,橫向取模,字節正序,單色點陣液晶字模,橫向取模,字節倒序,單色點陣液晶字模,縱向取模,字節正序,單色點陣液晶字模,縱向取模,字節倒序等等。
2.2圖形顯示先設垂直地址再設水平地址(連續寫入兩個字節的資料來完成垂直與水平的坐標地址)
垂直地址范圍 AC5...AC0
水平地址范圍 AC3…AC0
繪圖RAM 的地址計數器(AC)只會對水平地址(X 軸)自動加一,當水平地址=0FH 時會重新設為00H
但并不會對垂直地址做進位自動加一,故當連續寫入多筆資料時,程序需自行判斷垂直地址是否需重新設定。GDRAM的坐標地址與資料排列順序如下圖:
用帶中文字庫的128X64顯示模塊時應注意以下幾點:
①欲在某一個位置顯示中文字符時,應先設定顯示字符位置,即先設定顯示地址,再寫入中文字符編碼。
②顯示ASCII字符過程與顯示中文字符過程相同。不過在顯示連續字符時,只須設定一次顯示地址,由模塊自動對地址加1指向下一個字符位置,否則,顯示的字符中將會有一個空ASCII字符位置。
③當字符編碼為2字節時,應先寫入高位字節,再寫入低位字節。
④模塊在接收指令前,向處理器必須先確認模塊內部處于非忙狀態,即讀取BF標志時BF需為“0”,方可接受新的指令。如果在送出一個指令前不檢查BF標志,則在前一個指令和這個指令中間必須延遲一段較長的時間,即等待前一個指令確定執行完成。指令執行的時間請參考指令表中的指令執行時間說明。
⑤“RE”為基本指令集與擴充指令集的選擇控制位。當變更“RE”后,以后的指令集將維持在最后的狀態,除非再次變更“RE”位,否則使用相同指令集時,無需每次均重設“RE”位。
2.4指令描述 1、顯示開/關設置 CODE:
功能:設置屏幕顯示開/關。 DB0=H,開顯示;DB0=L,關顯示。不影響顯示RAM(DD RAM)中的內容。 2、設置顯示起始行 CODE:
功能:執行該命令后,所設置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計數器控制的,該命令自動將A0-A5位地址送入Z地址計數器,起始地址可以是0-63范圍內任意一行。Z地址計數器具有循環計數功能,用于顯示行掃描同步,當掃描完一行后自動加一。 3、設置頁地址 CODE:
功能:執行本指令后,下面的讀寫操作將在指定頁內,直到重新設置。頁地址就是DD RAM 的行地址,頁地址存儲在X地址計數器中,A2-A0可表示8頁,讀寫數據對頁地址沒有影響,除本指令可改變頁地址外,復位信號(RST)可把頁地址計數器內容清零。 DD RAM地址映像表 Y 地址
4、設置列地址 CODE:
功能: DD RAM 的列地址存儲在Y地址計數器中,讀寫數據對列地址有影響,在對DD RAM進行讀寫操作后,Y地址自動加一。 5、狀態檢測 CODE:
功能:讀忙信號標志位(BF)、復位標志位(RST)以及顯示狀態位(ON/OFF)。 BF=H:內部正在執行操作; BF=L:空閑狀態。 RST=H:正處于復位初始化狀態; RST=L:正常狀態。 ON/OFF=H:表示顯示關閉; ON/OFF=L:表示顯示開。 6、寫顯示數據 CODE:
功能:寫數據到DD RAM,DD RAM是存儲圖形顯示數據的,寫指令執行后Y地址計數器自動加1。D7-D0位數據為1表示顯示,數據為0表示不顯示。寫數據到DD RAM前,要先執行“設置頁地址”及“設置列地址”命令。 7、讀顯示數據 CODE:
功能:從DD RAM讀數據,讀指令執行后Y地址計數器自動加1。從DD RAM讀數據前要先執行“設置頁地址” 及“設置列地址”命令。 8、屏幕顯示與DD RAM地址映射關系 [td]
|
在Protues軟件中選擇所需元件,搭建的電路圖如圖1所示。
圖1 仿真硬件原理圖
將編寫的代碼燒寫到單片機里,運行液晶顯示不正常,如圖2所示。
圖2 運行圖
開始我還以為是程序問題,把程序看了又看,改了又改,顯示結果還是一樣。后來問了下張勇生,出現這種情況的原因是P0口沒接上拉電阻。因為P0口是開漏的,不管它的驅動能力多大,相當于它是沒有電源的,需要外部的電路提供,絕大多數情況下P0口是必需加上拉電阻的。接上拉電阻后,重新運行這下運行正常了,如圖3所示。
圖3正常顯示
由于本人開發實驗板不同,對其修改如下:(詳細代碼請下載附件)
整個部件連接圖,包括51最小系統,復位電路,還有無字庫12864實際應用連接圖,用標簽連接的好處是(可觀性),還有如需修改,改仿真圖標簽及keil 自定義標號即可
代碼一座修改如下所示:(詳細代碼請下載附件)
3.2圖形顯示
我選了一張128x64的圖片在字模軟件中生產相應的C代碼,將C代碼寫入到程序中。
由于液晶由兩個控制芯片來控制,所以有片選信號端口CS1和CS2。我在字體顯示程序中把改了顯示那一塊的代碼,主程序中改了片選信號。開始同時將左右屏都開了,顯示事,左右屏同時顯示一樣的圖形,并且顯示的圖形不完整。主程序中顯示部分的程序不對,我想了后,將主程序中程序改了一下,先開左屏調用左屏顯示函數,在關左屏開右屏調用右屏顯示函數。最后顯示成功。如圖4所示。
圖4 圖形顯示
代碼如下所示:
3.3同時顯示多個漢字用字模軟件取模后通過改寫軟件,仿真圖形如圖5所示。
圖5 顯示多個漢字的仿真圖
代碼如下所示:(詳細代碼請下載附件)
3.4向上滾動顯示
仿真圖形如圖6所示。
(a)第一次全部顯示 (b)開始滾動顯示
(c) (d)
程序如下所示:
(詳細代碼請下載附件)剛開始學液晶時感覺好難,字模就困擾了我好多天。通過看資料查資料,以及看程序搞懂了,通過寫程序仿真,對液晶的控制更明白,主要寫的是并行數據傳輸的代碼。寫了一個漢字的顯示,多個漢字顯示程序,圖形顯示的程序,還有漢字動態顯示。由于取字模軟件運行有點問題,左上角上自動多出一撇,所以顯示字或圖形的左上角多出一撇。后面寫一個漢字一個漢字顯示程序并仿真,還有波形顯示程序和仿真。
lygweifeng 發表于 2017-10-25 09:04
請問你的取模軟件使用是什么軟件?如何設置的?我用的copyleft by horse2000, 但是取的字模和你的不一樣, ...
酌繁 發表于 2018-10-28 16:21
樓主說“P0口是必需加上拉電阻的”,但是最后實驗的原理圖并沒有加上上拉電阻,所以在這個程序中,不需要加 ...
嵌入式弟弟 發表于 2020-5-7 21:06
請問一下,文字怎么取模出來的,我取模后顯示文字不正常
18435211232 發表于 2020-3-2 20:35
兄弟,你現在實現了嗎?我也是取模這里卡住了,希望您指點一番
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |