LCD1602液晶顯示完全資料
一、關(guān)于LCD1602:
在編寫LCD1602程序前,我們必須了解其手冊(cè)上一些非常重要的信息,如果這些信息不能理解透徹,編程可能會(huì)遇到或多或少的問題,在此先大致歸納幾點(diǎn)。
1.管腳:
1602共16個(gè)管腳,但是編程用到的主要管腳不過三個(gè),分別為:RS(數(shù)據(jù)命令選擇端),R/W(讀寫選擇端),E(使能信號(hào));以后編程便主要圍繞這三個(gè)管腳展開進(jìn)行初始化,寫命令,寫數(shù)據(jù)。
以下具體闡述這三個(gè)管腳:
RS為寄存器選擇,高電平選擇數(shù)據(jù)寄存器,低電平選擇指令寄存器。
R/W為讀寫選擇,高電平進(jìn)行讀操作,低電平進(jìn)行寫操作。
E端為使能端,后面和時(shí)序聯(lián)系在一起。
除此外,D0~D7分別為8位雙向數(shù)據(jù)線。
RS | R/W | 操作說明 |
0 | 0 | 寫入指令碼D0~D7 |
0 | 1 | 讀取輸出的D0~D7狀態(tài)字 |
1 | 0 | 寫入數(shù)據(jù)D0~D7 |
1 | 1 | 從D0~D7讀取數(shù)據(jù) |
注:關(guān)于E=H脈沖——開始時(shí)初始化E為0,然后置E為1,再清0.
讀取狀態(tài)字時(shí),注意D7位,D7=1,禁止讀寫操作;D7=0,允許讀寫操作;
所以對(duì)控制器每次進(jìn)行讀寫操作前,必須進(jìn)行讀寫檢測(cè)。(即后面的讀忙子程序)
3.指令集:
LCD_1602 初始化指令小結(jié):
0x38 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
0x01 清屏
0x0F 開顯示,顯示光標(biāo),光標(biāo)閃爍
0x08 只開顯示
0x0e 開顯示,顯示光標(biāo),光標(biāo)不閃爍
0x0c 開顯示,不顯示光標(biāo)
0x06 地址加1,當(dāng)寫入數(shù)據(jù)的時(shí)候光標(biāo)右移
0x02 地址計(jì)數(shù)器AC=0;(此時(shí)地址為0x80) 光標(biāo)歸原點(diǎn),但是DDRAM中斷內(nèi)容不變
0x18 光標(biāo)和顯示一起向左移動(dòng)
4.顯示地址:
LCD1602內(nèi)部RAM顯示緩沖區(qū)地址的映射圖,00~0F、40~4F分別對(duì)應(yīng)LCD1602的上下兩行的每一個(gè)字符,只要往對(duì)應(yīng)的RAM地址寫入要顯示字符的ASCII代碼,就可以顯示出來。
5.讀寫時(shí)序:
時(shí)序圖1602手冊(cè)中有,這里不引用了。時(shí)序圖很重要,編程就是根據(jù)時(shí)序圖設(shè)置寄存器,讓LCD工作。
二、LCD1602程序編寫流程:
LCD1602在了解完以上信息后便可以編寫,這里我們把程序分為以下幾步:
1.定義LCD1602管腳,包括RS,R/W,E。這里定義是指這些管腳分別接在單片機(jī)哪些I/O口上。
現(xiàn)舉例如下:
sbit EN=P3^4;
sbit RS=P3^5;
sbit RW=P3^6;
2.顯示初始化,在這一步進(jìn)行初始化及設(shè)置顯示模式等操作,包括以下步驟:
設(shè)置顯示方式
延時(shí)
清理顯示緩存
設(shè)置顯示模式
通常推薦的初始化過程如下:
延時(shí)15ms
寫指令38H
延時(shí)5ms
寫指令38H
延時(shí)5ms
寫指令38H
延時(shí)5ms
注:以上寫38H指令可以看情況省略1~2步
(以上都不檢測(cè)忙信號(hào))
(以下都要檢測(cè)忙信號(hào))
寫指令38H
寫指令08H 關(guān)閉顯示
寫指令01H 顯示清屏
寫指令06H 光標(biāo)移動(dòng)設(shè)置
寫指令0cH 顯示開及光標(biāo)設(shè)置
3.設(shè)置顯示地址(寫顯示字符的位置)。
4.寫顯示字符的數(shù)據(jù)。
三、LCD1602各子程序模塊及主程序編寫:
現(xiàn)在按照上面編寫程序的流程,給出各子程序模塊及主程序的例子。
1.頭文件,宏定義,定義管腳等:
#includereg52.h>
#include string.h>
#define uchar unsigned char
#define uint unsigned int
sbit EN=P3^4;
sbit RS=P3^5;
sbit RW=P3^6;
uchar code table0[]={"QQ:545699636"}; //此條語句為顯示字符串時(shí)定義的字符串?dāng)?shù)組
2.LCD1602基本初始化子程序:
void LCD1602()
{
EN=0;
RS=1;
RW=1;
P0=0xff; //這里P0為與LCD D0~D7相連的I/O口
}
評(píng)論