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