1、1602液晶硬件接口介紹
1602液晶技術參數
說明:(1) 工作電流:在5v工作電壓下液晶的工作電流為2mA,僅僅指液晶,不包括背光。
1602液晶接口原理圖及引腳功能
說明:(1) 引腳3:液晶顯示偏壓信號。用來調整顯示黑點與不顯示黑點的對比度。(2) 4引腳:數據命令選擇引腳。置高電平1,為讀寫數據,置低電平0,為讀寫命令。(3) 5引腳:讀寫選擇引腳。置高電平1,為讀數據或命令,置低電平0,為寫數據或命令。(4) 6引腳:使能信號引腳。高電平有效,低電平無效。(5) 7~14引腳:8個數據引腳。因為總電流不大,直接接到PO口上,不用通過74HC245。
2、1602的讀寫時序介紹
液晶內部自帶80字節的顯示RAM,用來存儲發送的數據,內部RAM如下圖
說明:(1) 1603字符液晶是顯示字符的,字符要跟ASCII碼字符表對應,比如液晶顯示字符’1’, 就要向對應地址發送數據字符‘1’或十六進制31,或十進制49。(2) 第一行的地址0x00 ~ 0x27,第二行的地址0x40 ~ 0x67。第一行的0x00 ~ 0x0F與液晶第一行16個字符顯示地址對應。第二行的0x40 ~ 0x4F與液晶第二行16個字符顯示地址對應.每行多出來的地址用于顯示移動字幕。
1602液晶基本操作有四個時序,理解,運用1602液晶查閱即可
讀狀態:RS = L(0), R/W = H(1),E= H(1);
單片機讀1602液晶的狀態,是通過讀取液晶里的狀態字字節內容,來了解液晶內部情況,液晶狀態字字節如下表12-5,
說明:(1) 狀態字節有八位,最高位表示當前液晶是否在 ‘忙’ (給液晶寫數據或命令,液晶需先保存到緩存,然后再寫到液晶內部寄存器或RAM中,這個需要一定時間),1表示液晶在忙,在忙時禁止讀者讀寫數據或命令操作,0則可以。低七位表示當前數據指針的位置,一般低七位很少用到。(2) 單片機讀外設狀態時,需要保證接收狀態信息的引腳為高電平。所以在讀取液晶狀態時,P0口要先保證為高電平。(3) 因其他外設和液晶都共用P0口總線,若讀完液晶狀態仍保持液晶E使能信號引腳為高電平,則液晶會繼續輸出狀態值,因狀態值在P0口輸入,將會干擾到其他外設的P0口總線的數據,所以讀完液晶狀態要拉低E使能信號引腳來釋放P0總線。
以上說明,在單片機讀取液晶狀態程序部分體現,見下程序。
#define LCD1602_DB P0
sbit LCD1602_RS = P1^0;//引腳聲明
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;
//等待液晶準備好
void LcdWaitReady()
{
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do{
LCD1602_E = 1;
sta = LCD1602_DB; //讀取狀態字
LCD1602_E = 0;//bit7等于1表示液晶正在忙,重復檢測直到其等于0為止
}while(sta & 0x80);
}
讀數據:RS = H(1),RW = H(1),E = H(1), 讀數據不常用。
寫指令:RS = L(0),RW = L(0),D0 ~ D7 = 指令碼,E = 高脈沖。
說明:(1) E = 高電平:E使能引腳先從低到高,再從高到低,形成一個高脈沖。
寫數據:RS = H(1),RW = L(0),D0 ~ D7 = 指令碼,E = 高脈沖
說明:(1) 液晶內部有一個指針,它指向哪里,我們寫的數據就會送到相應的那個地址。
3、1602液晶的指令介紹
單片機給液晶寫指令有5種設置,理解,查閱1602液晶手冊
顯示模式設置
說明:固定0x38即可
顯示開/關以及光標設置
數據指針及移動設置
清屏指令
RAM地址設置指令
說明:該指令最高位為1,低七位為RAM地址,十六進制0x80+地址碼,在程序中用 (0x80 | 地址碼)來表示該指令。在讀寫程序中先設置地址,然后進行數據的讀寫操作。
4、1602液晶簡單示例
//160LCD顯示指定字符
#include #define Lcd1602_DB P0 sbit Lcd1602_RS = P1^0; sbit Lcd1602_RW = P1^1; sbit Lcd1602_E = P1^5; void InitLcd1602(); void Lcdwritecmd(unsigned char cmd); void LcdWaitReady(); void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str); void Lcdcursor(unsigned char x, unsigned char y); void LcdWritedat( unsigned char str); void main() { InitLcd1602(); LcdShowstr(5, 0, "L Z Y"); LcdShowstr(3, 1, "come on!!!"); while(1); } //初始化1602液晶 void InitLcd1602() { Lcdwritecmd(0x38);//16*2顯示,5*7點陣,8位數據口 Lcdwritecmd(0x0C); //顯示器開,光標關閉 Lcdwritecmd(0x06);//文字不動,地址自動加+1 Lcdwritecmd(0x01);//清屏 } //向LCd1602寫入一個一字節命令,cmd為待寫入命令值 void Lcdwritecmd(unsigned char cmd) { LcdWaitReady(); Lcd1602_RS = 0; Lcd1602_RW = 0; Lcd1602_DB = cmd; Lcd1602_E = 1; Lcd1602_E = 0; } //等待液晶準備好 void LcdWaitReady() { unsigned char sta; Lcd1602_DB = 0xFF; Lcd1602_RS = 0; Lcd1602_RW = 1; do{ Lcd1602_E = 1; sta = Lcd1602_DB;//讀取狀態字 Lcd1602_E = 0; }while(sta & 0x80);//bit7等于1表示液晶正忙,重復檢測直到其等于0為止 } //在液晶上顯示字符串,(x,y)為對應屏幕上的起始坐標,str為字符指針 void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str) { Lcdcursor(x, y);//設置起始地址 while(*str != '
主站蜘蛛池模板:
阜城县|
海原县|
鄂州市|
修文县|
桓台县|
临江市|
青铜峡市|
滕州市|
沾益县|
昆山市|
什邡市|
朝阳县|
陆良县|
苗栗县|
九龙坡区|
嘉善县|
绥阳县|
措勤县|
磴口县|
双流县|
曲靖市|
淅川县|
泾阳县|
西乡县|
新和县|
讷河市|
永泰县|
肇庆市|
石泉县|
长宁县|
靖边县|
苍溪县|
汉阴县|
都江堰市|
辽宁省|
重庆市|
海口市|
武川县|
东兴市|
东乡族自治县|
梁河县|