|
word格式的完整文檔下載:
Protues仿真液晶顯示
目錄
1 LCD12864簡介
2 LCD12864顯示原理
2.1漢字和英文顯示原理
2.2圖形顯示
2.3應用說明
2.4指令描述
3軟件仿真
3.1漢字顯示
3.2圖形顯示
3.3同時顯示多個漢字
3.4向上滾動顯示
4小結
1 LCD12864簡介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點陣)漢字。
管腳名稱
| 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背光板電源
|
在使用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, 下載次數: 116)
下載附件
2016-9-26 18:23 上傳
圖1 “A”字模圖
而中文的“你”在字模中的記載卻如圖2所示:
1.002.jpg (30.53 KB, 下載次數: 122)
下載附件
2016-9-26 18:23 上傳
圖2 “你”字模圖
根據芯片的不同取模的方式不同,有多種取模方式:單色點陣液晶字模,橫向取模,字節正序,單色點陣液晶字模,橫向取模,字節倒序,單色點陣液晶字模,縱向取模,字節正序,單色點陣液晶字模,縱向取模,字節倒序等等。
2.2圖形顯示 先設垂直地址再設水平地址(連續寫入兩個字節的資料來完成垂直與水平的坐標地址)
垂直地址范圍 AC5...AC0
水平地址范圍 AC3…AC0
繪圖RAM 的地址計數器(AC)只會對水平地址(X 軸)自動加一,當水平地址=0FH 時會重新設為00H
但并不會對垂直地址做進位自動加一,故當連續寫入多筆資料時,程序需自行判斷垂直地址是否需重新設定。GDRAM的坐標地址與資料排列順序如下圖:
1.003.jpg (36.79 KB, 下載次數: 108)
下載附件
2016-9-26 18:23 上傳
2.3應用說明 用帶中文字庫的128X64顯示模塊時應注意以下幾點:
①欲在某一個位置顯示中文字符時,應先設定顯示字符位置,即先設定顯示地址,再寫入中文字符編碼。
②顯示ASCII字符過程與顯示中文字符過程相同。不過在顯示連續字符時,只須設定一次顯示地址,由模塊自動對地址加1指向下一個字符位置,否則,顯示的字符中將會有一個空ASCII字符位置。
③當字符編碼為2字節時,應先寫入高位字節,再寫入低位字節。
④模塊在接收指令前,向處理器必須先確認模塊內部處于非忙狀態,即讀取BF標志時BF需為“0”,方可接受新的指令。如果在送出一個指令前不檢查BF標志,則在前一個指令和這個指令中間必須延遲一段較長的時間,即等待前一個指令確定執行完成。指令執行的時間請參考指令表中的指令執行時間說明。
⑤“RE”為基本指令集與擴充指令集的選擇控制位。當變更“RE”后,以后的指令集將維持在最后的狀態,除非再次變更“RE”位,否則使用相同指令集時,無需每次均重設“RE”位。
2.4指令描述1、顯示開/關設置
CODE:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| L
| L
| L
| L
| H
| H
| H
| H
| H
| H/L
| 功能:設置屏幕顯示開/關。 DB0=H,開顯示;DB0=L,關顯示。不影響顯示RAM(DD RAM)中的內容。
2、設置顯示起始行
CODE:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| L
| L
| H
| H
| 行地址(0-63)
| 功能:執行該命令后,所設置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計數器控制的,該命令自動將A0-A5位地址送入Z地址計數器,起始地址可以是0-63范圍內任意一行。Z地址計數器具有循環計數功能,用于顯示行掃描同步,當掃描完一行后自動加一。
3、設置頁地址
CODE:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| L
| L
| H
| L
| H
| H
| H
| 頁地址(0-7)
| 功能:執行本指令后,下面的讀寫操作將在指定頁內,直到重新設置。頁地址就是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:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| L
| L
| L
| H
| 列地址(0-63)
| 功能: DD RAM 的列地址存儲在Y地址計數器中,讀寫數據對列地址有影響,在對DD RAM進行讀寫操作后,Y地址自動加一。
5、狀態檢測
CODE:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| H
| L
| BF
| L
| ON/OFF
| RET
| L
| L
| L
| L
| 功能:讀忙信號標志位(BF)、復位標志位(RST)以及顯示狀態位(ON/OFF)。
BF=H:內部正在執行操作; BF=L:空閑狀態。
RST=H:正處于復位初始化狀態; RST=L:正常狀態。
ON/OFF=H:表示顯示關閉; ON/OFF=L:表示顯示開。
6、寫顯示數據
CODE:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| L
| H
| D7
| D6
| D5
| D4
| D3
| D2
| D1
| D0
| 功能:寫數據到DD RAM,DD RAM是存儲圖形顯示數據的,寫指令執行后Y地址計數器自動加1。D7-D0位數據為1表示顯示,數據為0表示不顯示。寫數據到DD RAM前,要先執行“設置頁地址”及“設置列地址”命令。
7、讀顯示數據
CODE:
R/W
| D/I
| DB7
| DB6
| DB5
| DB4
| DB3
| DB2
| DB1
| DB0
| H
| H
| D7
| D6
| D5
| D4
| D3
| D2
| D1
| D0
| 功能:從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, 下載次數: 101)
下載附件
2016-9-26 18:23 上傳
圖1 仿真硬件原理圖
將編寫的代碼燒寫到單片機里,運行液晶顯示不正常,如圖2所示。
1.005.jpg (28.29 KB, 下載次數: 103)
下載附件
2016-9-26 18:23 上傳
圖2 運行圖
開始我還以為是程序問題,把程序看了又看,改了又改,顯示結果還是一樣。后來問了下張勇生,出現這種情況的原因是P0口沒接上拉電阻。因為P0口是開漏的,不管它的驅動能力多大,相當于它是沒有電源的,需要外部的電路提供,絕大多數情況下P0口是必需加上拉電阻的。接上拉電阻后,重新運行這下運行正常了,如圖3所示。
1.006.jpg (35.53 KB, 下載次數: 112)
下載附件
2016-9-26 18:23 上傳
圖3正常顯示
代碼如下所示:
#include
#define LCDLCDDisp_Off 0x3e
#define LCDLCDDisp_On 0x3f
#define Page_Add 0xb8//頁地址
#define LCDCol_Add 0x40//列地址
#define Start_Line 0xC0//行地址
/*****液晶顯示器的端口定義*****/
#define data_ora P0 /*液晶數據總線*/
sbit LCDMcs=P2^1 ; /*片選1*/
sbit LCDScs=P2^2 ; /*片選2*/
sbit RESET=P2^3 ; /*復位信號*/
sbit LCDDi=P2^4 ; /*數據/指令 選擇*/
sbit LCDRW=P2^5 ; /*讀/寫 選擇*/
sbit LCDEnable=P2^6 ; /*讀/寫 使能*/
char code Hz_xu[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : F:LD測試儀液晶字模提取+排版軟件液晶字模提取圖例wo.bmp
寬×高(像素): 16×
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
數據轉換日期 : 2010-7-28 17:10:17
------------------------------------------------------------------------------*/
0x40,0x42,0xCC,0x00,0x00,0x40,0x30,0x1E,0x10,0xF0,0x10,0x10,0x18,0x10,0x00,0x00,
0x00,0x00,0x3F,0x10,0x08,0x01,0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x01,0x00,0x00
};
char code Hz_ping[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : F:LD測試儀液晶字模提取+排版軟件液晶字模提取圖例ping.bmp萍
寬×高(像素): 16×16
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
數據轉換日期 : 2010-7-29 8:46:30
------------------------------------------------------------------------------*/
0x00,0xC8,0x28,0x58,0x08,0x0C,0xBE,0x28,0x28,0xE8,0x3E,0x28,0xA8,0x2C,0x08,0x00,
0x00,0x08,0x09,0x7E,0x01,0x04,0x04,0x05,0x04,0x7F,0x04,0x05,0x04,0x06,0x04,0x00
};
/****************************************************************************
函數功能:LCD延時程序
入口參數:t
出口參數:
****************************************************************************/
void LCDdelay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++);[ size][="" align]
for(j=0;j<10;j++);
}
/****************************************************************************
狀態檢查,LCD是否忙
*****************************************************************************/
void CheckState()
{
unsigned char dat,DATA;//狀態信息(判斷是否忙)
LCDDi=0; // 數據指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數據
LCDRW=1; //R/W="H" ,E="H"數據被讀到DB7∽DB0
do
{
DATA=0x00;
LCDEnable=1; //EN下降源
LCDdelay(2);//延時
dat=DATA;
LCDEnable=0;
dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
}
while(!(dat==0x00));
}
/*****************************************************************************
函數功能:寫命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來一個脈沖寫一次
入口參數:cmdcode
出口參數:
*****************************************************************************/
void write_com(unsigned char cmdcode)
{
CheckState();//檢測LCD是否忙
LCDDi=0;
LCDRW=0;
P0=cmdcode;
LCDdelay(2);
LCDEnable=1;
LCDdelay(2);
LCDEnable=0;
}
/*****************************************************************************
函數功能:LCD初始化程序
入口參數:
出口參數:
*****************************************************************************/
void init_lcd()
{
LCDdelay(100);
LCDMcs=1;//剛開始關閉兩屏
LCDScs=1;
LCDdelay(100);
write_com(LCDLCDDisp_Off); //寫初始化命令
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(LCDCol_Add+0);
write_com(LCDLCDDisp_On);
}
/*****************************************************************************
函數功能:寫數據到LCD程序,RS(DI)=H,RW=L,EN=H,即來一個脈沖寫一次
入口參數:LCDDispdata
出口參數:
*****************************************************************************/
void write_data(unsigned char LCDDispdata)
{
CheckState();//檢測LCD是否忙
LCDDi=1;
LCDRW=0;
P0=LCDDispdata;
LCDdelay(2);
LCDEnable=1;
LCDdelay(2);
LCDEnable=0;
}
/*****************************************************************************
函數功能:清除LCD內存程序
入口參數:pag,col,hzk
出口參數:
*****************************************************************************/
void Clr_Scr()
{
unsigned char j,k;
LCDMcs=0; //左、右屏均開顯示
LCDScs=0;
write_com(Page_Add+0);
write_com(LCDCol_Add+0);
for(k=0;k<8;k++)//控制頁數0-7,共8頁
{
write_com(Page_Add+k); //每頁每頁進行寫
for(j=0;j<64;j++) //每頁最多可寫32個中文文字或64個ASCII字符
{
write_com(LCDCol_Add+j);
write_data(0x00);//控制列數0-63,共64列,寫點內容,列地址自動加1
}
}
}
/*****************************************************************************
函數功能:指定位置顯示漢字16*16程序
入口參數:page,column,hzk
出口參數:
*****************************************************************************/
void hz_LCDDisp16(unsigned char page,unsigned char column, unsigned char code *hzk)
{
unsigned char j=0,i=0;
for(j=0;j<2;j++)
{
write_com(Page_Add+page+j);
write_com(LCDCol_Add+column);
for(i=0;i<16;i++)
write_data(hzk[16*j+i]);
}
}
void main()
{
init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
hz_LCDDisp16(0,48,Hz_xu);// Hz_Wo為某個漢字的首地址
LCDMcs=1; //右屏開顯示
LCDScs=0;
hz_LCDDisp16(0,0,Hz_ping);
while(1)
{
}
}
3.2圖形顯示我選了一張128x64的圖片在字模軟件中生產相應的C代碼,將C代碼寫入到程序中。
由于液晶由兩個控制芯片來控制,所以有片選信號端口CS1和CS2。我在字體顯示程序中把改了顯示那一塊的代碼,主程序中改了片選信號。開始同時將左右屏都開了,顯示事,左右屏同時顯示一樣的圖形,并且顯示的圖形不完整。主程序中顯示部分的程序不對,我想了后,將主程序中程序改了一下,先開左屏調用左屏顯示函數,在關左屏開右屏調用右屏顯示函數。最后顯示成功。如圖4所示。
1.007.jpg (37.52 KB, 下載次數: 123)
下載附件
2016-9-26 18:23 上傳
圖4 圖形顯示
代碼如下所示:
#include
#define LCDLCDDisp_Off 0x3e
#define LCDLCDDisp_On 0x3f
#define Page_Add 0xb8//ye
#define LCDCol_Add 0x40//lie
#define Start_Line 0xC0//hang
/*****液晶顯示器的端口定義*****/
#define data_ora P0 /*液晶數據總線*/
sbit LCDMcs=P2^1 ; /*片選1*/
sbit LCDScs=P2^2 ; /*片選2*/
sbit RESET=P2^3 ; /*復位信號*/
sbit LCDDi=P2^4 ; /*數據/指令 選擇*/
sbit LCDRW=P2^5 ; /*讀/寫 選擇*/
sbit LCDEnable=P2^6 ; /*讀/寫 使能*/
char code Hz[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : F:LD測試儀液晶字模提取+排版軟件液晶字模提取圖例yema.bmp萍
寬×高(像素): 128×64
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/1024字節
數據轉換日期 : 2010-7-29 9:09:37
------------------------------------------------------------------------------*/
0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x90,0xD0,0x78,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,
0xE0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x06,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0xCF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xDD,0x9F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x78,0xF8,0xF0,0xE0,0xC0,0xC0,0x80,
0xC0,0xE0,0xE0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0x3B,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFC,0x9C,0x3C,0x3D,0x3F,0x7F,0xFD,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xE1,0xC3,0x87,
0x05,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFE,0xE3,0xF1,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x1F,0x1F,0x78,0xF0,0x00,0x00,0x00,0x01,
0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFE,0xFE,0xFC,0xF8,0xF0,0xE0,0x80,0x80,0x80,0xC0,0xE0,0xFF,0xDF,0x7F,0x1F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x7F,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x1F,0x07,0xBF,0xFF,0x3F,0x1F,0x05,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x0E,0x0E,0x0E,0x1F,0x1F,0x07,0x9F,0xFF,
0xFF,0x7B,0x61,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x18,0x1C,0x1E,0x07,0x03,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/****************************************************************************
函數功能:LCD延時程序
入口參數:t
出口參數:
****************************************************************************/
void LCDdelay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++);[ size][="" align]
for(j=0;j<10;j++);
}
/****************************************************************************
狀態檢查,LCD是否忙
*****************************************************************************/
void CheckState()
{
unsigned char dat,DATA;//狀態信息(判斷是否忙)
LCDDi=0; // 數據指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數據
LCDRW=1; //R/W="H" ,E="H"數據被讀到DB7∽DB0
do
{
DATA=0x00;
LCDEnable=1; //EN下降源
LCDdelay(2);//延時
dat=DATA;
LCDEnable=0;
dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
}
while(!(dat==0x00));
}
/*****************************************************************************
函數功能:寫命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來一個脈沖寫一次
入口參數:cmdcode
出口參數:
*****************************************************************************/
void write_com(unsigned char cmdcode)
{
CheckState();//檢測LCD是否忙
LCDDi=0;
LCDRW=0;
P0=cmdcode;
LCDdelay(2);
LCDEnable=1;
LCDdelay(2);
LCDEnable=0;
}
/*****************************************************************************
函數功能:LCD初始化程序
入口參數:
出口參數:
*****************************************************************************/
void init_lcd()
{
LCDdelay(100);
LCDMcs=1;//剛開始關閉兩屏
LCDScs=1;
LCDdelay(100);
write_com(LCDLCDDisp_Off); //寫初始化命令
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(LCDCol_Add+0);
write_com(LCDLCDDisp_On);
}
/*****************************************************************************
函數功能:寫數據到LCD程序,RS(DI)=H,RW=L,EN=H,即來一個脈沖寫一次
入口參數:LCDDispdata
出口參數:
*****************************************************************************/
void write_data(unsigned char LCDDispdata)
{
CheckState();//檢測LCD是否忙
LCDDi=1;
LCDRW=0;
P0=LCDDispdata;
LCDdelay(2);
LCDEnable=1;
LCDdelay(2);
LCDEnable=0;
}
/*****************************************************************************
函數功能:清除LCD內存程序
入口參數:pag,col,hzk
出口參數:
*****************************************************************************/
void Clr_Scr()
{
unsigned char j,k;
LCDMcs=0; //左、右屏均開顯示
LCDScs=0;
write_com(Page_Add+0);
write_com(LCDCol_Add+0);
for(k=0;k<8;k++)//控制頁數0-7,共8頁
{
write_com(Page_Add+k); //每頁每頁進行寫
for(j=0;j<64;j++) //每頁最多可寫32個中文文字或64個ASCII字符
{
write_com(LCDCol_Add+j);
write_data(0x00);//控制列數0-63,共64列,寫點內容,列地址自動加1
}
}
}
void main()
{
init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Hz);
LCDMcs=1; //右屏開顯示
LCDScs=0;
Bmp_Right_Disp(0,0,Hz);
while(1)
{
}
}
3.3同時顯示多個漢字 用字模軟件取模后通過改寫軟件,仿真圖形如圖5所示。
1.008.jpg (37.88 KB, 下載次數: 108)
下載附件
2016-9-26 18:23 上傳
圖5 顯示多個漢字的仿真圖
代碼如下所示:
#include
#define LCDLCDDisp_Off 0x3e
#define LCDLCDDisp_On 0x3f
#define Page_Add 0xb8//頁地址
#define LCDCol_Add 0x40//列地址
#define Start_Line 0xC0//行地址
/*****液晶顯示器的端口定義*****/
#define data_ora P0 /*液晶數據總線*/
sbit LCDMcs=P2^1 ; /*片選1*/
sbit LCDScs=P2^2 ; /*片選2*/
sbit RESET=P2^3 ; /*復位信號*/
sbit LCDDi=P2^4 ; /*數據/指令 選擇*/
sbit LCDRW=P2^5 ; /*讀/寫 選擇*/
sbit LCDEnable=P2^6 ; /*讀/寫 使能*/
unsigned char code Bmp1[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : 來自剪貼板!武漢理工大學
寬×高(像素): 128×16
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/256字節
數據轉換日期 : 2010-7-29 17:52:57
顯示的漢字:武漢理工大學
------------------------------------------------------------------------------*/
0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x20,0x20,0x24,0x24,0x24,0xE4,0x24,0x20,0x20,0xFE,0x20,0x24,0x28,0x20,
0x00,0x20,0xC2,0x0C,0x80,0x60,0x04,0x7C,0x84,0x04,0x04,0xC4,0x3E,0x04,0x00,0x00,
0x88,0x88,0xF8,0x88,0x88,0x00,0xFC,0x24,0x24,0xFC,0x24,0x24,0xFE,0x04,0x00,0x00,
0x08,0x08,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x20,0x20,
0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x40,0x30,0x10,
0x52,0x5C,0x50,0x52,0x5C,0x50,0xD8,0x56,0x10,0x50,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x20,0x60,0x3F,0x20,0x20,0x1F,0x12,0x12,0x10,0x07,0x18,0x20,0x40,0x78,
0x00,0x04,0x04,0x7E,0x41,0x40,0x20,0x10,0x0B,0x04,0x0B,0x10,0x20,0x60,0x20,0x00,
0x10,0x30,0x1F,0x08,0x48,0x40,0x4B,0x49,0x49,0x7F,0x49,0x49,0x6B,0x40,0x08,0x20,
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x40,0x40,
0x20,0x10,0x08,0x06,0x01,0x02,0x04,0x08,0x10,0x20,0x60,0x20,0x00,0x04,0x04,0x04,
0x04,0x04,0x24,0x44,0x3F,0x05,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char code Bmp2[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : 信息工程學院
寬×高(像素): 128×16
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/256字節
數據轉換日期 : 2010-7-29 18:34:04
顯示的漢字:信息工程學院
------------------------------------------------------------------------------*/
0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x40,0xF0,0x0E,0x00,0x28,0x28,0x28,0x2A,0x2C,0x28,0x28,0x28,0x08,0x00,
0x00,0x00,0x00,0xF8,0xA8,0xAC,0xAA,0xA8,0xA8,0xA8,0xFC,0x08,0x00,0x00,0x00,0x00,
0x08,0x08,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x20,0x24,
0xA4,0xFC,0x26,0x24,0x00,0x7C,0x24,0x24,0x24,0x24,0x7C,0x00,0x00,0x40,0x30,0x10,
0x52,0x5C,0x50,0x52,0x5C,0x50,0xD8,0x56,0x10,0x50,0x30,0x00,0x00,0xFC,0x04,0x64,
0x9C,0x20,0x58,0x48,0x4A,0x4C,0x48,0x48,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x7D,0x25,0x25,0x25,0x25,0x7D,0x01,0x00,0x00,
0x00,0x20,0x18,0x03,0x3A,0x42,0x46,0x5A,0x42,0x42,0x73,0x00,0x08,0x30,0x00,0x20,
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x08,0x06,
0x01,0x7F,0x01,0x42,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00,0x04,0x04,0x04,
0x04,0x04,0x24,0x44,0x3F,0x05,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x7F,0x04,0x08,
0x47,0x41,0x21,0x1F,0x01,0x01,0x3F,0x41,0x41,0x79,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char code Bmp3[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : 通信工程
寬×高(像素): 128×
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/256字節
數據轉換日期 : 2010-7-29 18:36:04
顯示漢字:通信工程
------------------------------------------------------------------------------*/
0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x42,
0xCC,0x00,0x00,0xF4,0x54,0x5C,0xF4,0x5C,0x56,0xF4,0x00,0x00,0x00,0x80,0x40,0xF0,
0x0E,0x00,0x28,0x28,0x28,0x2A,0x2C,0x28,0x28,0x28,0x08,0x00,0x00,0x08,0x08,0x08,
0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x20,0x24,0xA4,0xFC,0x26,
0x24,0x00,0x7C,0x24,0x24,0x24,0x24,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,
0x0F,0x10,0x20,0x5F,0x42,0x42,0x5F,0x42,0x52,0x5F,0x40,0x40,0x00,0x00,0x00,0x7F,
0x00,0x00,0x01,0x7D,0x25,0x25,0x25,0x25,0x7D,0x01,0x00,0x00,0x20,0x20,0x20,0x20,
0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x08,0x06,0x01,0x7F,0x01,
0x42,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char code Bmp4[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : 0606班
寬×高(像素): 128×16
字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/256字節
數據轉換日期 : 2010-7-29 18:37:59
顯示的漢字:0606班
------------------------------------------------------------------------------*/
0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0x10,0x20,0xC0,0x00,0x00,0xC0,
0x20,0x10,0x10,0x30,0x00,0x00,0x00,0xC0,0x20,0x10,0x10,0x20,0xC0,0x00,0x00,0xC0,
0x20,0x10,0x10,0x30,0x00,0x00,0x44,0x44,0xFC,0x44,0x04,0xC0,0x00,0xFE,0x84,0x84,
0xFC,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x1F,
0x22,0x21,0x21,0x21,0x1E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x1F,
0x22,0x21,0x21,0x21,0x1E,0x00,0x10,0x10,0x0F,0x48,0x28,0x11,0x08,0x27,0x20,0x20,
0x3F,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/****************************************************************************
函數功能:LCD延時程序
入口參數:t
出口參數:
****************************************************************************/
void LCDdelay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++);[ size][="" align]
for(j=0;j<10;j++);
}
/****************************************************************************
狀態檢查,LCD是否忙
*****************************************************************************/
void CheckState()
{
unsigned char dat,DATA;//狀態信息(判斷是否忙)
LCDDi=0; // 數據指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數據
LCDRW=1; //R/W="H" ,E="H"數據被讀到DB7∽DB0
do
{
DATA=0x00;
LCDEnable=1; //EN下降源
LCDdelay(2);//延時
dat=DATA;
LCDEnable=0;
dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
}
while(!(dat==0x00));
}
/*****************************************************************************
函數功能:寫命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來一個脈沖寫一次
入口參數:cmdcode
出口參數:
*****************************************************************************/
void write_com(unsigned char cmdcode)
{
CheckState();//檢測LCD是否忙
LCDDi=0;
LCDRW=0;
P0=cmdcode;
LCDdelay(2);
LCDEnable=1;
LCDdelay(2);
LCDEnable=0;
}
/*****************************************************************************
函數功能:LCD初始化程序
入口參數:
出口參數:
*****************************************************************************/
void init_lcd()
{
LCDdelay(100);
LCDMcs=1;//剛開始關閉兩屏
LCDScs=1;
LCDdelay(100);
write_com(LCDLCDDisp_Off); //寫初始化命令
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(LCDCol_Add+0);
write_com(LCDLCDDisp_On);
}
/*****************************************************************************
函數功能:寫數據到LCD程序,RS(DI)=H,RW=L,EN=H,即來一個脈沖寫一次
入口參數:LCDDispdata
出口參數:
*****************************************************************************/
void write_data(unsigned char LCDDispdata)
{
CheckState();//檢測LCD是否忙
LCDDi=1;
LCDRW=0;
P0=LCDDispdata;
LCDdelay(2);
LCDEnable=1;
LCDdelay(2);
LCDEnable=0;
}
/*****************************************************************************
函數功能:清除LCD內存程序
入口參數:pag,col,hzk
出口參數:
*****************************************************************************/
void Clr_Scr()
{
unsigned char j,k;
LCDMcs=0; //左、右屏均開顯示
LCDScs=0;
write_com(Page_Add+0);
write_com(LCDCol_Add+0);
for(k=0;k<8;k++)//控制頁數0-7,共8頁
{
write_com(Page_Add+k); //每頁每頁進行寫
for(j=0;j<64;j++) //每頁最多可寫32個中文文字或64個ASCII字符
{
write_com(LCDCol_Add+j);
write_data(0x00);//控制列數0-63,共64列,寫點內容,列地址自動加1
}
}
}
/*****************************************************************************
函數功能:左屏位置顯示
入口參數:page,column,hzk
出口參數:
*****************************************************************************/
void Bmp_Left_Disp(unsigned char page,unsigned char column, unsigned char code *Bmp)
{
unsigned char j=0,i=0;
for(j=0;j<2;j++)
{
write_com(Page_Add+page+j);
write_com(LCDCol_Add+column);
for(i=0;i<64;i++)
write_data(Bmp[128*j+i]);
}
}
/*****************************************************************************
函數功能:右屏位置顯示
入口參數:page,column,hzk
出口參數:
*****************************************************************************/
void Bmp_Right_Disp(unsigned char page,unsigned char column, unsigned char code *Bmp)
{
unsigned char j=0,i=0;
for(j=0;j<2;j++)
{
write_com(Page_Add+page+j);
write_com(LCDCol_Add+column);
for(i=64;i<128;i++)
write_data(Bmp[128*j+i]);
}
}
void main()
{
init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Bmp1);// Bmp1為某個漢字的首地址
Bmp_Left_Disp(2,0,Bmp2);
Bmp_Left_Disp(4,0,Bmp3);
Bmp_Left_Disp(6,0,Bmp4);
LCDMcs=1; //右屏開顯示
LCDScs=0;
Bmp_Right_Disp(0,0,Bmp1);
Bmp_Right_Disp(2,0,Bmp2);
Bmp_Right_Disp(4,0,Bmp3);
Bmp_Right_Disp(6,0,Bmp4);
while(1)
{
}
}
3.4向上滾動顯示仿真圖形如圖6所示。
1.009.jpg (20.89 KB, 下載次數: 113)
下載附件
2016-9-26 18:23 上傳
1.010.jpg (21.3 KB, 下載次數: 102)
下載附件
2016-9-26 18:23 上傳
(a)第一次全部顯示 (b)開始滾動顯示
1.011.jpg (21.47 KB, 下載次數: 104)
下載附件
2016-9-26 18:23 上傳
1.012.jpg (21.88 KB, 下載次數: 106)
下載附件
2016-9-26 18:23 上傳
(c) (d)
程序如下所示:
- #include
- #define uchar unsigned char
- #define uint unsigned int
- #define LCDLCDDisp_Off 0x3e
- #define LCDLCDDisp_On 0x3f
- #define Page_Add 0xb8//ye
- #define LCDCol_Add 0x40//lie
- #define Start_Line 0xC0//hang
- /*****液晶顯示器的端口定義*****/
- #define data_ora P0 /*液晶數據總線*/
- sbit LCDMcs=P2^1 ; /*片選1*/
- sbit LCDScs=P2^2 ; /*片選2*/
- sbit RESET=P2^3 ; /*復位信號*/
- sbit LCDDi=P2^4 ; /*數據/指令 選擇*/
- sbit LCDRW=P2^5 ; /*讀/寫 選擇*/
- sbit LCDEnable=P2^6 ; /*讀/寫 使能*/
-
- uchar *tab;
- uint k=0;
- uchar code hz1[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 武
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:50:18
- ------------------------------------------------------------------------------*/
- 0x10,0x50,0x34,0x14,0x1C,0xD4,0x16,0x14,0x10,0x7F,0x90,0x12,0x14,0x10,0x10,0x00,
- 0x40,0x40,0x7F,0x20,0x20,0x1F,0x11,0x11,0x01,0x00,0x07,0x18,0x20,0x40,0xF0,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 漢
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:51:45
- ------------------------------------------------------------------------------*/
- 0x10,0x60,0x21,0x96,0x68,0x04,0x1E,0xE4,0x04,0x04,0x04,0xE4,0x1C,0x04,0x00,0x00,
- 0x04,0x04,0x7E,0x01,0x40,0x20,0x20,0x10,0x0B,0x04,0x0B,0x10,0x30,0x60,0x20,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 理
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:52:29
- ------------------------------------------------------------------------------*/
- 0x44,0x44,0xFC,0x54,0x4C,0x04,0xFE,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,
- 0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 工
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:53:19
- ------------------------------------------------------------------------------*/
- 0x00,0x40,0x22,0x12,0x0A,0x06,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 大
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:53:53
- ------------------------------------------------------------------------------*/
- 0x20,0x60,0x20,0x30,0x28,0x24,0xA2,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 學
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:54:23
- ------------------------------------------------------------------------------*/
- 0x40,0x70,0x30,0x12,0x5C,0x54,0x52,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
- 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- uchar code hz2[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 信
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:56:07
- ------------------------------------------------------------------------------*/
- 0x80,0x40,0x30,0xFC,0x0F,0x0E,0xAA,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,
- 0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 息
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:56:47
- ------------------------------------------------------------------------------*/
- 0x00,0x40,0x20,0xFC,0x5C,0x54,0x56,0x55,0x54,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,
- 0x00,0x20,0x38,0x01,0x3D,0x41,0x41,0x45,0x59,0x41,0x41,0x71,0x00,0x08,0x30,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 工
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:57:52
- ------------------------------------------------------------------------------*/
- 0x00,0x40,0x22,0x12,0x0A,0x06,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 程
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:58:28
- ------------------------------------------------------------------------------*/
- 0x10,0x52,0xF2,0xFE,0x99,0x15,0x82,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
- 0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 學
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:59:06
- ------------------------------------------------------------------------------*/
- 0x40,0x70,0x30,0x12,0x5C,0x54,0x52,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
- 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 院
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:59:51
- ------------------------------------------------------------------------------*/
- 0xFE,0x42,0x32,0x5A,0x8E,0x0C,0x26,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
- 0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- uchar code hz3[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 通
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 16:02:05
- ------------------------------------------------------------------------------*/
- 0x40,0x41,0xE6,0x10,0x08,0xF6,0x52,0x52,0x56,0xFA,0x5A,0x56,0xF2,0x00,0x00,0x00,
- 0x40,0x20,0x1F,0x20,0x40,0x5F,0x42,0x42,0x42,0x5F,0x4A,0x52,0x4F,0x40,0x40,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 信
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 16:02:40
- ------------------------------------------------------------------------------*/
- 0x80,0x40,0x30,0xFC,0x0F,0x0E,0xAA,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,
- 0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 工
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:57:52
- ------------------------------------------------------------------------------*/
- 0x00,0x40,0x22,0x12,0x0A,0x06,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 程
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 15:58:28
- ------------------------------------------------------------------------------*/
- 0x10,0x52,0xF2,0xFE,0x99,0x15,0x82,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
- 0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,
-
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- uchar code hz4[]=
- {
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 許
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 16:05:36
- ------------------------------------------------------------------------------*/
- 0x40,0x41,0x6E,0xD4,0x08,0x44,0x32,0x0F,0x08,0x08,0xF8,0x08,0x08,0x08,0x00,0x00,
- 0x00,0x00,0x00,0x7F,0x20,0x11,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x00,
- /*------------------------------------------------------------------------------
- 源文件 / 文字 : 萍
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
- 數據轉換日期 : 2010-7-31 16:06:07
- ------------------------------------------------------------------------------*/
- 0x84,0x54,0x64,0x34,0x0C,0xAF,0x26,0x24,0x24,0xFF,0x24,0x24,0xE4,0xA4,0x04,0x00,
- 0x10,0x13,0xF9,0x06,0x00,0x08,0x09,0x0A,0x08,0xFF,0x08,0x0A,0x09,0x08,0x08,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-
- };
- /****************************************************************************
- 函數功能:LCD延時程序
- 入口參數:t
- 出口參數:
- ****************************************************************************/
- void LCDdelay(uchar x)
- {
-
-
- int d;
- uchar y;
- for(y=0;y<x;y++)
- for(d=0;d<10;d++);
- }
- /****************************************************************************
- 狀態檢查,LCD是否忙
-
-
- *****************************************************************************/
- void CheckState()
- {
- uchar dat,DATA;//狀態信息(判斷是否忙)
- LCDDi=0; // 數據指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數據
- LCDRW=1; //R/W="H" ,E="H"數據被讀到DB7∽DB0
- do
- {
- DATA=0x00;
- LCDEnable=1; //EN下降源
- LCDdelay(1);//延時
- dat=DATA;
- LCDEnable=0;
- dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
- }
- while(!(dat==0x00));
- }
- /*****************************************************************************
- 函數功能:寫命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來一個脈沖寫一次
- 入口參數:cmdcode
- 出口參數:
- *****************************************************************************/
- void write_com(uchar cmdcode)
- {
- CheckState();//檢測LCD是否忙
- LCDDi=0;
- LCDRW=0;
- P0=cmdcode;
- LCDdelay(1);
- LCDEnable=1;
- LCDdelay(1);
- LCDEnable=0;
- }
-
- /*****************************************************************************
- 函數功能:寫數據到LCD程序,RS(DI)=H,RW=L,EN=H,即來一個脈沖寫一次
- 入口參數:LCDDispdata
- 出口參數:
- *****************************************************************************/
- void write_data(uchar LCDDispdata)
- {
- CheckState();//檢測LCD是否忙
- LCDDi=1;
- LCDRW=0;
- P0=LCDDispdata;
- LCDdelay(1);
- LCDEnable=1;
- LCDdelay(1);
- LCDEnable=0;
- }
- /*****************************************************************************
- /*****************************************************************************
- 函數功能:LCD初始化程序
- 入口參數:
- 出口參數:
- *****************************************************************************/
- void init_lcd()
- {
- LCDdelay(1);
- LCDMcs=1;//剛開始關閉兩屏
- LCDScs=1;
- LCDdelay(1);
- write_com(LCDLCDDisp_Off); //寫初始化命令
- write_com(Page_Add+0);
- write_com(Start_Line+0);
- write_com(LCDCol_Add+0);
- write_com(LCDLCDDisp_On);
- }
- /**************************************************************************
- 函數功能:清除LCD內存程序
- 入口參數:pag,col,hzk
- 出口參數:
- *****************************************************************************/
- void Clr_Scr()
- {
- uchar j,k;
- LCDMcs=0; //左、右屏均開顯示
- LCDScs=0;
- write_com(Page_Add+0);
- write_com(LCDCol_Add+0);
- for(k=0;k<8;k++)//控制頁數0-7,共8頁
- {
- write_com(Page_Add+k); //每頁每頁進行寫
- for(j=0;j<64;j++) //每頁最多可寫32個中文文字或64個ASCII字符
- {
- write_com(LCDCol_Add+j);
- write_data(0x00);//控制列數0-63,共64列,寫點內容,列地址自動加1
- }
- }
- }
- /*****************************************************************************
- 函數功能:一行一行顯示
- 入口參數:page,column,hzk
- 出口參數:
- *****************************************************************************/
- Disp(uchar page,uchar column, uchar code *word)
- {
- uchar i;
- LCDMcs=0;
- LCDScs=1;
- write_com(0xb8|page);
- write_com(0x40|column);
- for(i=0;i<16;i++)
- write_data(word[i]);
- for(i=32;i<48;i++)
- write_data(word[i]);
- for(i=64;i<80;i++)
- write_data(word[i]);
- for(i=96;i<112;i++)
- write_data(word[i]);
-
- LCDMcs=1;
- LCDScs=0;
- write_com(0xb8|page);
- write_com(0x40);
- for(i=128;i<144;i++)
- write_data(word[i]);
- for(i=160;i<176;i++)
- write_data(word[i]);
- for(i=192;i<208;i++)
- write_data(word[i]);
- for(i=224;i<240;i++)
- write_data(word[i]);
-
- LCDMcs=0;
- LCDScs=1;
- write_com(0xb8|page+1);
- write_com(0x40|column);
- for(i=16;i<32;i++)
- write_data(word[i]);
- for(i=48;i<64;i++)
- write_data(word[i]);
- for(i=80;i<96;i++)
- write_data(word[i]);
- for(i=112;i<128;i++)
- write_data(word[i]);
-
-
- LCDMcs=1;
- LCDScs=0;
- write_com(0xb8|page+1);
- write_com(0x40);
- for(i=144;i<160;i++)
- write_data(word[i]);
- for(i=176;i<192;i++)
- write_data(word[i]);
- for(i=208;i<224;i++)
- write_data(word[i]);
- for(i=240;i<250;i++)
- write_data(word[i]);
- }
-
- void main()
- {
- init_lcd();
- Clr_Scr();
- k=0;
- for(k=0xc0;k<0xff;k++)
- {
- Disp(0,0,hz1);
- Disp(2,0,hz2);
- Disp(4,0,hz3);
- Disp(6,0,hz4);
- LCDMcs=0;
- LCDScs=0;
- write_com(k);
- LCDdelay(2);
-
- }
- while(1)
- {
-
- }
- }
復制代碼
4小結 剛開始學液晶時感覺好難,字模就困擾了我好多天。通過看資料查資料,以及看程序搞懂了,通過寫程序仿真,對液晶的控制更明白,主要寫的是并行數據傳輸的代碼。寫了一個漢字的顯示,多個漢字顯示程序,圖形顯示的程序,還有漢字動態顯示。由于取字模軟件運行有點問題,左上角上自動多出一撇,所以顯示字或圖形的左上角多出一撇。后面寫一個漢字一個漢字顯示程序并仿真,還有波形顯示程序和仿真。
|
|