51單片機:1602液晶顯示屏
1602是一種液晶顯示器,而液晶顯示器通常是根據顯示字符的行數、列數來命名的,所以勒,1602的意思便是每行顯示16個字符,一共可以顯示2行,且只能顯示漢字(內置ASCII字符集庫,只有並行接口)。
1602 含3個控制端,分別是:RS(數據/命令選擇端)、RW(讀寫控制端)、E(使能信號)
特別注意E使能信號:給E一個高脈衝時。會將數據送入液晶控制器,完成寫操作,不管是寫指令還是數據都是同理。
所以在程序編寫過程中要有:
en = 1; delay(); en = 0;
通過控制三個控制端口的高低電平,使1602分別進行相應的操作;
控制器內部帶有80B的RAM緩衝區,對應關係如圖。向圖中紅色區域內寫入數據時都可以直接顯示出來,當寫入藍色框框時則必須通過移屏指令將它們移入可顯示區域纔可正常顯示。
指令說明:直接看說明書即可
數據控制:
數據指針設置:控制器內部舍友一個數據地址指針,用戶可以通過它們訪問內部的全部80RAM
注意!指令碼是80H + 地址碼,就像你想訪問RAM地址映射圖裏的40號存儲空間,則在寫代碼的時候應該寫成0x80+0x40
其它指令:直接搬手冊了
時序圖:
下面放一個例子:在1602上顯示Hello MCU!和WWW.KIM.COM
#include <reg52.h>
#define uchar unsigned char
//typedef unsigned char uchar;
typedef unsigned int uint;
// 待打印的字符集
uchar code table[] = "Hello MCU!";
uchar code table1[] = "WWW.KIM.COM";
sbit en = P2^7;
sbit rs = P2^6;
sbit rw = P2^5;
void delay(uint z){
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com){
rs = 0;// 寫指令
P0 = com;
delay(5);
// 高脈衝瞬間讀入
en = 1;
en = 0;
}
void init(){
rw = 0;
en =0;
// 使能端爲0,寫指令
write_com(0x38);// 設置顯示方式
write_com(0x0c);// 開顯示,包括光標和閃爍
write_com(0x06);// 寫一個字符後,地址指針自動加一
write_com(0x01);// 顯示請0,數據指針清0
}
void write_data(uchar date){
rs = 1;
P0 = date;
delay(5);
en = 1;
en = 0;
}
void main(){
uchar num = 0;
init();
write_com(0x80);
for(num=0;num<10;num++){
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<11;num++){
write_data(table1[num]);
delay(5);
}
while(1);
}
運行圖: