基于51單片機LCD1602顯示
要在1602上顯示字符,要大概明白1602液晶顯示屏作業原理,
一般的液晶顯示幕(Liquid Crystal Display, LCD) 的主要原理是以電流刺激液晶分子產生點、線、面并配合背部燈管構成畫面,
1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊,1602LCD是指顯示的內容16×2,即最多只能顯示32個字符,它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形,5X7點陣可以看做5行7列等間距分布的led燈,每一個燈相當于一個像素點,你要表達的字母或者數字都是由這些像素點組成的,只需控制燈的亮滅就可以了,
一般1602一共有16位引腳,(引腳作用如下表)
| 編號 | 符號 | 引腳作用 | 編號 | 符號 | 引腳作用 | |
|---|---|---|---|---|---|---|
| 1 | VSS | 電源正級 | 9 | D2 | 資料口 | |
| 2 | VDD | 電源地 | 10 | D3 | 資料口 | |
| 3 | VO | 液晶顯示對比度調節(即亮度需要接滑動電阻) | 11 | D4 | 資料口 | |
| 4 | RS | 資料命令選擇端(H\L) | 12 | D5 | 資料口 | |
| 5 | RW | 讀寫選擇端(H\L) | 13 | D6 | 資料口 | |
| 6 | E | 使能端 | 14 | D7 | 資料口 | |
| 7 | D0 | 資料口 | 15 | BLA | 背光電源正極 | |
| 8 | D1 | 資料口 | 16 | BLK | 背光電源負極 |
明白了引腳后,就可以將引腳鏈接到單片機用單片機I\O口來控制每一個引腳來讓1602顯示字符,編程用到的主要管腳不過三個,分別為:RS(資料命令選擇端),R/W(讀寫選擇端),E(使能信號);編程便主要圍繞這三個管腳展開按照時序進行初始化,寫命令,寫資料,基本操作如下:
(1) 讀狀態:輸入:RS=L, RW=H,E=H 輸出:D0-D7=狀態字,
(2) 寫指令:輸入:RS=L, RW=L,D0-D7=指令碼,E=H,輸出:無,
(3) 讀資料:輸入:RS=H, RW=H,E=H 輸出:D0~D7=資料,
(4) 寫資料:輸入:RS=L,RW=H,D0-D7=資料,E=高脈沖,輸出:無,
由于此次是讓1602顯示我們讓1602顯示的字符所以使用向1602寫指令,寫資料具體操做代碼如下:
//寫指令代碼
void write_com(uint com){
E=0;
RS=0;
P0=com;
delay_ms(5);//軟體延時
E=1;
delay_ms(5);
E=0;
}
//寫資料代碼
void write_date(uint date){
E=0;
RS=1;
P0=date;
delay_ms(5);//軟體延時
E=1;
delay_ms(5);
E=0;
}
寫指令就是向1602發送設定指令,如在那一行顯示,從這一行的什么位置開始,顯示時是滾動顯示還是靜態顯示,
寫資料就是將我們想要顯示的字符用回圈的方式寫入1602,
顯示指令設定(具體如下表)
| 指令碼 | 功能 |
|---|---|
| 0 0 1 1 1 0 0 0 | 設定16X2顯示,5X7點陣,8位資料口 |
| 0 0 0 0 1 D C B | D=1開顯示: D=0關顯示; |
| C=1顯示游標: C=0不顯示游標 | |
| B=1游標閃爍; B=0 游標不顯示 | |
| 0 0 0 0 0 1 N S | N=1當讀或寫一個字符后地址指標加1,且游標加1 |
| N=0當讀或寫一個字符后地址指標減1,且游標減1 | |
| S=1,當寫一個字符時,整屏顯示左移(N=1)或右移(N=0), 以得到游標不移動而螢屏移動的效果 | |
| S=0,當寫一個字符時,整屏顯示不移動 | |
| 0 0 0 1 0 0 0 0 | 游標左移 |
| 0 0 0 1 0 1 0 0 | 游標右移 |
| 0 0 0 1 1 0 0 0 | 整屏左移,同時游標跟隨移動 |
| 0 0 0 1 1 1 0 0 | 整屏右移,同時游標跟隨移動 |
將以上所需要的指令通過寫指令函式寫入1602來設定1602就是1602初始化,這次我們要讓1602顯示一行字符,初始化代碼為:
void write_init(){
E = 0;
write_com(0x38);//開顯示
write_com(0x0c);//開顯示不顯示游標
write_com(0x06);//寫一個字符指標加1
write_com(0x01);//清屏
write_com(0x80);//設定資料指標起點
}
將以上設定好然后就可以用寫資料將想要顯示的顯示在1602上了
代碼如下
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P3^1;
sbit E=P3^2;
uchar code table[]="Welcome to china";
void delay(ms){
uint i,j;
for(i=0;i<ms;i++){
for(j=0;j<123;j++){
}
}
}
void write_com(uchar com){
E=0;
RS=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
void write_data(uchar dat){
E=0;
RS=1;
P0=dat;
delay(5);
E=1;
delay(5);
E=0;
}
void init(){
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main(){
uint i;
init();
write_com(0x80+0x40);
for(i=0;i<16;i++){
write_data(table[i]);
delay(5);
}while(1);//這里是防止1602一閃一閃的顯示就讓代碼跑一邊在顯示完后就停在那
}
仿真結果如下

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/244277.html
標籤:其他
下一篇:計組 復習知識點
