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