找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6958|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Protues仿真12864液晶顯示課程設(shè)計(jì)報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
word格式的完整文檔下載:
Protues12864液晶顯示.zip (323.18 KB, 下載次數(shù): 105)

Protues仿真液晶顯示

目錄

1  LCD12864簡(jiǎn)介

2 LCD12864顯示原理

2.1漢字和英文顯示原理

2.2圖形顯示

2.3應(yīng)用說(shuō)明

2.4指令描述

3軟件仿真

3.1漢字顯示

3.2圖形顯示

3.3同時(shí)顯示多個(gè)漢字

3.4向上滾動(dòng)顯示

4小結(jié)


1            LCD12864簡(jiǎn)介
  • ST7920類 這種控制器帶中文字庫(kù),為用戶免除了編制字庫(kù)的麻煩,該控制器的液晶還支持畫(huà)圖方式。該類液晶支持68時(shí)序8位和4位并口以及串口。

    (2)KS0108類 這種控制器指令簡(jiǎn)單,不帶字庫(kù)。支持68時(shí)序8位并口。

    (3)T6963C類 這種控制器功能強(qiáng)大,帶西文字庫(kù)。有文本和圖形兩種顯示方式。有文本和圖形兩個(gè)圖層,并且支持兩個(gè)圖層的疊加顯示。支持80時(shí)序8位并口。

    (4)COG類 常見(jiàn)的控制器有S6B0724和ST7565,這兩個(gè)控制器指令兼容。支持68時(shí)序8位并口,80時(shí)序8位并口和串口。COG類液晶的特點(diǎn)是結(jié)構(gòu)輕便,成本低。

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是一種圖形點(diǎn)陣液晶顯示器,它主要由行驅(qū)動(dòng)器/列驅(qū)動(dòng)器及128×64全點(diǎn)陣液晶顯示器組成?赏瓿蓤D形顯示,也可以顯示8×4個(gè)(16×16點(diǎn)陣)漢字。

管腳名稱
LEVER
管腳功能描述
VSS
0
電源地
VDD
+5.0V
電源電壓
V0
-
液晶顯示器驅(qū)動(dòng)電壓
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ù)被寫(xiě)到IR或DR
E
H/L
R/W=“L”,E信號(hào)下降沿鎖存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:選擇芯片(右半屏)信號(hào)
CS2
H/L
H:選擇芯片(左半屏)信號(hào)
RET
H/L
復(fù)位信號(hào),低電平復(fù)位
VOUT
-10V
LCD驅(qū)動(dòng)負(fù)電壓
LED+
-
LED背光板電源
LED-
-
LED背光板電源
    在使用12864LCD前先必須了解以下功能器件才能進(jìn)行編程。12864內(nèi)部功能器件及相關(guān)功能如下:

1. 指令寄存器(IR)

    IR是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對(duì)應(yīng)。當(dāng)D/I=0時(shí),在E信號(hào)下降沿的作用下,指令碼寫(xiě)入IR。

2.?dāng)?shù)據(jù)寄存器(DR)

    DR是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對(duì)應(yīng)。當(dāng)D/I=1時(shí),在下降沿作用下,圖形顯示數(shù)據(jù)寫(xiě)入DR,或在E信號(hào)高電平作用下由DR讀到DB7∽DB0數(shù)據(jù)總線。DR和DDRAM之間的數(shù)據(jù)傳輸是模塊內(nèi)部自動(dòng)執(zhí)行的。

3.忙標(biāo)志:BF

    BF標(biāo)志提供內(nèi)部工作情況。BF=1表示模塊在內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù)。BF=0時(shí),模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù)。

    利用STATUS READ指令,可以將BF讀到DB7總線,從檢驗(yàn)?zāi)K之工作狀態(tài)。

4.顯示控制觸發(fā)器DFF

    此觸發(fā)器是用于模塊屏幕顯示開(kāi)和關(guān)的控制。DFF=1為開(kāi)顯示(DISPLAY OFF),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAY OFF)。

    DDF的狀態(tài)是指令DISPLAY ON/OFF和RST信號(hào)控制的。

5XY地址計(jì)數(shù)器

      XY地址計(jì)數(shù)器是一個(gè)9位計(jì)數(shù)器。高3位是X地址計(jì)數(shù)器,低6位為Y地址計(jì)數(shù)器,XY地址計(jì)數(shù)器實(shí)際上是作為DDRAM的地址指針,X地址計(jì)數(shù)器為DDRAM的頁(yè)指針,   Y地址計(jì)數(shù)器為DDRAM的Y地址指針。

      X地址計(jì)數(shù)器是沒(méi)有記數(shù)功能的,只能用指令設(shè)置。

      Y地址計(jì)數(shù)器具有循環(huán)記數(shù)功能,各顯示數(shù)據(jù)寫(xiě)入后,Y地址自動(dòng)加1,Y地址指針從0到63。

6.顯示數(shù)據(jù)RAMDDRAM

    DDRAM是存儲(chǔ)圖形顯示數(shù)據(jù)的。數(shù)據(jù)為1表示顯示選擇,數(shù)據(jù)為0表示顯示非選擇。DDRAM與地址和顯示位置的關(guān)系見(jiàn)DDRAM地址表。

7Z地址計(jì)數(shù)器

    Z地址計(jì)數(shù)器是一個(gè)6位計(jì)數(shù)器,此計(jì)數(shù)器具備循環(huán)記數(shù)功能,它是用于顯示行掃描同步。當(dāng)一行掃描完成,此地址計(jì)數(shù)器自動(dòng)加1,指向下一行掃描數(shù)據(jù),RST復(fù)位后Z地址計(jì)數(shù)器為0。

    Z地址計(jì)數(shù)器可以用指令DISPLAY START LINE預(yù)置。因此,顯示屏幕的起始行就由此指令控制,即DDRAM的數(shù)據(jù)從哪一行開(kāi)始顯示在屏幕的第一行。此模塊的DDRAM共64行,屏幕可以循環(huán)滾動(dòng)顯示64行。

12864LCD的指令系統(tǒng)

模塊控制芯片提供兩套控制命令,基本指令和擴(kuò)充指令如下:

指令表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",并且設(shè)定DDRAM的地址計(jì)數(shù)器(AC)到"00H"
地址
歸位
0
0
0
0
0
0
0
0
1
X
設(shè)定DDRAM的地址計(jì)數(shù)器(AC)到"00H",并且將游標(biāo)移到開(kāi)頭原點(diǎn)位置;這個(gè)指令不改變DDRAM 的內(nèi)容
顯示狀態(tài)開(kā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ù)的讀取與寫(xiě)入時(shí),設(shè)定游標(biāo)的移動(dòng)方向及指定顯示的移位
游標(biāo)或顯示移位控制
0
0
0
0
0
1
S/C
R/L
X
X
設(shè)定游標(biāo)的移動(dòng)與顯示的移位控制位;這個(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)部動(dòng)作是否完成,同時(shí)可以讀出地址計(jì)數(shù)器(AC)的值
寫(xiě)數(shù)據(jù)到RAM
1
0
數(shù)據(jù)
將數(shù)據(jù)D7——D0寫(xiě)入到內(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í)行其他指令都棵終止
待命模式
卷動(dòng)地址開(kāi)關(guān)開(kāi)啟
0
0
0
0
0
0
0
0
1
SR
SR=1:允許輸入垂直卷動(dòng)地址
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:繪圖開(kāi)關(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ù)寫(xiě)入即可
備注:當(dāng)IC1在接受指令前,微處理器必須先確認(rèn)其內(nèi)部處于非忙碌狀態(tài),即讀取BF標(biāo)志時(shí),BF需為零,方可接受新的指令;如果在送出一個(gè)指令前并不檢查BF標(biāo)志,那么在前一個(gè)指令和這個(gè)指令中間必須延長(zhǎng)一段較長(zhǎng)的時(shí)間,即是等待前一個(gè)指令確實(shí)執(zhí)行完成。

2、字符顯示

帶中文字庫(kù)的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碼字符的顯示。帶中文字庫(kù)的128X64-0402B內(nèi)部提供128×2字節(jié)的字符顯示RAM緩沖區(qū)(DDRAM)。字符顯示是通過(guò)將字符顯示編碼寫(xiě)入該字符顯示RAM實(shí)現(xiàn)的。根據(jù)寫(xiě)入內(nèi)容的不同,可分別在液晶屏上顯示CGROM(中文字庫(kù))、HCGROM(ASCII碼字庫(kù))及CGRAM(自定義字形)的內(nèi)容。三種不同字符/字型的選擇編碼范圍為:0000~0006H(其代碼分別是0000、0002、0004、0006共4個(gè))顯示自定義字型,02H~7FH顯示半寬ASCII碼字符,A1A0H~F7FFH顯示8192種GB2312中文字庫(kù)字形。字符顯示RAM在液晶模塊中的地址80H~9FH。字符顯示的RAM的地址與32個(gè)字符顯示區(qū)域有著一一對(duì)應(yīng)的關(guān)系,其對(duì)應(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
2 LCD12864顯示原理2.1漢字和英文顯示原理
    在數(shù)字電路中,所有的數(shù)據(jù)都是以0和1保存的,對(duì)LCD控制器進(jìn)行不同的數(shù)據(jù)操作,可以得到不同的結(jié)果。對(duì)于顯示英文操作,由于英文字母種類很少,只需要8位(一字節(jié))即可。而對(duì)于中文,常用卻有6000以上,于是我們的DOS前輩想了一個(gè)辦法,就是將ASCII表的高128個(gè)很少用到的數(shù)值以兩個(gè)為一組來(lái)表示漢字,即漢字的內(nèi)碼。而剩下的低128位則留給英文字符使用,即英文的內(nèi)碼。

      那么,得到了漢字的內(nèi)碼后,還僅是一組數(shù)字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數(shù)字,但它的意義卻與數(shù)字的意義有了根本的變化,它是用數(shù)字的各位信息來(lái)記載英文或漢字的形狀,如英文的'A'在字模的記載方式如圖1所示:


圖1 “A”字模圖

    而中文的“你”在字模中的記載卻如圖2所示:


圖2 “你”字模圖

根據(jù)芯片的不同取模的方式不同,有多種取模方式:?jiǎn)紊c(diǎn)陣液晶字模,橫向取模,字節(jié)正序,單色點(diǎn)陣液晶字模,橫向取模,字節(jié)倒序,單色點(diǎn)陣液晶字模,縱向取模,字節(jié)正序,單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序等等。

2.2圖形顯示
先設(shè)垂直地址再設(shè)水平地址(連續(xù)寫(xiě)入兩個(gè)字節(jié)的資料來(lái)完成垂直與水平的坐標(biāo)地址)

垂直地址范圍 AC5...AC0

水平地址范圍 AC3…AC0

繪圖RAM 的地址計(jì)數(shù)器(AC)只會(huì)對(duì)水平地址(X 軸)自動(dòng)加一,當(dāng)水平地址=0FH 時(shí)會(huì)重新設(shè)為00H

但并不會(huì)對(duì)垂直地址做進(jìn)位自動(dòng)加一,故當(dāng)連續(xù)寫(xiě)入多筆資料時(shí),程序需自行判斷垂直地址是否需重新設(shè)定。GDRAM的坐標(biāo)地址與資料排列順序如下圖:


2.3應(yīng)用說(shuō)明
     用帶中文字庫(kù)的128X64顯示模塊時(shí)應(yīng)注意以下幾點(diǎn):

     ①欲在某一個(gè)位置顯示中文字符時(shí),應(yīng)先設(shè)定顯示字符位置,即先設(shè)定顯示地址,再寫(xiě)入中文字符編碼。

     ②顯示ASCII字符過(guò)程與顯示中文字符過(guò)程相同。不過(guò)在顯示連續(xù)字符時(shí),只須設(shè)定一次顯示地址,由模塊自動(dòng)對(duì)地址加1指向下一個(gè)字符位置,否則,顯示的字符中將會(huì)有一個(gè)空ASCII字符位置。

     ③當(dāng)字符編碼為2字節(jié)時(shí),應(yīng)先寫(xiě)入高位字節(jié),再寫(xiě)入低位字節(jié)。

         ④模塊在接收指令前,向處理器必須先確認(rèn)模塊內(nèi)部處于非忙狀態(tài),即讀取BF標(biāo)志時(shí)BF需為“0”,方可接受新的指令。如果在送出一個(gè)指令前不檢查BF標(biāo)志,則在前一個(gè)指令和這個(gè)指令中間必須延遲一段較長(zhǎng)的時(shí)間,即等待前一個(gè)指令確定執(zhí)行完成。指令執(zhí)行的時(shí)間請(qǐng)參考指令表中的指令執(zhí)行時(shí)間說(shuō)明。

⑤“RE”為基本指令集與擴(kuò)充指令集的選擇控制位。當(dāng)變更“RE”后,以后的指令集將維持在最后的狀態(tài),除非再次變更“RE”位,否則使用相同指令集時(shí),無(wú)需每次均重設(shè)“RE”位。

2.4指令描述1、顯示開(kāi)/關(guān)設(shè)置
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
L
L
H
H
H
H
H
H/L
功能:設(shè)置屏幕顯示開(kāi)/關(guān)。 DB0=H,開(kāi)顯示;DB0=L,關(guān)顯示。不影響顯示RAM(DD RAM)中的內(nèi)容。
2、設(shè)置顯示起始行
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
H
H
行地址(0-63)
功能:執(zhí)行該命令后,所設(shè)置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計(jì)數(shù)器控制的,該命令自動(dòng)將A0-A5位地址送入Z地址計(jì)數(shù)器,起始地址可以是0-63范圍內(nèi)任意一行。Z地址計(jì)數(shù)器具有循環(huán)計(jì)數(shù)功能,用于顯示行掃描同步,當(dāng)掃描完一行后自動(dòng)加一。
3、設(shè)置頁(yè)地址
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
H
L
H
H
H
頁(yè)地址(0-7)
功能:執(zhí)行本指令后,下面的讀寫(xiě)操作將在指定頁(yè)內(nèi),直到重新設(shè)置。頁(yè)地址就是DD RAM 的行地址,頁(yè)地址存儲(chǔ)在X地址計(jì)數(shù)器中,A2-A0可表示8頁(yè),讀寫(xiě)數(shù)據(jù)對(duì)頁(yè)地址沒(méi)有影響,除本指令可改變頁(yè)地址外,復(fù)位信號(hào)(RST)可把頁(yè)地址計(jì)數(shù)器內(nèi)容清零。
      





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、設(shè)置列地址
CODE:  
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
L
H
列地址(0-63)
功能: DD RAM 的列地址存儲(chǔ)在Y地址計(jì)數(shù)器中,讀寫(xiě)數(shù)據(jù)對(duì)列地址有影響,在對(duì)DD RAM進(jìn)行讀寫(xiě)操作后,Y地址自動(dòng)加一。
5、狀態(tài)檢測(cè)
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
H
L
BF
L
ON/OFF
RET
L
L
L
L
功能:讀忙信號(hào)標(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:表示顯示開(kāi)。
6、寫(xiě)顯示數(shù)據(jù)
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
H
D7
D6
D5
D4
D3
D2
D1
D0
功能:寫(xiě)數(shù)據(jù)到DD RAM,DD RAM是存儲(chǔ)圖形顯示數(shù)據(jù)的,寫(xiě)指令執(zhí)行后Y地址計(jì)數(shù)器自動(dòng)加1。D7-D0位數(shù)據(jù)為1表示顯示,數(shù)據(jù)為0表示不顯示。寫(xiě)數(shù)據(jù)到DD RAM前,要先執(zhí)行“設(shè)置頁(yè)地址”及“設(shè)置列地址”命令。
7、讀顯示數(shù)據(jù)
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讀數(shù)據(jù),讀指令執(zhí)行后Y地址計(jì)數(shù)器自動(dòng)加1。從DD RAM讀數(shù)據(jù)前要先執(zhí)行“設(shè)置頁(yè)地址” 及“設(shè)置列地址”命令。
8、屏幕顯示與DD RAM地址映射關(guān)系
[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 仿真硬件原理圖

將編寫(xiě)的代碼燒寫(xiě)到單片機(jī)里,運(yùn)行液晶顯示不正常,如圖2所示。


圖2 運(yùn)行圖

開(kāi)始我還以為是程序問(wèn)題,把程序看了又看,改了又改,顯示結(jié)果還是一樣。后來(lái)問(wèn)了下張勇生,出現(xiàn)這種情況的原因是P0口沒(méi)接上拉電阻。因?yàn)镻0口是開(kāi)漏的,不管它的驅(qū)動(dòng)能力多大,相當(dāng)于它是沒(méi)有電源的,需要外部的電路提供,絕大多數(shù)情況下P0口是必需加上拉電阻的。接上拉電阻后,重新運(yùn)行這下運(yùn)行正常了,如圖3所示。


圖3正常顯示

代碼如下所示:

#include


#define LCDLCDDisp_Off   0x3e

#define LCDLCDDisp_On    0x3f

#define Page_Add     0xb8//頁(yè)地址

#define LCDCol_Add     0x40//列地址

#define Start_Line     0xC0//行地址

/*****液晶顯示器的端口定義*****/

#define data_ora P0 /*液晶數(shù)據(jù)總線*/

sbit LCDMcs=P2^1 ;    /*片選1*/

sbit LCDScs=P2^2 ;    /*片選2*/

sbit RESET=P2^3 ;  /*復(fù)位信號(hào)*/

sbit LCDDi=P2^4 ;     /*數(shù)據(jù)/指令 選擇*/

sbit LCDRW=P2^5 ;     /*讀/寫(xiě) 選擇*/

sbit LCDEnable=P2^6 ;     /*讀/寫(xiě) 使能*/




char code Hz_xu[]=

{

/*------------------------------------------------------------------------------

  源文件 / 文字 : F:LD測(cè)試儀液晶字模提取+排版軟件液晶字模提取圖例wo.bmp

  寬×高(像素): 16×

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 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測(cè)試儀液晶字模提取+排版軟件液晶字模提取圖例ping.bmp萍

  寬×高(像素): 16×16

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 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

};


/****************************************************************************

函數(shù)功能:LCD延時(shí)程序

入口參數(shù):t

出口參數(shù):

****************************************************************************/

void LCDdelay(unsigned int t)

{

              unsigned int i,j;

              for(i=0;i<t;i++);[ size][="" align]
              for(j=0;j<10;j++);

}

/****************************************************************************

狀態(tài)檢查,LCD是否忙



*****************************************************************************/

void CheckState()                           

{

   unsigned char dat,DATA;//狀態(tài)信息(判斷是否忙)

   LCDDi=0; // 數(shù)據(jù)指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)

   LCDRW=1; //R/W="H" ,E="H"數(shù)據(jù)被讀到DB7∽DB0

   do

   {

      DATA=0x00;

      LCDEnable=1;              //EN下降源

                LCDdelay(2);//延時(shí)

                dat=DATA;

      LCDEnable=0;

      dat=0x80 & dat; //僅當(dāng)?shù)?位為0時(shí)才可操作(判別busy信號(hào))

    }

    while(!(dat==0x00));

}

/*****************************************************************************

函數(shù)功能:寫(xiě)命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次

入口參數(shù):cmdcode

出口參數(shù):

*****************************************************************************/

void write_com(unsigned char cmdcode)

{

    CheckState();//檢測(cè)LCD是否忙

              LCDDi=0;

              LCDRW=0;

              P0=cmdcode;                           

              LCDdelay(2);

              LCDEnable=1;

              LCDdelay(2);

              LCDEnable=0;

}

/*****************************************************************************

函數(shù)功能:LCD初始化程序

入口參數(shù):

出口參數(shù):

*****************************************************************************/

void init_lcd()

{

              LCDdelay(100);            

              LCDMcs=1;//剛開(kāi)始關(guān)閉兩屏

              LCDScs=1;

              LCDdelay(100);

              write_com(LCDLCDDisp_Off);              //寫(xiě)初始化命令

              write_com(Page_Add+0);

              write_com(Start_Line+0);

              write_com(LCDCol_Add+0);

              write_com(LCDLCDDisp_On);

}

/*****************************************************************************

函數(shù)功能:寫(xiě)數(shù)據(jù)到LCD程序,RS(DI)=H,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次

入口參數(shù):LCDDispdata

出口參數(shù):

*****************************************************************************/

void write_data(unsigned char LCDDispdata)

{

    CheckState();//檢測(cè)LCD是否忙

              LCDDi=1;

              LCDRW=0;

              P0=LCDDispdata;

              LCDdelay(2);

              LCDEnable=1;

              LCDdelay(2);

              LCDEnable=0;

}

/*****************************************************************************

函數(shù)功能:清除LCD內(nèi)存程序

入口參數(shù):pag,col,hzk

出口參數(shù):

*****************************************************************************/

void Clr_Scr()

{

              unsigned char j,k;

              LCDMcs=0; //左、右屏均開(kāi)顯示

              LCDScs=0;

              write_com(Page_Add+0);

              write_com(LCDCol_Add+0);

              for(k=0;k<8;k++)//控制頁(yè)數(shù)0-7,共8頁(yè)

              {

                            write_com(Page_Add+k); //每頁(yè)每頁(yè)進(jìn)行寫(xiě)

                              for(j=0;j<64;j++)  //每頁(yè)最多可寫(xiě)32個(gè)中文文字或64個(gè)ASCII字符

                            {

                                  write_com(LCDCol_Add+j);

                                          write_data(0x00);//控制列數(shù)0-63,共64列,寫(xiě)點(diǎn)內(nèi)容,列地址自動(dòng)加1

                            }

              }

}

/*****************************************************************************

函數(shù)功能:指定位置顯示漢字16*16程序

入口參數(shù):page,column,hzk

出口參數(shù):

*****************************************************************************/

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; //左屏開(kāi)顯示

              LCDScs=1;

              hz_LCDDisp16(0,48,Hz_xu);// Hz_Wo為某個(gè)漢字的首地址

        LCDMcs=1; //右屏開(kāi)顯示

              LCDScs=0;

        hz_LCDDisp16(0,0,Hz_ping);

              while(1)

    {


              }

}

3.2圖形顯示
我選了一張128x64的圖片在字模軟件中生產(chǎn)相應(yīng)的C代碼,將C代碼寫(xiě)入到程序中。

由于液晶由兩個(gè)控制芯片來(lái)控制,所以有片選信號(hào)端口CS1和CS2。我在字體顯示程序中把改了顯示那一塊的代碼,主程序中改了片選信號(hào)。開(kāi)始同時(shí)將左右屏都開(kāi)了,顯示事,左右屏同時(shí)顯示一樣的圖形,并且顯示的圖形不完整。主程序中顯示部分的程序不對(duì),我想了后,將主程序中程序改了一下,先開(kāi)左屏調(diào)用左屏顯示函數(shù),在關(guān)左屏開(kāi)右屏調(diào)用右屏顯示函數(shù)。最后顯示成功。如圖4所示。


圖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 /*液晶數(shù)據(jù)總線*/

sbit LCDMcs=P2^1 ;    /*片選1*/

sbit LCDScs=P2^2 ;    /*片選2*/

sbit RESET=P2^3 ;  /*復(fù)位信號(hào)*/

sbit LCDDi=P2^4 ;     /*數(shù)據(jù)/指令 選擇*/

sbit LCDRW=P2^5 ;     /*讀/寫(xiě) 選擇*/

sbit LCDEnable=P2^6 ;     /*讀/寫(xiě) 使能*/




char code Hz[]=

{

/*------------------------------------------------------------------------------

  源文件 / 文字 : F:LD測(cè)試儀液晶字模提取+排版軟件液晶字模提取圖例yema.bmp萍

  寬×高(像素): 128×64

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/1024字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 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

};


/****************************************************************************

函數(shù)功能:LCD延時(shí)程序

入口參數(shù):t

出口參數(shù):

****************************************************************************/

void LCDdelay(unsigned int t)

{

              unsigned int i,j;

              for(i=0;i<t;i++);[ size][="" align]
              for(j=0;j<10;j++);

}

/****************************************************************************

狀態(tài)檢查,LCD是否忙



*****************************************************************************/

void CheckState()                           

{

   unsigned char dat,DATA;//狀態(tài)信息(判斷是否忙)

   LCDDi=0; // 數(shù)據(jù)指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)

   LCDRW=1; //R/W="H" ,E="H"數(shù)據(jù)被讀到DB7∽DB0

   do

   {

      DATA=0x00;

      LCDEnable=1;              //EN下降源

                LCDdelay(2);//延時(shí)

                dat=DATA;

      LCDEnable=0;

      dat=0x80 & dat; //僅當(dāng)?shù)?位為0時(shí)才可操作(判別busy信號(hào))

    }

    while(!(dat==0x00));

}

/*****************************************************************************

函數(shù)功能:寫(xiě)命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次

入口參數(shù):cmdcode

出口參數(shù):

*****************************************************************************/

void write_com(unsigned char cmdcode)

{

    CheckState();//檢測(cè)LCD是否忙

              LCDDi=0;

              LCDRW=0;

              P0=cmdcode;                           

              LCDdelay(2);

              LCDEnable=1;

              LCDdelay(2);

              LCDEnable=0;

}

/*****************************************************************************

函數(shù)功能:LCD初始化程序

入口參數(shù):

出口參數(shù):

*****************************************************************************/

void init_lcd()

{

              LCDdelay(100);            

              LCDMcs=1;//剛開(kāi)始關(guān)閉兩屏

              LCDScs=1;

              LCDdelay(100);

              write_com(LCDLCDDisp_Off);              //寫(xiě)初始化命令

              write_com(Page_Add+0);

              write_com(Start_Line+0);

              write_com(LCDCol_Add+0);

              write_com(LCDLCDDisp_On);

}

/*****************************************************************************

函數(shù)功能:寫(xiě)數(shù)據(jù)到LCD程序,RS(DI)=H,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次

入口參數(shù):LCDDispdata

出口參數(shù):

*****************************************************************************/

void write_data(unsigned char LCDDispdata)

{

    CheckState();//檢測(cè)LCD是否忙

              LCDDi=1;

              LCDRW=0;

              P0=LCDDispdata;

              LCDdelay(2);

              LCDEnable=1;

              LCDdelay(2);

              LCDEnable=0;

}

/*****************************************************************************

函數(shù)功能:清除LCD內(nèi)存程序

入口參數(shù):pag,col,hzk

出口參數(shù):

*****************************************************************************/

void Clr_Scr()

{

              unsigned char j,k;

              LCDMcs=0; //左、右屏均開(kāi)顯示

              LCDScs=0;

              write_com(Page_Add+0);

              write_com(LCDCol_Add+0);

              for(k=0;k<8;k++)//控制頁(yè)數(shù)0-7,共8頁(yè)

              {

                            write_com(Page_Add+k); //每頁(yè)每頁(yè)進(jìn)行寫(xiě)

                              for(j=0;j<64;j++)  //每頁(yè)最多可寫(xiě)32個(gè)中文文字或64個(gè)ASCII字符

                            {

                                  write_com(LCDCol_Add+j);

                                          write_data(0x00);//控制列數(shù)0-63,共64列,寫(xiě)點(diǎn)內(nèi)容,列地址自動(dòng)加1

                            }

              }

}


void main()

{

              init_lcd();

              Clr_Scr();

              LCDMcs=0; //左屏開(kāi)顯示

              LCDScs=1;

    Bmp_Left_Disp(0,0,Hz);

    LCDMcs=1; //右屏開(kāi)顯示

              LCDScs=0;

              Bmp_Right_Disp(0,0,Hz);


              while(1)

    {


              }

}

3.3同時(shí)顯示多個(gè)漢字
  用字模軟件取模后通過(guò)改寫(xiě)軟件,仿真圖形如圖5所示。


圖5 顯示多個(gè)漢字的仿真圖

代碼如下所示:

#include

#define LCDLCDDisp_Off   0x3e

#define LCDLCDDisp_On    0x3f

#define Page_Add     0xb8//頁(yè)地址

#define LCDCol_Add     0x40//列地址

#define Start_Line     0xC0//行地址

/*****液晶顯示器的端口定義*****/

#define data_ora P0 /*液晶數(shù)據(jù)總線*/

sbit LCDMcs=P2^1 ;    /*片選1*/

sbit LCDScs=P2^2 ;    /*片選2*/

sbit RESET=P2^3 ;  /*復(fù)位信號(hào)*/

sbit LCDDi=P2^4 ;     /*數(shù)據(jù)/指令 選擇*/

sbit LCDRW=P2^5 ;     /*讀/寫(xiě) 選擇*/

sbit LCDEnable=P2^6 ;     /*讀/寫(xiě) 使能*/




unsigned char code Bmp1[]=

{

/*------------------------------------------------------------------------------

  源文件 / 文字 : 來(lái)自剪貼板!武漢理工大學(xué)

  寬×高(像素): 128×16

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/256字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-29 17:52:57

  顯示的漢字:武漢理工大學(xué)

------------------------------------------------------------------------------*/

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[]=

{

/*------------------------------------------------------------------------------

  源文件 / 文字 : 信息工程學(xué)院

  寬×高(像素): 128×16

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/256字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-29 18:34:04

  顯示的漢字:信息工程學(xué)院

------------------------------------------------------------------------------*/

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×

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/256字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 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

  字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/256字節(jié)

  數(shù)據(jù)轉(zhuǎn)換日期  : 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

};

/****************************************************************************

函數(shù)功能:LCD延時(shí)程序

入口參數(shù):t

出口參數(shù):

****************************************************************************/

void LCDdelay(unsigned int t)

{

              unsigned int i,j;

              for(i=0;i<t;i++);[ size][="" align]
              for(j=0;j<10;j++);

}

/****************************************************************************

狀態(tài)檢查,LCD是否忙



*****************************************************************************/

void CheckState()                           

{

   unsigned char dat,DATA;//狀態(tài)信息(判斷是否忙)

   LCDDi=0; // 數(shù)據(jù)指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)

   LCDRW=1; //R/W="H" ,E="H"數(shù)據(jù)被讀到DB7∽DB0

   do

   {

      DATA=0x00;

      LCDEnable=1;              //EN下降源

                LCDdelay(2);//延時(shí)

                dat=DATA;

      LCDEnable=0;

      dat=0x80 & dat; //僅當(dāng)?shù)?位為0時(shí)才可操作(判別busy信號(hào))

    }

    while(!(dat==0x00));

}

/*****************************************************************************

函數(shù)功能:寫(xiě)命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次

入口參數(shù):cmdcode

出口參數(shù):

*****************************************************************************/

void write_com(unsigned char cmdcode)

{

    CheckState();//檢測(cè)LCD是否忙

              LCDDi=0;

              LCDRW=0;

              P0=cmdcode;                           

              LCDdelay(2);

              LCDEnable=1;

              LCDdelay(2);

              LCDEnable=0;

}

/*****************************************************************************

函數(shù)功能:LCD初始化程序

入口參數(shù):

出口參數(shù):

*****************************************************************************/

void init_lcd()

{

              LCDdelay(100);            

              LCDMcs=1;//剛開(kāi)始關(guān)閉兩屏

              LCDScs=1;

              LCDdelay(100);

              write_com(LCDLCDDisp_Off);              //寫(xiě)初始化命令

              write_com(Page_Add+0);

              write_com(Start_Line+0);

              write_com(LCDCol_Add+0);

              write_com(LCDLCDDisp_On);

}

/*****************************************************************************

函數(shù)功能:寫(xiě)數(shù)據(jù)到LCD程序,RS(DI)=H,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次

入口參數(shù):LCDDispdata

出口參數(shù):

*****************************************************************************/

void write_data(unsigned char LCDDispdata)

{

    CheckState();//檢測(cè)LCD是否忙

              LCDDi=1;

              LCDRW=0;

              P0=LCDDispdata;

              LCDdelay(2);

              LCDEnable=1;

              LCDdelay(2);

              LCDEnable=0;

}

/*****************************************************************************

函數(shù)功能:清除LCD內(nèi)存程序

入口參數(shù):pag,col,hzk

出口參數(shù):

*****************************************************************************/

void Clr_Scr()

{

              unsigned char j,k;

              LCDMcs=0; //左、右屏均開(kāi)顯示

              LCDScs=0;

              write_com(Page_Add+0);

              write_com(LCDCol_Add+0);

              for(k=0;k<8;k++)//控制頁(yè)數(shù)0-7,共8頁(yè)

              {

                            write_com(Page_Add+k); //每頁(yè)每頁(yè)進(jìn)行寫(xiě)

                              for(j=0;j<64;j++)  //每頁(yè)最多可寫(xiě)32個(gè)中文文字或64個(gè)ASCII字符

                            {

                                  write_com(LCDCol_Add+j);

                                          write_data(0x00);//控制列數(shù)0-63,共64列,寫(xiě)點(diǎn)內(nèi)容,列地址自動(dòng)加1

                            }

              }

}

/*****************************************************************************

函數(shù)功能:左屏位置顯示

入口參數(shù):page,column,hzk

出口參數(shù):

*****************************************************************************/

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]);

              }

}

/*****************************************************************************

函數(shù)功能:右屏位置顯示

入口參數(shù):page,column,hzk

出口參數(shù):

*****************************************************************************/

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; //左屏開(kāi)顯示

              LCDScs=1;

              Bmp_Left_Disp(0,0,Bmp1);// Bmp1為某個(gè)漢字的首地址

    Bmp_Left_Disp(2,0,Bmp2);

    Bmp_Left_Disp(4,0,Bmp3);

    Bmp_Left_Disp(6,0,Bmp4);

    LCDMcs=1; //右屏開(kāi)顯示

              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向上滾動(dòng)顯示
仿真圖形如圖6所示。

   

(a)第一次全部顯示                             (b)開(kāi)始滾動(dòng)顯示

  

(c)                                            (d)

程序如下所示:

  1. #include
  2. #define  uchar  unsigned char
  3. #define  uint  unsigned int
  4. #define LCDLCDDisp_Off   0x3e
  5. #define LCDLCDDisp_On    0x3f
  6. #define Page_Add     0xb8//ye
  7. #define LCDCol_Add     0x40//lie
  8. #define Start_Line     0xC0//hang
  9. /*****液晶顯示器的端口定義*****/
  10. #define data_ora P0 /*液晶數(shù)據(jù)總線*/
  11. sbit LCDMcs=P2^1 ;    /*片選1*/
  12. sbit LCDScs=P2^2 ;    /*片選2*/
  13. sbit RESET=P2^3 ;  /*復(fù)位信號(hào)*/
  14. sbit LCDDi=P2^4 ;     /*數(shù)據(jù)/指令 選擇*/
  15. sbit LCDRW=P2^5 ;     /*讀/寫(xiě) 選擇*/
  16. sbit LCDEnable=P2^6 ;     /*讀/寫(xiě) 使能*/

  17. uchar *tab;
  18. uint k=0;
  19. uchar code hz1[]=
  20. {
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23. /*------------------------------------------------------------------------------
  24.   源文件 / 文字 : 武
  25.   寬×高(像素): 16×16
  26.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  27.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:50:18
  28. ------------------------------------------------------------------------------*/
  29. 0x10,0x50,0x34,0x14,0x1C,0xD4,0x16,0x14,0x10,0x7F,0x90,0x12,0x14,0x10,0x10,0x00,
  30. 0x40,0x40,0x7F,0x20,0x20,0x1F,0x11,0x11,0x01,0x00,0x07,0x18,0x20,0x40,0xF0,0x00,
  31. /*------------------------------------------------------------------------------
  32.   源文件 / 文字 : 漢
  33.   寬×高(像素): 16×16
  34.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  35.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:51:45
  36. ------------------------------------------------------------------------------*/
  37. 0x10,0x60,0x21,0x96,0x68,0x04,0x1E,0xE4,0x04,0x04,0x04,0xE4,0x1C,0x04,0x00,0x00,
  38. 0x04,0x04,0x7E,0x01,0x40,0x20,0x20,0x10,0x0B,0x04,0x0B,0x10,0x30,0x60,0x20,0x00,
  39. /*------------------------------------------------------------------------------
  40.   源文件 / 文字 : 理
  41.   寬×高(像素): 16×16
  42.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  43.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:52:29
  44. ------------------------------------------------------------------------------*/
  45. 0x44,0x44,0xFC,0x54,0x4C,0x04,0xFE,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,
  46. 0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00,
  47. /*------------------------------------------------------------------------------
  48.   源文件 / 文字 : 工
  49.   寬×高(像素): 16×16
  50.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  51.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:53:19
  52. ------------------------------------------------------------------------------*/
  53. 0x00,0x40,0x22,0x12,0x0A,0x06,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
  54. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  55. /*------------------------------------------------------------------------------
  56.   源文件 / 文字 : 大
  57.   寬×高(像素): 16×16
  58.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  59.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:53:53
  60. ------------------------------------------------------------------------------*/
  61. 0x20,0x60,0x20,0x30,0x28,0x24,0xA2,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  62. 0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,
  63. /*------------------------------------------------------------------------------
  64.   源文件 / 文字 : 學(xué)
  65.   寬×高(像素): 16×16
  66.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  67.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:54:23
  68. ------------------------------------------------------------------------------*/
  69. 0x40,0x70,0x30,0x12,0x5C,0x54,0x52,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
  70. 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

  71. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  72. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  73. };
  74. uchar code hz2[]=
  75. {
  76. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  77. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  78. /*------------------------------------------------------------------------------
  79.   源文件 / 文字 : 信
  80.   寬×高(像素): 16×16
  81.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  82.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:56:07
  83. ------------------------------------------------------------------------------*/
  84. 0x80,0x40,0x30,0xFC,0x0F,0x0E,0xAA,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,
  85. 0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,
  86. /*------------------------------------------------------------------------------
  87.   源文件 / 文字 : 息
  88.   寬×高(像素): 16×16
  89.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  90.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:56:47
  91. ------------------------------------------------------------------------------*/
  92. 0x00,0x40,0x20,0xFC,0x5C,0x54,0x56,0x55,0x54,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,
  93. 0x00,0x20,0x38,0x01,0x3D,0x41,0x41,0x45,0x59,0x41,0x41,0x71,0x00,0x08,0x30,0x00,
  94. /*------------------------------------------------------------------------------
  95.   源文件 / 文字 : 工
  96.   寬×高(像素): 16×16
  97.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  98.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:57:52
  99. ------------------------------------------------------------------------------*/
  100. 0x00,0x40,0x22,0x12,0x0A,0x06,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
  101. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  102. /*------------------------------------------------------------------------------
  103.   源文件 / 文字 : 程
  104.   寬×高(像素): 16×16
  105.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  106.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:58:28
  107. ------------------------------------------------------------------------------*/
  108. 0x10,0x52,0xF2,0xFE,0x99,0x15,0x82,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
  109. 0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,
  110. /*------------------------------------------------------------------------------
  111.   源文件 / 文字 : 學(xué)
  112.   寬×高(像素): 16×16
  113.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  114.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:59:06
  115. ------------------------------------------------------------------------------*/
  116. 0x40,0x70,0x30,0x12,0x5C,0x54,0x52,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
  117. 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
  118. /*------------------------------------------------------------------------------
  119.   源文件 / 文字 : 院
  120.   寬×高(像素): 16×16
  121.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  122.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:59:51
  123. ------------------------------------------------------------------------------*/
  124. 0xFE,0x42,0x32,0x5A,0x8E,0x0C,0x26,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
  125. 0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,

  126. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  127. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  128. };
  129. uchar code hz3[]=
  130. {
  131. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  132. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  133. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  134. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  135. /*------------------------------------------------------------------------------
  136.   源文件 / 文字 : 通
  137.   寬×高(像素): 16×16
  138.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  139.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 16:02:05
  140. ------------------------------------------------------------------------------*/
  141. 0x40,0x41,0xE6,0x10,0x08,0xF6,0x52,0x52,0x56,0xFA,0x5A,0x56,0xF2,0x00,0x00,0x00,
  142. 0x40,0x20,0x1F,0x20,0x40,0x5F,0x42,0x42,0x42,0x5F,0x4A,0x52,0x4F,0x40,0x40,0x00,
  143. /*------------------------------------------------------------------------------
  144.   源文件 / 文字 : 信
  145.   寬×高(像素): 16×16
  146.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  147.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 16:02:40
  148. ------------------------------------------------------------------------------*/
  149. 0x80,0x40,0x30,0xFC,0x0F,0x0E,0xAA,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,
  150. 0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,
  151. /*------------------------------------------------------------------------------
  152.   源文件 / 文字 : 工
  153.   寬×高(像素): 16×16
  154.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  155.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:57:52
  156. ------------------------------------------------------------------------------*/
  157. 0x00,0x40,0x22,0x12,0x0A,0x06,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
  158. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  159. /*------------------------------------------------------------------------------
  160.   源文件 / 文字 : 程
  161.   寬×高(像素): 16×16
  162.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  163.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 15:58:28
  164. ------------------------------------------------------------------------------*/
  165. 0x10,0x52,0xF2,0xFE,0x99,0x15,0x82,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
  166. 0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,


  167. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  168. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  169. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  170. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  171. };
  172. uchar code hz4[]=
  173. {

  174. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  175. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  176. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  177. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  178. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  179. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  180. /*------------------------------------------------------------------------------
  181.   源文件 / 文字 : 許
  182.   寬×高(像素): 16×16
  183.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  184.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 16:05:36
  185. ------------------------------------------------------------------------------*/
  186. 0x40,0x41,0x6E,0xD4,0x08,0x44,0x32,0x0F,0x08,0x08,0xF8,0x08,0x08,0x08,0x00,0x00,
  187. 0x00,0x00,0x00,0x7F,0x20,0x11,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x00,
  188. /*------------------------------------------------------------------------------
  189.   源文件 / 文字 : 萍
  190.   寬×高(像素): 16×16
  191.   字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序/32字節(jié)
  192.   數(shù)據(jù)轉(zhuǎn)換日期  : 2010-7-31 16:06:07
  193. ------------------------------------------------------------------------------*/
  194. 0x84,0x54,0x64,0x34,0x0C,0xAF,0x26,0x24,0x24,0xFF,0x24,0x24,0xE4,0xA4,0x04,0x00,
  195. 0x10,0x13,0xF9,0x06,0x00,0x08,0x09,0x0A,0x08,0xFF,0x08,0x0A,0x09,0x08,0x08,0x00,
  196. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  197. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  198. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  199. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  200. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  201. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

  202. };
  203. /****************************************************************************
  204. 函數(shù)功能:LCD延時(shí)程序
  205. 入口參數(shù):t
  206. 出口參數(shù):
  207. ****************************************************************************/
  208. void LCDdelay(uchar x)
  209. {


  210.    int d;
  211.    uchar y;
  212.    for(y=0;y<x;y++)
  213.    for(d=0;d<10;d++);
  214. }
  215. /****************************************************************************
  216. 狀態(tài)檢查,LCD是否忙


  217. *****************************************************************************/
  218. void CheckState()                           
  219. {
  220.    uchar dat,DATA;//狀態(tài)信息(判斷是否忙)
  221.    LCDDi=0; // 數(shù)據(jù)指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)
  222.    LCDRW=1; //R/W="H" ,E="H"數(shù)據(jù)被讀到DB7∽DB0
  223.    do
  224.    {
  225.       DATA=0x00;
  226.       LCDEnable=1;              //EN下降源
  227.                 LCDdelay(1);//延時(shí)
  228.                 dat=DATA;
  229.       LCDEnable=0;
  230.       dat=0x80 & dat; //僅當(dāng)?shù)?位為0時(shí)才可操作(判別busy信號(hào))
  231.     }
  232.     while(!(dat==0x00));
  233. }
  234. /*****************************************************************************
  235. 函數(shù)功能:寫(xiě)命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次
  236. 入口參數(shù):cmdcode
  237. 出口參數(shù):
  238. *****************************************************************************/
  239. void write_com(uchar cmdcode)
  240. {
  241.     CheckState();//檢測(cè)LCD是否忙
  242.               LCDDi=0;
  243.               LCDRW=0;
  244.               P0=cmdcode;                           
  245.               LCDdelay(1);
  246.               LCDEnable=1;
  247.               LCDdelay(1);
  248.               LCDEnable=0;
  249. }

  250. /*****************************************************************************
  251. 函數(shù)功能:寫(xiě)數(shù)據(jù)到LCD程序,RS(DI)=H,RW=L,EN=H,即來(lái)一個(gè)脈沖寫(xiě)一次
  252. 入口參數(shù):LCDDispdata
  253. 出口參數(shù):
  254. *****************************************************************************/
  255. void write_data(uchar LCDDispdata)
  256. {
  257.     CheckState();//檢測(cè)LCD是否忙
  258.               LCDDi=1;
  259.               LCDRW=0;
  260.               P0=LCDDispdata;
  261.               LCDdelay(1);
  262.               LCDEnable=1;
  263.               LCDdelay(1);
  264.               LCDEnable=0;
  265. }
  266. /*****************************************************************************
  267. /*****************************************************************************
  268. 函數(shù)功能:LCD初始化程序
  269. 入口參數(shù):
  270. 出口參數(shù):
  271. *****************************************************************************/
  272. void init_lcd()
  273. {
  274.               LCDdelay(1);            
  275.               LCDMcs=1;//剛開(kāi)始關(guān)閉兩屏
  276.               LCDScs=1;
  277.               LCDdelay(1);
  278.               write_com(LCDLCDDisp_Off);              //寫(xiě)初始化命令
  279.               write_com(Page_Add+0);
  280.               write_com(Start_Line+0);
  281.               write_com(LCDCol_Add+0);
  282.               write_com(LCDLCDDisp_On);
  283. }
  284. /**************************************************************************
  285. 函數(shù)功能:清除LCD內(nèi)存程序
  286. 入口參數(shù):pag,col,hzk
  287. 出口參數(shù):
  288. *****************************************************************************/
  289. void Clr_Scr()
  290. {
  291.               uchar j,k;
  292.               LCDMcs=0; //左、右屏均開(kāi)顯示
  293.               LCDScs=0;
  294.               write_com(Page_Add+0);
  295.               write_com(LCDCol_Add+0);
  296.               for(k=0;k<8;k++)//控制頁(yè)數(shù)0-7,共8頁(yè)
  297.               {
  298.                             write_com(Page_Add+k); //每頁(yè)每頁(yè)進(jìn)行寫(xiě)
  299.                               for(j=0;j<64;j++)  //每頁(yè)最多可寫(xiě)32個(gè)中文文字或64個(gè)ASCII字符
  300.                             {
  301.                                   write_com(LCDCol_Add+j);
  302.                                           write_data(0x00);//控制列數(shù)0-63,共64列,寫(xiě)點(diǎn)內(nèi)容,列地址自動(dòng)加1
  303.                             }
  304.               }
  305. }
  306. /*****************************************************************************
  307. 函數(shù)功能:一行一行顯示
  308. 入口參數(shù):page,column,hzk
  309. 出口參數(shù):
  310. *****************************************************************************/
  311. Disp(uchar page,uchar column, uchar code *word)
  312. {
  313. uchar i;
  314. LCDMcs=0;
  315. LCDScs=1;
  316. write_com(0xb8|page);
  317. write_com(0x40|column);
  318. for(i=0;i<16;i++)
  319. write_data(word[i]);
  320. for(i=32;i<48;i++)
  321. write_data(word[i]);
  322. for(i=64;i<80;i++)
  323. write_data(word[i]);
  324. for(i=96;i<112;i++)
  325. write_data(word[i]);

  326. LCDMcs=1;
  327. LCDScs=0;
  328. write_com(0xb8|page);
  329. write_com(0x40);
  330. for(i=128;i<144;i++)
  331. write_data(word[i]);
  332. for(i=160;i<176;i++)
  333. write_data(word[i]);
  334. for(i=192;i<208;i++)
  335. write_data(word[i]);
  336. for(i=224;i<240;i++)
  337. write_data(word[i]);

  338. LCDMcs=0;
  339. LCDScs=1;
  340. write_com(0xb8|page+1);
  341. write_com(0x40|column);
  342. for(i=16;i<32;i++)
  343. write_data(word[i]);
  344. for(i=48;i<64;i++)
  345. write_data(word[i]);
  346. for(i=80;i<96;i++)
  347. write_data(word[i]);
  348. for(i=112;i<128;i++)
  349. write_data(word[i]);


  350. LCDMcs=1;
  351. LCDScs=0;
  352. write_com(0xb8|page+1);
  353. write_com(0x40);
  354. for(i=144;i<160;i++)
  355. write_data(word[i]);
  356. for(i=176;i<192;i++)
  357. write_data(word[i]);
  358. for(i=208;i<224;i++)
  359. write_data(word[i]);
  360. for(i=240;i<250;i++)
  361. write_data(word[i]);
  362. }

  363. void main()
  364. {
  365.               init_lcd();
  366.               Clr_Scr();
  367.      k=0;
  368.       for(k=0xc0;k<0xff;k++)
  369.               {
  370.                             Disp(0,0,hz1);
  371.                             Disp(2,0,hz2);
  372.                             Disp(4,0,hz3);
  373.                             Disp(6,0,hz4);
  374.          LCDMcs=0;
  375.          LCDScs=0;
  376.                             write_com(k);
  377.                             LCDdelay(2);

  378.               }
  379. while(1)
  380.     {

  381.               }
  382. }
復(fù)制代碼


4小結(jié)
    剛開(kāi)始學(xué)液晶時(shí)感覺(jué)好難,字模就困擾了我好多天。通過(guò)看資料查資料,以及看程序搞懂了,通過(guò)寫(xiě)程序仿真,對(duì)液晶的控制更明白,主要寫(xiě)的是并行數(shù)據(jù)傳輸?shù)拇a。寫(xiě)了一個(gè)漢字的顯示,多個(gè)漢字顯示程序,圖形顯示的程序,還有漢字動(dòng)態(tài)顯示。由于取字模軟件運(yùn)行有點(diǎn)問(wèn)題,左上角上自動(dòng)多出一撇,所以顯示字或圖形的左上角多出一撇。后面寫(xiě)一個(gè)漢字一個(gè)漢字顯示程序并仿真,還有波形顯示程序和仿真。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:571794 發(fā)表于 2020-6-5 15:46 | 只看該作者
我剛好在學(xué)習(xí)12864,謝謝樓主
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表