51单片机LCD1602显示
生活随笔
收集整理的這篇文章主要介紹了
51单片机LCD1602显示
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.原理:
?1602 液晶也叫 1602 字符型液晶,它能顯示 2 行字符信息,每行又能顯示 16 個字符。
?它是一種專門用來顯示字母、數(shù)字、符號的點(diǎn)陣型液晶模塊。它是由若 干個 5x7 或者?
?5x10 的點(diǎn)陣字符位組成,每個點(diǎn)陣字符位都可以用顯示一個字符, 每位之間有一個點(diǎn)
?距的間隔,每行之間也有間隔,起到了字符間距和行間距的作 用,正因為如此,所以它
?不能很好的顯示圖片
? ?(1)引腳:
(2)其地址 和屏幕的對應(yīng)關(guān)系如下: ? ? ??? 要顯示字符時 要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,例如第二行第一個字 符的地址是 40H,那么是否直接寫入 40H 就可以將光標(biāo)定位在第二行第一個字 符的位置呢?這樣不行,因為寫入顯示地址時要求最高位 D7 恒定為高電平 1 所以實際寫入的數(shù)據(jù)應(yīng)該是 01000000B(40H)+10000000B(80H)=11000000B(C0H)也就是說:第一行地址為:0x40? ?第二行地址為:0xC0
(3)常用指令:
? ?清屏置零:0x01
1.清除液晶顯示器,即將 DDRAM 的內(nèi)容全部填入"空白"的 ASCII 碼 20H; 2.光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; 3.將地址計數(shù)器(AC)的值設(shè)為 0。?
? 模式設(shè)置指令 :
功能:設(shè)定每次寫入 1 位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。 I/D:0=寫入新數(shù)據(jù)后光標(biāo)左移? ? ? ? 1=寫入新數(shù)據(jù)后光標(biāo)右移 S:? 0=寫入新數(shù)據(jù)后顯示屏不移動? ?1=寫入新數(shù)據(jù)后顯示屏整體右移 1 個字符?顯示開關(guān)控制指令
功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。 D:0=顯示功能關(guān)? ?1=顯示功能開 C:0=無光標(biāo)? ? 1=有光標(biāo) B:0=光標(biāo)閃爍 1=光標(biāo)不閃功能設(shè)定指令
功能: 設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。 DL:0=數(shù)據(jù)總線為 4 位? ?1=數(shù)據(jù)總線為 8 位 N:? 0=顯示 1 行? ? ? ? ? ? ? 1=顯示 2 行 F:? 0=5×7 點(diǎn)陣/每字符? ?1=5×10 點(diǎn)陣/每字符(4) 寫指令與寫數(shù)據(jù):
① 當(dāng)要寫指令字,設(shè)置 LCD1602 的工作方式時:需要把 RS 置為低電平,RW ? ? 置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口 D0~D7,最后 E 引腳一個高脈沖將數(shù)據(jù)寫入。 /*寫指令函數(shù)*/void write_con(u8 con){
? ? ? P0=con; ? ? ? ? ? //送出指令
?? ? ?RS=0;RW=0;EN=1; ?//寫指令時序
?? ? ?delay(200);
?? ? ?EN=0;
}
? ② 當(dāng)要寫入數(shù)據(jù)字,在 1602 上實現(xiàn)顯示時:需要把 RS 置為高電平,RW 置 為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口 D0~D7,最后 E 引腳一個高脈沖將數(shù)據(jù)寫入 /*寫數(shù)據(jù)函數(shù)*/
void write_dat(u8 dat){
? ? ?P0=dat;?? ??? ? ? ? //送出數(shù)據(jù)
?? ? RS=1;RW=0;EN=1;//寫數(shù)據(jù)時序
?? ? delay(200);
?? ? EN=0;
}
?2.電路原理圖(普中A2開發(fā)板):
?3.程序說明:
? ?利用LCD1602顯示"Hello World"字符
?4.源程序:
#include <reg51.h>typedef unsigned char u8; typedef unsigned int u16;sbit RW=P2^5; sbit RS=P2^6; sbit EN=P2^7; u8 code table[15]="Hello World";/*延時函數(shù)*/ void delay(u16 i) {while(i--);} /*寫指令函數(shù)*/ void write_con(u8 con){P0=con; //送出指令RS=0;RW=0;EN=1; //寫指令時序delay(200);EN=0; } /*寫數(shù)據(jù)函數(shù)*/ void write_dat(u8 dat){P0=dat; //送出數(shù)據(jù)RS=1;RW=0;EN=1;//寫數(shù)據(jù)時序delay(200);EN=0; } /*LCD初始化函數(shù)*/ void LcdInit(){write_con(0x01);//清屏write_con(0x38);//設(shè)置16*2顯示write_con(0x0c);//開顯示write_con(0x06);//寫入數(shù)據(jù)時光標(biāo)右移1位 }/*LCD顯示函數(shù)*/ void LcdDisplay(u8 table[]){u8 i=0;write_con(0x80); //起點(diǎn)為第一行while(table[i]!='\0'){write_dat(table[i]);delay(100);i++;}/*i=0;write_con(0xc0); //起點(diǎn)為第二行while(table[i]!='\0'){write_dat(table[i]);delay(100);i++;}i=0;*/ }/*主函數(shù)*/ void main() {LcdInit();while(1){LcdDisplay(table);} }5.開發(fā)板運(yùn)行結(jié)果:
?
以上就是51單片機(jī)的LCD1602實驗了?
想要了解更多的單片機(jī)實驗,請查看我的51單片機(jī)專欄。
?
總結(jié)
以上是生活随笔為你收集整理的51单片机LCD1602显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统:分享10个经常用的cmd命令
- 下一篇: 特征工程之特征缩放特征编码