lcd1602液晶屏在很懂工業(yè)產(chǎn)品上都有應(yīng)用,LCD1602能夠能夠同時顯示32個字符,價格便宜,編程簡單而且穩(wěn)定可靠。lcd1602液晶屏是一種圖形點陣顯示器,顯示原理簡單易懂,都是液晶屏內(nèi)部的液晶材料變化而顯示不同的字符,因為液晶是具有流動特性的物質(zhì),所以只需外加很微小的力量即可使液晶分子運動,以最常見普遍的向列型液晶為例,液晶分子可輕易的借著電場作用使得液晶分子轉(zhuǎn)向,由于液晶的光軸與其分子軸相當(dāng)一致,故可借此產(chǎn)生光學(xué)效果,而當(dāng)加于液晶的電場移除消失時,液晶將借著其本身的彈性及黏性,液晶分子將十分迅速的回撤消來未加電場前的狀態(tài)。
lcd1602液晶屏就是通過電壓來改變填充在兩塊平行板之間的液晶材料內(nèi)部分子的排列狀況,以達(dá)到遮光和透光的目的來顯示深淺不一,錯落有致的圖象,而且只要在兩塊平板間再加上三元色的濾光層,就可實現(xiàn)顯示彩色圖象。
lcd1602中文資料---LCD1602液晶屏特點
a. 顯示質(zhì)量高
由于1602LCD每一個點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,畫質(zhì)高且不會閃爍。
b. 數(shù)字式接口
1602液晶屏都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡單可靠,操作更加方便。
c. 體積小、重量輕
1602液晶模塊通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示屏要輕得多。
d. 功耗低
相對而言,1602液晶顯示屏的功耗主要消耗在其內(nèi)部的電極和驅(qū)動IC上,因而耗電量比其它顯示屏要少得多。
液晶顯示模塊LCD1602的內(nèi)部結(jié)構(gòu)可以分成三部分:一為LCD控制器,二為LCD驅(qū)動器,三為LCD顯示裝備。
lcd1602中文資料---lcd1602接線圖
在了解LCD1602接線圖之前,我們先看看LCD1602的引腳定義圖。
1腳:VSS為接地;
2腳:VDD接5V電源VCC;
3腳:VO為液晶顯示器對比度調(diào)整;VO是液晶顯示的偏壓信號,可接10K的3296精密電位器。或同樣阻值的RM065/RM063藍(lán)白可調(diào)電阻。
4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器;
5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時可以讀忙信號,當(dāng)RS為高電平RW為低電平時可以寫入數(shù)據(jù);
6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令;
7~14腳:D0~D7為8位雙向數(shù)據(jù)線;
15腳:背光電源正極;
16腳:背光電源負(fù)極。
LCD1602液晶顯示模塊可以和單片機(jī)AT89C51直接接口接線:
?
也可以按照下圖顯示的電路圖接線即可,需要說明的是在這個電路圖中,LCD的第三腳VEE沒有接,這個腳是控制屏幕對比度的。可以將電位器的兩端分別接VCC和GND,中間端接LCD的第三腳。
lcd1602中文資料---1602LCD主要技術(shù)參數(shù)
? ? ? ?顯示容量:16×2個字符 ;芯片工作電壓:4.5—5.5V ;工作電流:2.0mA(5.0V) ;模塊最佳工作電壓:5.0V ;字符尺寸:2.95×4.35(W×H)mm。
LCD1602的基本操作分為四種:
1. 讀狀態(tài):輸入RS=0,RW=1,E=高脈沖。輸出:D0—D7為狀態(tài)字。
2. 讀數(shù)據(jù):輸入RS=1,RW=1,E=高脈沖。輸出:D0—D7為數(shù)據(jù)。
3. 寫命令:輸入RS=0,RW=0,E=高脈沖。輸出:無。
4. 寫數(shù)據(jù):輸入RS=1,RW=0,E=高脈沖。輸出:無。
時序時間參數(shù)表:
lcd1602中文資料----lcd1602與單片機(jī)連接圖
LCD1602如何接單片機(jī)了?給大家分享一個LCD1602接單片機(jī)原理PCB圖如下:
代碼如下:
#include《reg52.h》 //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include《intrins.h》
sbit RS = P2^4; //定義端口
sbit RW = P2^5;
sbit EN = P2^6;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
/*------------------------------------------------
uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函數(shù)
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
寫入命令函數(shù)
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
// while(LCD_Check_Busy()); //忙則等待
DelayMs(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
寫入數(shù)據(jù)函數(shù)
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
//while(LCD_Check_Busy()); //忙則等待
DelayMs(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
/*------------------------------------------------
清屏函數(shù)
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
寫入字符串函數(shù)
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
寫入字符函數(shù)
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函數(shù)
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*顯示模式設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*顯示關(guān)閉*/
LCD_Write_Com(0x01); /*顯示清屏*/
LCD_Write_Com(0x06); /*顯示光標(biāo)移動設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/
}
/*------------------------------------------------
主函數(shù)[上面已經(jīng)把顯示功能封裝好了,今后再寫其他顯示就直接調(diào)用]
------------------------------------------------*/
void main(void)
{
LCD_Init();
LCD_Clear();//清屏
while (1)
{
LCD_Write_Char(7,0,‘o’);
LCD_Write_Char(8,0,‘k’);
LCD_Write_String(1,1,“www.doflye.net”);
while(1);
}
}
lcd1602中文資料-----LCD1602的3引腳VO怎么接
VO為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。
LCD1602的VO引腳必須不能懸空,要連接一個滑動變阻器來調(diào)節(jié)的,當(dāng)然LCD1602有多種型號,但是大多數(shù)的VO腳只有兩種情況:一個是VO腳接18歐的下拉電阻接地,一個是接1k歐的電阻接地,當(dāng)然,也可以接個滑動變阻器更好。
?
一般用上圖,具體看看你LCD1602的技術(shù)手冊說明VO引腳的具體情況
lcd1602與單片機(jī)連接圖----實例解讀
下面我們分享以一個實例。LCD1602的型號是16條引腳的HJ1602A;單片機(jī)最小系統(tǒng)(擴(kuò)充了外部RAM 62256),采用STC89C52RC,晶振22.1184MHZ。以5×8點陣,16×2行,8位數(shù)據(jù)端口。首先在第一行顯示“I love MCU!”,第二行顯示“LCD1602 Test!”。延時一段時間,清屏。然后在第一行顯示自定義字符:攝氏溫標(biāo)標(biāo)志。第二行顯示圓周率(pai)標(biāo)志。再延時一段時間,清屏。最后在第一行顯示“Welcome to my blog!”,顯示方式是從屏幕右面移入,左面移出。周而復(fù)始。
//File1
#ifndef __ZHANGTYPE_H__
#define __ZHANGTYPE_H__
#define uint8 unsigned char
#define uint16 unsigned short int
#define uint32 unsigned long int
#define int8 signed char
#define int16 signed short int
#define int32 signed long int
#define uint64 unsigned long long int
#define int64 signed long long int
#endif
//File2
#ifndef __FUN_H__
#define __FUN_H__
#include “ZhangType.h”
#include
void Delay(uint16 time);
#endif
//File3
#include “fun.h”
void Delay(uint16 time)
{
while(time--);
}
//File4
#ifndef __1602_H__
#define __1602_H__
#include
#include “ZhangType.h” //變量類型
#include “fun.h” //常用函數(shù)
#define SETMODE 0x38 //16*2顯示,5*7點陣,8位數(shù)據(jù)接口
#define DISOPEN 0x0C //顯示開,不顯示光標(biāo),光標(biāo)不閃爍
#define DISMODE 0x06 //讀寫字符后地址加1,屏顯不移動
#define SETADDR 0x80 //設(shè)置數(shù)據(jù)地址指針初始值
#define CLEAR 0x01 //清屏,數(shù)據(jù)指針清零
#define RET 0x02 //回車,數(shù)據(jù)指針清零
#define PORT P2 //I/O口
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
void Init1602(void); //初始化1602
void Write1602_Com(uint8 com); //寫命令
void Write1602_Dat(uint8 dat); //寫數(shù)據(jù)
void CheckBusy(void); //檢查忙
void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat); //寫一個數(shù)據(jù)
void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf); //寫一個數(shù)據(jù)串
#endif//
//File5
#include “1602.h”
void Write1602_Com(uint8 com)
{
E=0;
RS=0; //命令
Delay(50); //延時
RW=0; //寫
Delay(50);
PORT=com; //端口賦值
Delay(50);
E=1; //高脈沖
Delay(50);
E=0;
}
void Write1602_Dat(uint8 dat)
{
E=0;
RS=1; //數(shù)據(jù)
Delay(50); //延時
RW=0; //寫
Delay(50);
PORT=dat; //端口賦值
Delay(50);
E=1; //高脈沖
Delay(50);
E=0;
}
void CheckBusy(void)
{
uint8 temp;
RS=0; //命令
RW=1; //讀
E=0;
while(1)
{
PORT=0xFF; //端口為輸入
E=1; //高脈沖
temp=PORT;
E=0;
if ((temp&0x80)==0) //檢查BF位是否為0
break;
}
}
void Init1602(void)
{
Write1602_Com(SETMODE); //模式設(shè)置
Delay(500);
Write1602_Com(DISOPEN); //顯示設(shè)置
Delay(500);
Write1602_Com(DISMODE); //顯示模式
Delay(500);
Write1602_Com(CLEAR); //清屏
Delay(500);
}
void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat)
{
x&=0x0f;
y&=0x01;
if(y)
x|=0x40;
x|=0x80;
Write1602_Com(x);
Write1602_Dat(dat);
}
void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf)
{
uint8 i;
Write1602_Com(addr);
for(i=0;i
{
Write1602_Dat(pbuf[i]);
}
}
//File6
*******************************************************
*名稱:主文件(_main.c)
*功能:測試
*日期:2014/09/09
*******************************************************/
#include “1602.h”
#include “fun.h”
uint8 code hot[8]={ //攝氏溫度字模
0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00
};
uint8 code pi[8]={
0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,0x00 //pai
};
uint8 code strMCU[]=“I love MCU!”;
uint8 code strTest[]=“LCD1602 Test!”;
uint8 code blog[]=“Welcome to my blog!”;
uint8 i;
void main()
{
Init1602(); //初始化1602
//自定義CGRAM
Write1602_Str(0x40,8,hot); //攝氏溫標(biāo)
Write1602_Str(0x48,8,pi); //pai
Write1602_Str(0x80,strlen(strMCU),strMCU); //“I love MCU!”
Write1602_Str(0x80+0x40,strlen(strTest),strTest); //“LCD1602 Test!”
for(i=0;i《50;i++) //延時一段時間
Delay(10000);
Write1602_Com(CLEAR); //指令執(zhí)行時間較長
Delay(500); //多加一些延時
for(i=0;i《16;i++)
Write1602_Dat(0);
Write1602_Com(0xc0); //設(shè)置DDRAM地址
for(i=0;i《16;i++)
Write1602_Dat(1);
for(i=0;i《50;i++) //延時一段時間
Delay(10000);
Write1602_Com(CLEAR); //指令執(zhí)行時間較長
Delay(500); //多加一些延時
Write1602_Str(0x80+0x10,strlen(blog),blog); //寫在顯示之外
while(1)
{
Write1602_Com(0x18); //左移
for(i=0;i《20;i++) //延時
Delay(10000);
}
}
//####### THE END ######
lcd1602與單片機(jī)連接圖----LCD1602與8051單片機(jī)接線圖
下圖是LCD1602與8051單片機(jī)的接口圖,圖中LCD1602的數(shù)據(jù)線與8051的P2口相連,RS與8051的P1.7相連,R/W與8051的P1.6相連,E端與8051的P1.5相連。編程在LCD顯示器的第1行、第1列開始顯示“HOW”,第2行、第5列開始顯示“ARE YOU!”。
LCD1602與8051單片機(jī)接線圖
匯編語言程序:
RS BIT P1.7
RW BIT P1.6 E BIT P1.5 ORG 00H AJMP START
ORG 50H ;主程序
START: MOV SP,#50H ACALL INIT
MOV A,#10000000B ;寫入顯示緩沖區(qū)起始地址為第1行第1列 ACALL WC51R
MOV A,#‘H’ ;第1行第1列顯示字母‘H’ ACALL WC51DDR MOV A,#‘O’ ;第1行第2列顯示字母“O” ACALL WC51DDR MOV A,#‘W’ ;第1行第3列顯示字母‘W’
ACALL WC51DDR
MOV A,#11000100B ;寫入顯示緩沖區(qū)起始地址為第2行第5列 ACALL WC51R
MOV A,#‘A’ ;第2行第5列顯示字母‘A’ ACALL WC51DDR MOV A,#‘R’ ;第2行第6列顯示字母‘R’ ACALL WC51DDR MOV A,#‘E’ ;第2行第7列顯示字母‘E’ ACALL WC51DDR MOV A,#‘ ’ ;第2行第8列顯示字母‘ ’ ACALL WC51DDR MOV A,#‘Y’
;第2行第9列顯示字母‘Y’
ACALL WC51DDR
MOV A,#‘O’ ;第2行第10列顯示字母‘O’ ACALL WC51DDR MOV A,#‘U’ ;第2行第11列顯示字母‘U’ ACALL WC51DDR MOV A,#‘!’
;第2行第12列顯示字母‘!’
ACALL WC51DDR LOOP: AJMP LOOP ;初始化子程序
INIT: MOV A,#00000001H ;清屏
ACALL WC51R MOV A,#00111000B ;使用8位數(shù)據(jù),顯示兩行,使用5×7的字型 LCALL WC51R MOV A,#00001100B ;顯示器開,光標(biāo)關(guān),字符不閃爍 LCALL WC51R MOV A,#00000110B
;字符不動,光標(biāo)自動右移一格
LCALL WC51R RET ;檢查忙子程序 F_BUSY:PUSH ACC ;保護(hù)現(xiàn)場
MOV P2,#0FFH CLR RS SETB RW WAIT: CLR E SETB E JB P2.7,WAIT
;忙,等待
POP ACC ;不忙,恢復(fù)現(xiàn)場
RET ;寫入命令子程序 WC51R: ACALL F_BUSY CLR E CLR RS CLR RW SETB E MOV P2,ACC CLR E RET ;寫入數(shù)據(jù)子程序 WC51DDR:ACALL F_BUSY CLR E SETB RS CLR RW SETB E MOV P2,ACC CLR E RET END
C語言編程:
#include 《reg51.h》
#define uchar unsigned char sbit RS=P1^7; sbit RW=P1^6; sbit E=P1^5;
void init(void);
void wc51r(uchar i); void wc51ddr(uchar i); void fbusy(void);
//主函數(shù)
void main() {
SP=0x50; init();
wc51r(0x80); //寫入顯示緩沖區(qū)起始地址為第1行第1列 wc51ddr(’H’); //第1行第1列顯示字母’H’ wc51ddr(’O’); //第1行第2列顯示字母’O’ wc51ddr (’W’); //第1行第3列顯示字母’W’
wc51r(0xc4); //寫入顯示緩沖區(qū)起始地址為第2行第5列 wc51ddr(’A’); //第2行第5列顯示字母’A’ wc51ddr(’R’); //第2行第6列顯示字母’R’ wc51ddr(’E’); //第2行第7列顯示字母’E’ wc51ddr(’ ’); //第2行第8列顯示字母’ ’ wc51ddr(’Y’); //第2行第9列顯示字母’Y’ wc51ddr(’O’); //第2行第10列顯示字母’O’ wc51ddr(’U’); //第2行第11列顯示字母’U’ wc51ddr(’!’); //第2行第11列顯示字母’!’ while(1); }
//初始化函數(shù) void init() {
wc51r(0x01); //清屏
wc51r(0x38); //使用8位數(shù)據(jù),顯示兩行,使用5×7的字型 wc51r(0x0c); //顯示器開,光標(biāo)關(guān),字符不閃爍 wc51r(0x06); //字符不動,光標(biāo)自動右移一格 }
//檢查忙函數(shù) void fbusy() {
P2=0Xff;RS=0;RW=1; E=0; E=1;
while (P2&0x80){E=0;E=1;} //忙,等待 }
//寫命令函數(shù)
void wc51r(uchar j) {
fbusy();
E=0;RS=0;RW=0; E=1; P2=j; E=0; }
//寫數(shù)據(jù)函數(shù)
void wc51ddr(uchar j) {
fbusy();
E=0;RS=1;RW=0; E=1; P2=j; E=0; }
小編推薦閱讀:
lcd1602在proteus中怎么找_lcd1602proteus仿真
評論