proteus仿真液晶顯示教程 目錄 1 LCD12864簡介
2 LCD12864顯示原理
2.1漢字和英文顯示原理
2.2圖形顯示
2.3應用說明
2.4指令描述
3軟件仿真
3.1漢字顯示
3.2圖形顯示
3.3同時顯示多個漢字
3.4向上滾動顯示
4小結
1LCD12864簡介- ST7920類 這種控制器帶中文字庫,為用戶免除了編制字庫的麻煩,該控制器的液晶還支持畫圖方式。該類液晶支持68時序8位和4位并口以及串口。
(2)KS0108類 這種控制器指令簡單,不帶字庫。支持68時序8位并口。
(3)T6963C類 這種控制器功能強大,帶西文字庫。有文本和圖形兩種顯示方式。有文本和圖形兩個圖層,并且支持兩個圖層的疊加顯示。支持80時序8位并口。
(4)COG類 常見的控制器有S6B0724和ST7565,這兩個控制器指令兼容。支持68時序8位并口,80時序8位并口和串口。COG類液晶的特點是結構輕便,成本低。
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 12864是一種圖形點陣液晶顯示器,它主要由行驅動器/列驅動器及128×64全點陣液晶顯示器組成。可完成圖形顯示,也可以顯示8×4個(16×16點陣)漢字。 | | | | | | | | | | | | | | D/I=“H”,表示DB7∽DB0為顯示數據 D/I=“L”,表示DB7∽DB0為顯示指令數據 | | | R/W=“H”,E=“H”數據被讀到DB7∽DB0 R/W=“L”,E=“H→L”數據被寫到IR或DR | | | R/W=“L”,E信號下降沿鎖存DB7∽DB0 R/W=“H”,E=“H”DDRAM數據讀到DB7∽DB0 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
在使用12864LCD前先必須了解以下功能器件才能進行編程。12864內部功能器件及相關功能如下: 1. 指令寄存器(IR) IR是用于寄存指令碼,與數據寄存器數據相對應。當D/I=0時,在E信號下降沿的作用下,指令碼寫入IR。 2.數據寄存器(DR) DR是用于寄存數據的,與指令寄存器寄存指令相對應。當D/I=1時,在下降沿作用下,圖形顯示數據寫入DR,或在E信號高電平作用下由DR讀到DB7∽DB0數據總線。DR和DDRAM之間的數據傳輸是模塊內部自動執行的。 3.忙標志:BF BF標志提供內部工作情況。BF=1表示模塊在內部操作,此時模塊不接受外部指令和數據。BF=0時,模塊為準備狀態,隨時可接受外部指令和數據。 利用STATUS READ指令,可以將BF讀到DB7總線,從檢驗模塊之工作狀態。 4.顯示控制觸發器DFF 此觸發器是用于模塊屏幕顯示開和關的控制。DFF=1為開顯示(DISPLAY OFF),DDRAM的內容就顯示在屏幕上,DFF=0為關顯示(DISPLAY OFF)。 DDF的狀態是指令DISPLAY ON/OFF和RST信號控制的。 5.XY地址計數器 XY地址計數器是一個9位計數器。高3位是X地址計數器,低6位為Y地址計數器,XY地址計數器實際上是作為DDRAM的地址指針,X地址計數器為DDRAM的頁指針, Y地址計數器為DDRAM的Y地址指針。 X地址計數器是沒有記數功能的,只能用指令設置。 Y地址計數器具有循環記數功能,各顯示數據寫入后,Y地址自動加1,Y地址指針從0到63。 6.顯示數據RAM(DDRAM) DDRAM是存儲圖形顯示數據的。數據為1表示顯示選擇,數據為0表示顯示非選擇。DDRAM與地址和顯示位置的關系見DDRAM地址表。 7.Z地址計數器 Z地址計數器是一個6位計數器,此計數器具備循環記數功能,它是用于顯示行掃描同步。當一行掃描完成,此地址計數器自動加1,指向下一行掃描數據,RST復位后Z地址計數器為0。 Z地址計數器可以用指令DISPLAY START LINE預置。因此,顯示屏幕的起始行就由此指令控制,即DDRAM的數據從哪一行開始顯示在屏幕的第一行。此模塊的DDRAM共64行,屏幕可以循環滾動顯示64行。 12864LCD的指令系統 模塊控制芯片提供兩套控制命令,基本指令和擴充指令如下: 指令表1:(RE=0:基本指令) 指 | 指 令 碼 | 功 能 | 令 | 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 | 2 LCD12864顯示原理2.1漢字和英文顯示原理 在數字電路中,所有的數據都是以0和1保存的,對LCD控制器進行不同的數據操作,可以得到不同的結果。對于顯示英文操作,由于英文字母種類很少,只需要8位(一字節)即可。而對于中文,常用卻有6000以上,于是我們的DOS前輩想了一個辦法,就是將ASCII表的高128個很少用到的數值以兩個為一組來表示漢字,即漢字的內碼。而剩下的低128位則留給英文字符使用,即英文的內碼。 那么,得到了漢字的內碼后,還僅是一組數字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數字,但它的意義卻與數字的意義有了根本的變化,它是用數字的各位信息來記載英文或漢字的形狀,如英文的'A'在字模的記載方式如圖1所示:
1.001.jpg (26.91 KB, 下載次數: 164)
下載附件
2017-7-31 03:17 上傳
圖1 “A”字模圖 而中文的“你”在字模中的記載卻如圖2所示:
1.002.jpg (30.53 KB, 下載次數: 158)
下載附件
2017-7-31 03:17 上傳
圖2 “你”字模圖 根據芯片的不同取模的方式不同,有多種取模方式:單色點陣液晶字模,橫向取模,字節正序,單色點陣液晶字模,橫向取模,字節倒序,單色點陣液晶字模,縱向取模,字節正序,單色點陣液晶字模,縱向取模,字節倒序等等。 2.2圖形顯示 先設垂直地址再設水平地址(連續寫入兩個字節的資料來完成垂直與水平的坐標地址) 垂直地址范圍 AC5...AC0 水平地址范圍 AC3…AC0 繪圖RAM 的地址計數器(AC)只會對水平地址(X 軸)自動加一,當水平地址=0FH 時會重新設為00H 但并不會對垂直地址做進位自動加一,故當連續寫入多筆資料時,程序需自行判斷垂直地址是否需重新設定。GDRAM的坐標地址與資料排列順序如下圖:
1.003.jpg (36.79 KB, 下載次數: 151)
下載附件
2017-7-31 03:17 上傳
2.3應用說明 用帶中文字庫的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 地址 0 | 1 | 2 | ……………………… | 61 | 62 | 63 |
| DB0 ∫ PAGE0 DB7 | X=0 | DB0 ∫ PAGE1 DB7 | X=1 | ∷ ∷ ∷ ∷ |
| DB0 ∫ PAGE6 DB7 | X=7 | DB0 ∫ PAGE7 DB7 | X=8 |
|
|
|
|
|
|
|
|
|
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]
|
| Y1 | Y2 | Y3 | Y4 | ………… | Y62 | Y63 | Y64 |
| X=0 | Line 0 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB0 | Line 1 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB1 | Line 2 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB2 | Line 3 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB3 | Line 4 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB4 | Line 5 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB5 | Line 6 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB6 | Line 7 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB7 | ………… ………… ………… |
| X=7 | Line60 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB4 | Line61 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB5 | Line62 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB6 | Line63 | 1/0 | 1/0 | 1/0 | 1/0 | ………… | 1/0 | 1/0 | 1/0 | DB7 |
| 3軟件仿真3.1漢字顯示 在Protues軟件中選擇所需元件,搭建的電路圖如圖1所示。
1.004.jpg (28.24 KB, 下載次數: 273)
下載附件
2017-7-31 03:17 上傳
圖1 仿真硬件原理圖 將編寫的代碼燒寫到單片機里,運行液晶顯示不正常,如圖2所示。
1.005.jpg (28.29 KB, 下載次數: 164)
下載附件
2017-7-31 03:17 上傳
圖2 運行圖 開始我還以為是程序問題,把程序看了又看,改了又改,顯示結果還是一樣。后來問了下張勇生,出現這種情況的原因是P0口沒接上拉電阻。因為P0口是開漏的,不管它的驅動能力多大,相當于它是沒有電源的,需要外部的電路提供,絕大多數情況下P0口是必需加上拉電阻的。接上拉電阻后,重新運行這下運行正常了,如圖3所示。
1.006.jpg (35.53 KB, 下載次數: 227)
下載附件
2017-7-31 03:17 上傳
圖3正常顯示
由于本人開發實驗板不同,對其修改如下:(詳細代碼請下載附件) 整個部件連接圖,包括51最小系統,復位電路,還有無字庫12864實際應用連接圖,用標簽連接的好處是(可觀性),還有如需修改,改仿真圖標簽及keil 自定義標號即可
1.007.jpg (52.02 KB, 下載次數: 303)
下載附件
2017-7-31 03:17 上傳
1.008.jpg (55.59 KB, 下載次數: 193)
下載附件
2017-7-31 03:17 上傳
代碼一座修改如下所示:(詳細代碼請下載附件)
3.2圖形顯示 我選了一張128x64的圖片在字模軟件中生產相應的C代碼,將C代碼寫入到程序中。 由于液晶由兩個控制芯片來控制,所以有片選信號端口CS1和CS2。我在字體顯示程序中把改了顯示那一塊的代碼,主程序中改了片選信號。開始同時將左右屏都開了,顯示事,左右屏同時顯示一樣的圖形,并且顯示的圖形不完整。主程序中顯示部分的程序不對,我想了后,將主程序中程序改了一下,先開左屏調用左屏顯示函數,在關左屏開右屏調用右屏顯示函數。最后顯示成功。如圖4所示。
1.009.jpg (60.82 KB, 下載次數: 221)
下載附件
2017-7-31 03:17 上傳
圖4 圖形顯示 代碼如下所示: 3.3同時顯示多個漢字 用字模軟件取模后通過改寫軟件,仿真圖形如圖5所示。
1.010.jpg (70.81 KB, 下載次數: 228)
下載附件
2017-7-31 03:17 上傳
圖5 顯示多個漢字的仿真圖 代碼如下所示:(詳細代碼請下載附件)
3.4向上滾動顯示 仿真圖形如圖6所示。
1.011.jpg (22.17 KB, 下載次數: 172)
下載附件
2017-7-31 03:17 上傳
1.012.jpg (20.1 KB, 下載次數: 160)
下載附件
2017-7-31 03:17 上傳
(a)第一次全部顯示 (b)開始滾動顯示
1.013.jpg (27.65 KB, 下載次數: 171)
下載附件
2017-7-31 03:17 上傳
1.014.jpg (25.51 KB, 下載次數: 143)
下載附件
2017-7-31 03:17 上傳
(c) (d) 程序如下所示: (詳細代碼請下載附件)
4小結 剛開始學液晶時感覺好難,字模就困擾了我好多天。通過看資料查資料,以及看程序搞懂了,通過寫程序仿真,對液晶的控制更明白,主要寫的是并行數據傳輸的代碼。寫了一個漢字的顯示,多個漢字顯示程序,圖形顯示的程序,還有漢字動態顯示。由于取字模軟件運行有點問題,左上角上自動多出一撇,所以顯示字或圖形的左上角多出一撇。后面寫一個漢字一個漢字顯示程序并仿真,還有波形顯示程序和仿真。

完整資料下載(word格式 可編輯)還附帶仿真和源碼:
http://www.zg4o1577.cn/bbs/dpj-89569-1.html
|