51单片机lcd1602显示(模块)
假期自己學習了51單片機,今天剛好學到了LCD602,我也開始在csdn中開始了自己的第一篇文章,因為是剛開始學所以難免不會有錯誤,但是呢,還是希望能和大家一起學習交流一下。
簡介:
作為各類單片機實物設計的常用顯示屏,LCD1602是一種專門用于顯示字母、數字、符號等點陣式LCD,其1602是指LCD顯示的內容為16X2,即可以顯示兩行,每行16個字符(1個漢字占用2個字符)。這里需要要注意的是lcd1602是不能顯示漢字的,它只能顯示字母字符。
硬件參數:
1602使用三條控制線:EN、RW、RS。
?他們當中EN的作用其實就是中線的功能,RW和RS指示了讀、它寫的是寫的方向和內容。在讀數據(或者Busy標志)期間,EN線必須保持高電平;而在寫指令(或者數
據)過程中,EN線上必須送出一個正脈沖。RW、RS的組合一共有四種情況,分別對應四種操作:
RS=0、RW=0——表示向LCD寫入指令。
RS=0、RW=1——表示讀取Busy標志。
RS=1、RW=0——表示向LCD寫入數據。
RS=1、RW=1——表示從LCD讀取數據。LCD1602引腳定義如表3.2。
1. 讀狀態:輸入RS=0,RW=1,E=高脈沖。輸出:D0—D7為狀態字。
2. 讀數據:輸入RS=1,RW=1,E=高脈沖。輸出:D0—D7為數據。
3. 寫命令:輸入RS=0,RW=0,E=低脈沖。輸出:無。(寫完置E=高脈沖)
4. 寫數據:輸入RS=1,RW=0,E=低脈沖。輸出:無。
1602引腳信號說明
字符型LCD1602通常分為14條引腳和16引腳兩種,16引腳多出來的是背光電源線VCC(15引腳)和地線(16引腳),其控制原理與14引腳LCD完全一樣,引腳定義如下表:
引腳號?? ?引腳名?? ?電平?? ?輸入/輸出?? ?作用
1?? ?Vss?? ??? ??? ?電源地
2?? ?Vcc?? ??? ??? ?電源(+5V)
3?? ?Vee?? ??? ??? ?對比調整電壓
4?? ?RS?? ?0/1?? ?輸入?? ?0=輸入指令;1=輸出數據
5?? ?R/W?? ?0/1?? ?輸入?? ?0=向LCD寫入指令或數據; 1=從LCD讀取信息
6?? ?E?? ?1,1->0?? ?輸入?? ?使能信號,1時讀取信息,1->0(下降沿)執行指令
7?? ?DB0?? ?0/1?? ?輸入/輸出?? ?數據總線line0(最低位)
8?? ?DB1?? ?0/1?? ?輸入/輸出?? ?數據總線line1
9?? ?DB2?? ?0/1?? ?輸入/輸出?? ?數據總線line2
10?? ?DB3?? ?0/1?? ?輸入/輸出?? ?數據總線line3
11?? ?DB4?? ?0/1?? ?輸入/輸出?? ?數據總線line4
12?? ?DB5?? ?0/1?? ?輸入/輸出?? ?數據總線line5
13?? ?DB6?? ?0/1?? ?輸入/輸出?? ?數據總線line6
14?? ?DB7?? ?0/1?? ?輸入/輸出?? ?數據總線line7
15?? ?A?? ?+Vcc?? ??? ?LCD背光燈源正極
16?? ?K?? ?接地?? ??? ?LCD背光燈源負極
控制器接口介紹
1、基本操作時許
1.1讀狀態:輸入:RS=L,RW=H,E=H
----輸出:D0~D7=狀態字
1.2寫指令:輸入:RS=L,RW=L,D0~D7=指令碼
----輸出:無
1.3讀數據:輸入:RS=H,RW=H,E=H
----輸出:D0~D7=數據
1.4寫數據:輸入:RS=H,RW=L,D0~D7=數據,E=高脈沖
----輸出:無
2、狀態字說明
STA7 D7?? ?STA6 D6?? ?STA5 D5?? ?STA4 D4?? ?STA3 D3?? ?STA2 D2?? ?STA1 D1?? ?STA0 D0
STA0-6?? ?當前數據地址指針的數值?? ?
STA7?? ?讀寫操作使能?? ?1:禁止 0:允許
對控制器每次進行讀寫操作前,都必須進行讀寫檢測,確保STA7為0
3、指令說明
初始化設置
顯示模式設置
顯示開/關光標設置
數據控制
控制器內部沒有一個數據地址指針,可以通過他們來訪問內部的全部80字節RAM。
其他設置
指令碼?? ?功能
01H?? ?顯示清屏:1.數據指針清零 2.所有顯示清零
02H?? ?顯示回車:1.數據指針清零
理論知識應該這么多下面我們直接上代碼吧
源代碼:
?lcd1602.h
#ifndef __LCD1602_H__ #define __LCD1602_H__ #include<reg52.h> //包含頭文件 #include"intrins.h" #define uint unsigned int //預定義 #define uchar unsigned char void delay(uint n); void Busy(void); void Lcd_WriteCom(uchar com); void Lcd_WriteData(uchar dat); void lcd_init(); #endif?lcd1602.c
#include"lcd1602.h"sbit rs=P2^6; //1602的數據/指令選擇控制線 sbit rw=P2^5; //1602的讀寫控制線 sbit en=P2^7; //1602的使能控制線void delay(uint n) //延時函數 { uint x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); } void Busy(void) {uchar temp=0;do{rw=1;rs=0;en=0;_nop_();en=1;delay(1);en=0;temp=P0;}while(temp&0x80); }void Lcd_WriteCom(uchar com) //1602寫命令函數 { P0=com; //把命令字送入P2en=0; rs=0; //選擇指令寄存器rw=0; //選擇寫_nop_();//一個機械周期 en=1; //使能線電平變化,命令送入1602的8位數據口 delay(1);en=0; } void Lcd_WriteData(uchar dat) //1602寫數據函數 { P0=dat; //把要顯示的數據送入P0en=0; rs=1; //選擇數據寄存器 rw=0; //選擇寫 _nop_();//一個機械周期 en=1; //使能線電平變化,數據送入1602的8位數據口 delay(1);en=0; } void lcd_init() //1602初始化函數 { delay(1);Lcd_WriteCom(0x38); //8位數據,雙列,5*7字形 Busy();Lcd_WriteCom(0x0c); //開啟顯示屏,關光標,光標不閃爍 Busy();Lcd_WriteCom(0x06); //顯示地址遞增,即寫一個數據后,顯示位置右移一位 Busy();Lcd_WriteCom(0x01); //清屏 Busy();Lcd_WriteCom(0x80); //設置數據指針起點 }main.c
#include"lcd1602.h"/*P0口接1602的D0~D7*/ uchar code table[]="i love you "; //uchar code aabb[]="'1','2','3','4','5','6'"; //要顯示的內容放入數組tablevoid main() //主函數 { int i=0; uchar m=0; lcd_init(); //液晶初始化 Lcd_WriteCom(0x80); //顯示地址設為80H(即00H,)上排第一位 for(m=0;m<10;m++) //將table[]中的數據依次寫入1602顯示 { Lcd_WriteData(table[m]); //delay(200); // Lcd_WriteCom(0x40+0x80);} // Lcd_WriteCom(0x40+0x80); // for(i=0;i<10;i++) // {// Lcd_WriteDtata('l') ;// }while(1); //動態停機 }以上代碼復制直接可以用,第一次寫文章有點小緊張哈,今天寫了篇文章希望可以幫助到更多的小伙伴。讓我們一起進步吧!。
?
總結
以上是生活随笔為你收集整理的51单片机lcd1602显示(模块)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑技巧:C盘爆满该如何清理,实用的清理
- 下一篇: DirectX Repair V3.0