久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6912|回復: 1
打印 上一主題 下一主題
收起左側

Protues仿真12864液晶顯示課程設計報告

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

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信號控制的。

5XY地址計數器

      XY地址計數器是一個9位計數器。高3位是X地址計數器,低6位為Y地址計數器,XY地址計數器實際上是作為DDRAM的地址指針,X地址計數器為DDRAM的頁指針,   Y地址計數器為DDRAM的Y地址指針。

      X地址計數器是沒有記數功能的,只能用指令設置。

      Y地址計數器具有循環記數功能,各顯示數據寫入后,Y地址自動加1,Y地址指針從0到63。

6.顯示數據RAMDDRAM

    DDRAM是存儲圖形顯示數據的。數據為1表示顯示選擇,數據為0表示顯示非選擇。DDRAM與地址和顯示位置的關系見DDRAM地址表。

7Z地址計數器

    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 “A”字模圖

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


圖2 “你”字模圖

根據芯片的不同取模的方式不同,有多種取模方式:單色點陣液晶字模,橫向取模,字節正序,單色點陣液晶字模,橫向取模,字節倒序,單色點陣液晶字模,縱向取模,字節正序,單色點陣液晶字模,縱向取模,字節倒序等等。

2.2圖形顯示
先設垂直地址再設水平地址(連續寫入兩個字節的資料來完成垂直與水平的坐標地址)

垂直地址范圍 AC5...AC0

水平地址范圍 AC3…AC0

繪圖RAM 的地址計數器(AC)只會對水平地址(X 軸)自動加一,當水平地址=0FH 時會重新設為00H

但并不會對垂直地址做進位自動加一,故當連續寫入多筆資料時,程序需自行判斷垂直地址是否需重新設定。GDRAM的坐標地址與資料排列順序如下圖:


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 仿真硬件原理圖

將編寫的代碼燒寫到單片機里,運行液晶顯示不正常,如圖2所示。


圖2 運行圖

開始我還以為是程序問題,把程序看了又看,改了又改,顯示結果還是一樣。后來問了下張勇生,出現這種情況的原因是P0口沒接上拉電阻。因為P0口是開漏的,不管它的驅動能力多大,相當于它是沒有電源的,需要外部的電路提供,絕大多數情況下P0口是必需加上拉電阻的。接上拉電阻后,重新運行這下運行正常了,如圖3所示。


圖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所示。


圖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所示。


圖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所示。

   

(a)第一次全部顯示                             (b)開始滾動顯示

  

(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 /*液晶數據總線*/
  11. sbit LCDMcs=P2^1 ;    /*片選1*/
  12. sbit LCDScs=P2^2 ;    /*片選2*/
  13. sbit RESET=P2^3 ;  /*復位信號*/
  14. sbit LCDDi=P2^4 ;     /*數據/指令 選擇*/
  15. sbit LCDRW=P2^5 ;     /*讀/寫 選擇*/
  16. sbit LCDEnable=P2^6 ;     /*讀/寫 使能*/

  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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  27.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  35.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  43.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  51.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  59.   數據轉換日期  : 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.   源文件 / 文字 : 學
  65.   寬×高(像素): 16×16
  66.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  67.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  82.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  90.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  98.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  106.   數據轉換日期  : 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.   源文件 / 文字 : 學
  112.   寬×高(像素): 16×16
  113.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  114.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  122.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  139.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  147.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  155.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  163.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  184.   數據轉換日期  : 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.   字模格式/大小 : 單色點陣液晶字模,縱向取模,字節倒序/32字節
  192.   數據轉換日期  : 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. 函數功能:LCD延時程序
  205. 入口參數:t
  206. 出口參數:
  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. 狀態檢查,LCD是否忙


  217. *****************************************************************************/
  218. void CheckState()                           
  219. {
  220.    uchar dat,DATA;//狀態信息(判斷是否忙)
  221.    LCDDi=0; // 數據指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數據
  222.    LCDRW=1; //R/W="H" ,E="H"數據被讀到DB7∽DB0
  223.    do
  224.    {
  225.       DATA=0x00;
  226.       LCDEnable=1;              //EN下降源
  227.                 LCDdelay(1);//延時
  228.                 dat=DATA;
  229.       LCDEnable=0;
  230.       dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
  231.     }
  232.     while(!(dat==0x00));
  233. }
  234. /*****************************************************************************
  235. 函數功能:寫命令到LCD程序,RS(DI)=L,RW=L,EN=H,即來一個脈沖寫一次
  236. 入口參數:cmdcode
  237. 出口參數:
  238. *****************************************************************************/
  239. void write_com(uchar cmdcode)
  240. {
  241.     CheckState();//檢測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. 函數功能:寫數據到LCD程序,RS(DI)=H,RW=L,EN=H,即來一個脈沖寫一次
  252. 入口參數:LCDDispdata
  253. 出口參數:
  254. *****************************************************************************/
  255. void write_data(uchar LCDDispdata)
  256. {
  257.     CheckState();//檢測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. 函數功能:LCD初始化程序
  269. 入口參數:
  270. 出口參數:
  271. *****************************************************************************/
  272. void init_lcd()
  273. {
  274.               LCDdelay(1);            
  275.               LCDMcs=1;//剛開始關閉兩屏
  276.               LCDScs=1;
  277.               LCDdelay(1);
  278.               write_com(LCDLCDDisp_Off);              //寫初始化命令
  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. 函數功能:清除LCD內存程序
  286. 入口參數:pag,col,hzk
  287. 出口參數:
  288. *****************************************************************************/
  289. void Clr_Scr()
  290. {
  291.               uchar j,k;
  292.               LCDMcs=0; //左、右屏均開顯示
  293.               LCDScs=0;
  294.               write_com(Page_Add+0);
  295.               write_com(LCDCol_Add+0);
  296.               for(k=0;k<8;k++)//控制頁數0-7,共8頁
  297.               {
  298.                             write_com(Page_Add+k); //每頁每頁進行寫
  299.                               for(j=0;j<64;j++)  //每頁最多可寫32個中文文字或64個ASCII字符
  300.                             {
  301.                                   write_com(LCDCol_Add+j);
  302.                                           write_data(0x00);//控制列數0-63,共64列,寫點內容,列地址自動加1
  303.                             }
  304.               }
  305. }
  306. /*****************************************************************************
  307. 函數功能:一行一行顯示
  308. 入口參數:page,column,hzk
  309. 出口參數:
  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. }
復制代碼


4小結
    剛開始學液晶時感覺好難,字模就困擾了我好多天。通過看資料查資料,以及看程序搞懂了,通過寫程序仿真,對液晶的控制更明白,主要寫的是并行數據傳輸的代碼。寫了一個漢字的顯示,多個漢字顯示程序,圖形顯示的程序,還有漢字動態顯示。由于取字模軟件運行有點問題,左上角上自動多出一撇,所以顯示字或圖形的左上角多出一撇。后面寫一個漢字一個漢字顯示程序并仿真,還有波形顯示程序和仿真。

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

使用道具 舉報

沙發
ID:571794 發表于 2020-6-5 15:46 | 只看該作者
我剛好在學習12864,謝謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 夜夜爽99久久国产综合精品女不卡 | 日韩三级一区 | 亚洲一区二区三区视频 | 中文字幕高清在线 | 亚洲免费视频在线观看 | 成人午夜免费福利视频 | 午夜丰满寂寞少妇精品 | 国产乱码久久久久久 | 亚洲一二三区在线观看 | 国产一区高清 | 国产一区二区三区在线视频 | 亚洲精品在线免费观看视频 | 久久精品福利视频 | 成人h片在线观看 | 欧洲精品视频一区 | 久久91| 色综合久久久久 | 国产视频久久久久 | 成人久久久 | 鸳鸯谱在线观看高清 | 91精品国产一区二区三区 | 在线婷婷 | 亚州无限乱码 | 欧美日韩综合精品 | 国产精品久久久久久久久图文区 | 亚洲在线看 | 99热这里都是精品 | 亚洲第一免费播放区 | 久久久久国产精品一区二区 | 色吊丝2288sds中文字幕 | 国产一区二区欧美 | 国产精品一区二区视频 | 国产目拍亚洲精品99久久精品 | 婷婷中文在线 | 精品美女| 蜜桃av鲁一鲁一鲁一鲁 | 日本成人一区二区 | 中文字幕在线第一页 | 99国产欧美| 99re66在线观看精品热 | 亚洲国产精品久久久久婷婷老年 |