找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

通用型1602LCD液晶操作方法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:195394 發(fā)表于 2017-5-1 22:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

項目2   通用型1602LCD液晶操作方法

液晶顯示器的英文名是Liquid Crystal Display, 簡稱 LCD。 液晶顯示器作為顯示器件具有體積小、重量輕、功耗低等優(yōu)點(diǎn),所以 LCD 日漸成為各種便攜式電子產(chǎn)品的理想顯示器,如計算器,電子表,汽車電子儀表等。根據(jù)LCD的顯示內(nèi)容劃分,可以分為段式LCD、字符式LCD和點(diǎn)陣式LCD 3種。其中,字符式LCD以其廉價、顯示內(nèi)容豐富、美觀、使用方便等特點(diǎn),成為LED數(shù)碼管的理想替代品。

1. 1602字符型液晶簡介

字符型LCD專門用于顯示數(shù)字、字母、圖形符號以及少量自定義符號。這類顯示器把LCD控制器、點(diǎn)陣驅(qū)動器、字符存儲器等做在一塊板上,再與液晶屏一起組成一個顯示模塊。如下圖所示。

file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg

             1 LCD1602的外形圖

目前字符型LCD常用的有16X1行、16X2行、20X2行、20X4行等液晶模塊,型號通常用 XXX1602XXX1604、XXX2002、XXX2004 其中XXX為廠家商標(biāo)名稱 16代表液晶每行可以顯示16個字符;02代表共有2行,也就是說這個液晶一共可以顯示32字符。

2  通用型1602液晶操作方法

1602液晶也叫1602字符型液晶 它是一種專門用來顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶模塊 它有若干個5X75X11點(diǎn)陣字符位組成,每個點(diǎn)陣字符位都可以顯示一個字符。每位之間有一個點(diǎn)距的間隔 每行之間也有間隔 起到了字符間距和行間距的作用,正因為如此 所以他不能顯示圖形(用自定義CGRAM,顯示效果也不好)1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg                    2  LCD1602的背面引腳圖如圖2所示,字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15)和地線GND(16),從左到右分別是1引腳到16引腳
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1

  
編號
  
  
符號
  
  
引腳說明
  
  
編號
  
  
符號
  
  
引腳說明
  
  
1
  
  
VSS
  
  
電源地
  
  
9
  
  
D2
  
  
數(shù)據(jù)
  
  
2
  
  
VDD
  
  
電源正極
  
  
10
  
  
D3
  
  
數(shù)據(jù)
  
  
3
  
  
VL
  
  
液晶顯示偏壓
  
  
11
  
  
D4
  
  
數(shù)據(jù)
  
  
4
  
  
RS
  
  
數(shù)據(jù)/命令選擇
  
  
12
  
  
D5
  
  
數(shù)據(jù)
  
  
5
  
  
R/W
  
  
/寫選擇
  
  
13
  
  
D6
  
  
數(shù)據(jù)
  
  
6
  
  
E
  
  
使能信號
  
  
14
  
  
D7
  
  
數(shù)據(jù)
  
  
7
  
  
D0
  
  
數(shù)據(jù)
  
  
15
  
  
BLA
  
  
背光源正極
  
  
8
  
  
D1
  
  
數(shù)據(jù)
  
  
16
  
  
BLK
  
  
背光源負(fù)極
  

                            1    LCD1602接口信號說明

1腳:VSS為地電源。

2腳:VDD5V正電源。

3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。

4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。

5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。

6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。

714腳:D0D78位雙向數(shù)據(jù)線。

15腳:背光源正極。

16腳:背光源負(fù)極。

3 下面幾個表是1602指令集

1)寄存器選擇功能

               

file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg

                   表2   寄存器選擇功能

2)11條指令表

  
指令
  
  
指令碼
  
  
說明
  
  
指令周期
  
fosc=250kHz
  
  
RS
  
  
R/W
  
  
DB7
  
  
DB6
  
  
DB5
  
  
DB4
  
  
DB3
  
  
DB2
  
  
DB1
  
  
DB0
  
  
清屏
  
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
清除屏幕,置AC為0,光標(biāo)回位。
  
  
1.64ms
  
  
光標(biāo)返回
  
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
*
  
  
DDRAM地址為0,顯示回原位,DDRAM內(nèi)容不變.
  
  
1.64ms
  
  
設(shè)置輸入
  
方式
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
I/D
  
  
S
  
  
設(shè)置光標(biāo)移動方向并指定顯示是否移動。
  
  
40µs
  
  
顯示開關(guān)
  
  
0
  
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
D
  
  
C
  
  
B
  
  
設(shè)置顯示開或關(guān)D、光標(biāo)開關(guān)C、光標(biāo)所在字符閃爍B.
  
  
40µs
  
  
移位
  
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
S/C
  
  
R/L
  
  
*
  
  
*
  
  
移動光標(biāo)及整體顯示,同時不改變DDRAM內(nèi)容。
  
  
40µs
  
  
功能設(shè)置
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
DL
  
  
N
  
  
F
  
  
*
  
  
*
  
  
設(shè)置接口數(shù)據(jù)位數(shù)DL、顯示行數(shù)L、字符字體F。
  
  
40µs
  
  
CGRAM
  
地址設(shè)置
  
  
0
  
  
0
  
  
0
  
  
1
  
  
ACG
  
  
設(shè)置CGRAM地址。設(shè)置后發(fā)送接收數(shù)據(jù)。
  
  
40µs
  
  
DDRAM
  
地址設(shè)置
  
  
0
  
  
0
  
  
1
  
  
ADD
  
  
設(shè)置DDRAM地址。設(shè)置后發(fā)送接收數(shù)據(jù)。
  
  
40µs
  
  
忙標(biāo)志/讀地址計數(shù)器
  
  
0
  
  
1
  
  
BF
  
  
AC
  
  
讀忙標(biāo)志BF標(biāo)志正在執(zhí)行內(nèi)部操作并讀地址計數(shù)器內(nèi)容。
  
  
0µs
  
  
CGRAM/DDRAM數(shù)據(jù)寫
  
  
1
  
  
0
  
  
寫數(shù)據(jù)
  
  
從CGRAM或DDRAM寫數(shù)據(jù)。
  
  
40µs
  
  
CGRAM/DDRAM數(shù)據(jù)讀
  
  
1
  
  
1
  
  
讀數(shù)據(jù)
  
  
從CGRAM或DDRAM讀數(shù)據(jù)。
  
  
40µs
  
  
  
  
  
  
  
  
  
  
  
  
I/D=1:增量方式;I/D=0:減量方式
  
S=1:移位
  
S/C=1:顯示移位;S/C=0:光標(biāo)移位
  
R/L=1:右移;R/L=0:左移
  
DL=1:8位;DL=0:4位
  
N=1:2行;N=0:1行
  
F=1:5  x 10字體  F=0:5 x 7字體
  
BF=1:執(zhí)行內(nèi)部操作;BF=0可接收指令
  
  
DDRAM:顯示數(shù)據(jù)RAM
  
CGRAM:字符發(fā)生器RAM
  
ACG:CGRAM地址
  
ADD:DDRAM地址及光標(biāo)
  
      地址
  
AC:地址計數(shù)器,用于
  
     DDRAM和CGRAM
  
  
執(zhí)行周期主頻改變而改變。
  
例如當(dāng)fcp或
  
fosc=270KHZ
  
時:40μs  x
  
250/270=37μs
  

                      3   11條指令表

3)標(biāo)準(zhǔn)字符庫

  
High 4BIT
  
  
MSB
  
  
2
  
  
3
  
  
4
  
  
5
  
  
6
  
  
7
  
  
8
  
  
A
  
  
B
  
  
C
  
  
D
  
  
E
  
  
F
  
  
LOW 4BIT
  
  
RAM0000
  
  
0
  
  
(1)
  
  
  
  
0
  
  
@
  
  
P
  
  
ˋ
  
  
p
  
  
  
  
  
  
  
  
  
  
  
  
α
  
  
p
  
  
1
  
  
(2)
  
  
!
  
  
1
  
  
A
  
  
Q
  
  
a
  
  
q
  
  
  
  
  
  
  
  
  
  
  
  
ä
  
  
q
  
  
2
  
  
(3)
  
  
  
  
2
  
  
B
  
  
R
  
  
b
  
  
r
  
  
  
  
  
  
  
  
  
  
  
  
β
  
  
θ
  
  
3
  
  
(4)
  
  
#
  
  
3
  
  
C
  
  
S
  
  
c
  
  
s
  
  
  
  
  
  
  
  
  
  
  
  
ε
  
  
  
  
4
  
  
(5)
  
  
$
  
  
4
  
  
D
  
  
T
  
  
d
  
  
t
  
  
  
  
、
  
  
  
  
  
  
  
  
μ
  
  
Ω
  
  
5
  
  
(6)
  
  
%
  
  
5
  
  
E
  
  
U
  
  
e
  
  
u
  
  
  
  
  
  
  
  
  
  
  
  
σ
  
  
ü
  
  
6
  
  
(7)
  
  
&
  
  
6
  
  
F
  
  
V
  
  
f
  
  
v
  
  
  
  
  
  
  
  
  
  
  
  
ρ
  
  
Σ
  
  
7
  
  
(8)
  
  
  
  
7
  
  
G
  
  
W
  
  
g
  
  
w
  
  
  
  
  
  
  
  
  
  
  
  
g
  
  
π
  
  
8
  
  
(1)
  
  
(
  
  
8
  
  
H
  
  
X
  
  
h
  
  
x
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
9
  
  
(2)
  
  
)
  
  
9
  
  
I
  
  
Y
  
  
i
  
  
y
  
  
  
  
  
  
  
  
  
  
  
  
¨
  
  
y
  
  
A
  
  
(3)
  
  
*
  
  
:
  
  
J
  
  
Z
  
  
j
  
  
z
  
  
  
  
  
  
  
  
  
  
  
  
j
  
  
  
  
B
  
  
(4)
  
  
+
  
  
;
  
  
K
  
  
[
  
  
k
  
  
{
  
  
  
  
  
  
  
  
  
  
  
  
`
  
  
  
  
C
  
  
(5)
  
  
,
  
  
<
  
  
L
  
  
&yen;
  
  
l
  
  
|
  
  
  
  
  
  
  
  
  
  
  
  
φ
  
  
  
  
D
  
  
(6)
  
  
-
  
  
=
  
  
M
  
      
m
  
  
}
  
  
  
  
  
  
  
  
  
  
  
  
  
  
÷
  
  
E
  
  
(7)
  
  
.
  
  
>
  
  
N
  
  
^
  
  
n
  
  
  
  
  
  
  
  
  
  
  
  
  
  
_n
  
  
  
  
F
  
  
(8)
  
  
/
  
  
?
  
  
O
  
  
_
  
  
o
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

                   4 標(biāo)準(zhǔn)字符庫

DDRAM就是顯示數(shù)據(jù)RAM, 用來寄存待顯示的字符代碼,共80個字節(jié),其地址和對應(yīng)的關(guān)系如下表:也就是說在屏幕上第一行第一列要顯示“A“字,就要向DDRAM中的00H處寫入A的代碼就行,但具體的寫入要按LCD1602的指令格式來進(jìn)行,一行有40個地址,我們就用前16個就行,第二行也同樣用前16個就行。對應(yīng)如下:

  
        顯 示 位 序 號
  
  
1    2    3      4    5  ……………………  40
  
  
  DD RAM
  
地 址(HEX)
  
  
第 一 行
  
  
00   01   02    03   04  ..………………..  27
  
  
第 二 行
  
  
40   41   42    43   44  …………………..  67
  

                5 顯示位與DDRAM地址的對應(yīng)關(guān)系

1602LCD顯示字符的過程

。


在這里要說明的是:

1)      要用1602LCD顯示字符必須解決3個問題:(1)待顯示字符ASCII標(biāo)準(zhǔn)碼產(chǎn)生;(2)液晶顯示模式的設(shè)置;(3)字符顯示位置的指定

2)      若想在00H處顯示數(shù)據(jù)的話,則必須將00H加上80H,即0x00H+0x80H,若要在01H處顯示數(shù)據(jù),也必須加0x80H, 例如要將某字符顯示在第2行第5列,則確定地址的指令代碼應(yīng)為80H+44H=C4H。依次類推

3)      CGRAM是用戶自定義的字符圖形,可以定義8

4)      LCD1602只有11條指令,學(xué)會使用這11條指令,就可以輕松控制。

5)      要讓液晶顯示字符,必須對有無光標(biāo)、光標(biāo)的移動方向、光標(biāo)是否閃爍及字符的移動方向等進(jìn)行設(shè)置,才能獲得所需的顯示效果。1602液晶顯示模式的設(shè)置是通過控制指令對內(nèi)部的控制器控制而實現(xiàn)的,常用的控制指令見表8-5.例如,要將顯示模式設(shè)置為“16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)接口”,只要向液晶模塊寫二進(jìn)制指令代碼00111 000B,即16進(jìn)制代碼38H就可以了。

6)      LCD是一個慢顯示器件,所以在寫每條指令前一定要先讀LCD的忙碌狀態(tài)。如果LCD正忙于處理其他指令,就等待;如果不忙,再執(zhí)行寫指令。為此,1602LCD專門設(shè)了一個忙碌標(biāo)志位BF,該位鏈接在8位雙向數(shù)據(jù)線的DB7位上。如果BF為低電平“0”,表示LCD不忙;如果BF為高電平“1”,則表示LCD處于忙碌狀態(tài),需要等待。假定1602LCD8位雙向數(shù)據(jù)線(DB0~DB7)是通過單片機(jī)的P0口進(jìn)行數(shù)據(jù)傳遞的,那么只要檢測P0口的P0.7引腳電平(DBP0.7)就可以知道忙碌標(biāo)志位BF的狀態(tài)

4. 對照上面的表格,我們對11條指令作如下分解:

DDRAM的內(nèi)容和地址操作,HD44780的指令集及其設(shè)置說明,共有11條指令:1)清屏指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入空白的字符<2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;
<3>
將地址計數(shù)器(AC)的值設(shè)為0。 2)光標(biāo)歸位指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg功能:<1> 把光標(biāo)撤回到顯示器的左上方;
<2>
把地址計數(shù)器(AC)的值設(shè)置為0;
<3>
保持DDRAM的內(nèi)容不變 3.輸入模式設(shè)置指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。參數(shù)設(shè)定的情況如下所示:
I/D=0
寫入新數(shù)據(jù)后光標(biāo)左移    I/D=1寫入新數(shù)據(jù)后光標(biāo)右移
S=0
寫入新數(shù)據(jù)后顯示屏不移動   S=1寫入新數(shù)據(jù)后顯示屏整體右移或左移,以得到光標(biāo)不移動而屏幕移動 效果 4)顯示開關(guān)控制指令file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下:
      D=0顯示功能關(guān)             D=1顯示功能開
      C=0無光標(biāo)                 C=1有光標(biāo)
      B=0光標(biāo)不閃爍             B=1光標(biāo)閃爍 5.設(shè)定顯示屏或光標(biāo)移動方向指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg
S/C   R/L 設(shè)定情況
00光標(biāo)左移1格,且AC值減1
01光標(biāo)右移1格,且AC值加1
10顯示器上字符全部左移一格,但光標(biāo)不動
11顯示器上字符全部右移一格,但光標(biāo)不動

6.功能設(shè)定指令 (非常重要的指令)file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpg   功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:
         DL=0 數(shù)據(jù)總線為4      DL=1數(shù)據(jù)總線為8
         N=0  顯示1            N=1  顯示2
         F=0  5×7點(diǎn)陣/每字符   F=1 5×10點(diǎn)陣/每字符7.設(shè)定CGRAM地址指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpg功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址8.設(shè)定DDRAM地址指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址。 (注意這里我們送地址的時候應(yīng)該是0x80+Address,這也是前面說到寫地址命令的時候要加上0x80的原因) 9.讀取忙信號或AC地址指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg功能:<1> 讀取忙碌信號BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時無法接收單片機(jī)送來的數(shù)據(jù)或指令; 當(dāng)BF=0時,液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令; <2> 讀取地址計數(shù)器(AC)的內(nèi)容。 10.數(shù)據(jù)寫入DDRAMCGRAM指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符;      <2> 將用戶自己設(shè)計的圖形存入CGRAM。   11)從CGRAMDDRAM讀出數(shù)據(jù)的指令 file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg功能:讀取DDRAMCGRAM中的內(nèi)容。
基本操作時序:
讀狀態(tài)    輸入:RS=LRW=H,E=H    輸出:DB0DB7=狀態(tài)字
寫指令    輸入:RS=L,RW=L,E=下降沿脈沖,DB0DB7=指令碼
輸出:無
讀數(shù)據(jù)   輸入:RS=HRW=H,E=H    輸出:DB0DB7=數(shù)據(jù)
寫數(shù)據(jù)   輸入:RS=HRW=L,E=下降沿脈沖,DB0DB7=數(shù)據(jù)
輸出:無說明:平時我們只用到常用的3—4條指令,學(xué)生不需去記錄,只需以后做項目時用到去查這些指令即可。5.讀寫操作時序圖:
1)讀操作時序(用的不多)

file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg2)寫操作時序

file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg



下面我們親自操作LCD1602,在我們是實驗板上實現(xiàn)如下描述

6. 舉例說明

1LCD循環(huán)右移顯示"Welcome to china"

2)實驗電路圖

file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg

注意:1602VR 是1602液晶的對比度調(diào)節(jié)電位器,如果液晶不顯示或者顯示文字不清晰,可以調(diào)節(jié)此電位器,來達(dá)到最理想的顯示效果。

15腳是背光燈正極引腳 接到實驗的JPBG跳線端 通過JPBG來控制背光燈的亮滅。

3 )操作步驟

JPP0跳線端的跳線帽拔掉 以免干擾1602液晶顯示

JPSMG 數(shù)碼管控制跳線拔掉 使數(shù)碼管停止工作。

插上1602LCD液晶

JPBG液晶背光跳線插上

4) 液晶顯示流程圖

file:///C:/Users/d/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg

5 C語言源程序

//LCD循環(huán)右移顯示"Welcome to China"#include<reg52.h>    //包含單片機(jī)寄存器的頭文件#include<intrins.h>  //包含_nop_()函數(shù)定義的頭文件sbit RS=P2^0;    //寄存器選擇位,將RS位定義為P2.0引腳sbit RW=P2^1;    //讀寫選擇位,將RW位定義為P2.1引腳sbit E=P2^2;    //使能信號位,將E位定義為P2.2引腳sbit BF=P0^7;    //忙碌標(biāo)志位,,將BF位定義為P0.7引腳unsigned char code string[ ]={"Welcome to China"}; /*****************************************************函數(shù)功能:延時1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是1毫秒***************************************************/void delay1ms(){   unsigned char i,j;          for(i=0;i<10;i++)      for(j=0;j<33;j++)       ;            } /*****************************************************函數(shù)功能:延時若干毫秒入口參數(shù):n***************************************************/ void delay(unsigned char n) {   unsigned char i;    for(i=0;i<n;i++)       delay1ms(); }/*****************************************************函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙***************************************************/ unsigned char BusyTest(void)  {    bit result;    RS=0;       //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)    RW=1;    E=1;        //E=1,才允許讀寫    _nop_();   //空操作    _nop_();    _nop_();     _nop_();   //空操作四個機(jī)器周期,給硬件反應(yīng)時間          result=BF;  //將忙碌標(biāo)志電平賦給result    E=0;    return result;  }/*****************************************************函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate***************************************************/void WriteInstruction (unsigned char dictate){       while(BusyTest()==1); //如果忙就等待    RS=0;        //根據(jù)規(guī)定,RSR/W同時為低電平時,可以寫入指令    RW=0;       E=0;             //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,                     // 就是讓E01發(fā)生正跳變,所以應(yīng)先置"0"    _nop_();    _nop_();             //空操作兩個機(jī)器周期,給硬件反應(yīng)時間    P0=dictate;            //將數(shù)據(jù)送入P0口,即寫入指令或地址    _nop_();    _nop_();    _nop_();    _nop_();               //空操作四個機(jī)器周期,給硬件反應(yīng)時間    E=1;                   //E置高電平    _nop_();    _nop_();    _nop_();    _nop_();               //空操作四個機(jī)器周期,給硬件反應(yīng)時間      E=0;      //當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 }/*****************************************************函數(shù)功能:指定字符顯示的實際地址入口參數(shù):x***************************************************/ void WriteAddress(unsigned char x) {WriteInstruction(x|0x80);//顯示位置的確定方法規(guī)定為"80H+地址碼x" }/*****************************************************函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII)寫入液晶模塊入口參數(shù):y(為字符常量)***************************************************/ void WriteData(unsigned char y) {    while(BusyTest()==1);        RS=1;           //RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)      RW=0;      E=0;            //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,                       // 就是讓E01發(fā)生正跳變,所以應(yīng)先置"0"      P0=y;           //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊      _nop_();      _nop_();      _nop_();     _nop_();       //空操作四個機(jī)器周期,給硬件反應(yīng)時間      E=1;          //E置高電平      _nop_();      _nop_();      _nop_();    _nop_();        //空操作四個機(jī)器周期,給硬件反應(yīng)時間    E=0;       //當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 }/*****************************************************函數(shù)功能:對LCD的顯示模式進(jìn)行初始化設(shè)置***************************************************/void LcdInitiate(void){   delay(15);  //延時15ms,首次寫指令時應(yīng)給LCD一段較長的反應(yīng)時間 WriteInstruction(0x38)//顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口    delay(5);   //延時5ms     WriteInstruction(0x38);    delay(5);    WriteInstruction(0x38);    delay(5);   WriteInstruction(0x0f);//顯示模式設(shè)置:顯示開,有光標(biāo),光標(biāo)閃爍    delay(5);    WriteInstruction(0x06);  //顯示模式設(shè)置:光標(biāo)右移,字符不移    delay(5);    WriteInstruction(0x01);  //清屏幕指令,將以前的顯示內(nèi)容清除    delay(5); }void main(void)            //主函數(shù) {  unsigned char i;  LcdInitiate();         //調(diào)用LCD初始化函數(shù)    delay(10);  while(1)     {       WriteInstruction(0x01);//清顯示:清屏幕指令      WriteAddress(0x00);  // 設(shè)置顯示位置為第一行的第5個字                 i = 0;           while(string != '\0')                   {                                            WriteData(string);                          i++;                        delay(150);                   }               for(i=0;i<4;i++)               delay(250);                              }                                }

7.實時演練操作

   演練11LCD第一行顯示: CHINESE            

LCD第二行顯示: NEWYEAR                                          

2)先將兩行字符寫入DDRAM中,然后從右至左逐字移出顯示。                  

3)在指定位置停留1.6秒后,閃爍2次,清屏。                              

4)反復(fù)循環(huán)上述顯示方式。                                                     

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

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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