1.基礎(chǔ)知識(shí)介紹
1.1、為什么叫1602
因?yàn)榭梢燥@示兩行,一行16個(gè)
1.2、LCD1602管腳認(rèn)識(shí)
編號(hào) | 符號(hào) | 引腳說(shuō)明 |
---|---|---|
1 | VSS | 電源地 |
2 | VDD | 電源正極 |
3 | VEE | 液晶顯示偏壓信號(hào) |
4 | RS | 數(shù)據(jù)/命令選擇(H/L) |
5 | R/W | 讀/寫選擇(H/L) |
6 | E | 使能端 |
7 | D0 | 數(shù)據(jù) |
8 | D1 | 數(shù)據(jù) |
9 | D2 | 數(shù)據(jù) |
10 | D3 | 數(shù)據(jù) |
11 | D4 | 數(shù)據(jù) |
12 | D5 | 數(shù)據(jù) |
13 | D6 | 數(shù)據(jù) |
14 | D7 | 數(shù)據(jù) |
1.3、LCD1602關(guān)鍵性指令設(shè)置
1.3.1、清屏指令
管腳 | 對(duì)應(yīng)二進(jìn)制 |
---|---|
RS | 0 |
R/W | 0 |
DB7 | 0 |
DB6 | 0 |
DB5 | 0 |
DB4 | 0 |
DB3 | 0 |
DB2 | 0 |
DB1 | 0 |
DB0 | 1 |
功能:
<1> 清除液晶顯示器,即將 DDRAM 的內(nèi)容全部填入"空白"的 ASCII
碼 20H;
<2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;
<3> 將地址計(jì)數(shù)器(AC)的值設(shè)為 0。
1.3.2、模式選擇指令
管腳 | 對(duì)應(yīng)二進(jìn)制 |
---|---|
RS | 0 |
R/W | 0 |
DB7 | 0 |
DB6 | 0 |
DB5 | 0 |
DB4 | 0 |
DB3 | 0 |
DB2 | 1 |
DB1 | I/D |
DB0 | S |
功能:
設(shè)定每次定入 1 位數(shù)據(jù)后光標(biāo)的移位方向 , 并且設(shè)定每次寫入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示:
位名 | 設(shè)置 |
---|---|
I/D | 0=寫入新數(shù)據(jù)后光標(biāo)左移 |
I/D | 1=寫入新數(shù)據(jù)后光標(biāo)右移 |
S | 0=寫入新數(shù)據(jù)后顯示屏不移動(dòng) |
S | 1=寫入新數(shù)據(jù)后顯示屏整體右移 1 個(gè)字符 |
1.3.3、顯示開(kāi)關(guān)控制指令
管腳 | 對(duì)應(yīng)二進(jìn)制 |
---|---|
RS | 0 |
R/W | 0 |
DB7 | 0 |
DB6 | 0 |
DB5 | 0 |
DB4 | 0 |
DB3 | 1 |
DB2 | D |
DB1 | C |
DB0 | B |
功能:
功能:控制顯示器開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下:
位名 | 設(shè)置 |
---|---|
D | 0=顯示功能關(guān) |
D | 1=顯示功能開(kāi) |
C | 0=無(wú)光標(biāo) |
C | 1=有光標(biāo) |
B | 0=光標(biāo)閃爍 |
B | 1=光標(biāo)不閃爍 |
設(shè)置完成之后,要判斷液晶模塊是否處于忙狀態(tài)。
1.3.4功能設(shè)置指令
管腳 | 對(duì)應(yīng)二進(jìn)制 |
---|---|
RS | 0 |
R/W | 0 |
DB7 | 0 |
DB6 | 0 |
DB5 | 1 |
DB4 | DL |
DB3 | N |
DB2 | F |
DB1 | X |
DB0 | X |
功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:
位名 | 設(shè)置 |
---|---|
DL | 0=數(shù)據(jù)總線為 4 位 |
DL | 1=數(shù)據(jù)總線為 8 位 |
N | 0=顯示 1 行 |
N | 1=顯示 2 行 |
F | 0=5×7 點(diǎn)陣/每字符 |
F | 1=5×10 點(diǎn)陣/每字符 |
0x38:00111000,就是數(shù)據(jù)總線8位,顯示兩行,以5×7 點(diǎn)陣/每字符 進(jìn)行顯示。
2、程序解釋
2.1、宏定義
頭文件,宏定義,根據(jù)連接定義端口
#include <reg52.h>
#include <intrins.h>
//定義端口
sbit duan=P2^6;
sbit wei=P2^7;
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P2^5;
#define uchar unsigned char
#define uint unsigned int
#define Data P0 // 數(shù)據(jù)接在P0
#define RS_commad RS=0 //命令
#define RS_data RS=1 //數(shù)據(jù)
#define RS_write RW=0 //寫
#define RS_read RW=1 //讀
#define E_close E=0 //使能關(guān)
#define E_open E=1 //使能開(kāi)
2.2 、延時(shí)部分(具體解釋見(jiàn)之前的博客)
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<113;j++)
{
;
}
}
}
2.3、數(shù)碼管關(guān)閉程序
在1602程序中需要調(diào)用數(shù)碼管的程序,是因?yàn)槠渲械腸mg函數(shù)用于關(guān)閉數(shù)碼管,在LCD控制時(shí)需要先關(guān)閉數(shù)碼管,避免兩者的干擾。
void cmg ()
{
duan=1;
wei=1;
P0=0x00;
duan=0;
wei=0;
}
2.4、寫命令
2.4.1、程序里面用到了延時(shí),原因是在寫命令時(shí),需要給液晶一定的響應(yīng)時(shí)間。如果沒(méi)有延時(shí),液晶可能無(wú)法正確地接收到指令,從而無(wú)法正常顯示。一般情況下,液晶的響應(yīng)時(shí)間為幾微秒至幾毫秒不等,具體時(shí)間取決于液晶型號(hào)和工作狀態(tài)。這里的5毫秒延時(shí)是為了確保液晶能夠正確地接收到指令。
2.4.2、nop
nop(); 是匯編指令,表示“空操作(no operation)”,也就是不執(zhí)行任何操作,只是占用一個(gè)CPU周期。在這個(gè)代碼中,可能是為了等待指令執(zhí)行完畢,延長(zhǎng)執(zhí)行時(shí)間,確保程序的正確性。
void writecom (uchar command)
{
delay(10)
RS_command;
RW_write;
E_open;
Data=data;
_nop_();
E_close;
}
2.5、寫數(shù)據(jù)
與上面寫命令邏輯是相同的
void writedata (uchar da)
{
delay(10);
RS_data;
RW_write;
E_open;
Data=da;
_nop_();
E_close;
}
2.6、寫字符
先進(jìn)行寫命令,讓它寫在哪一行,之后寫入數(shù)據(jù)。x,y代表橫縱坐標(biāo)
void writechar(uchar x,uchar y,uchar c)
{
if (y==0)
{
writecom(0x80+x);//10000000,寫在第一行
}
else
{
writecom(0xc0+x);
}
writedata(c);
}
2.7、寫字符串
與寫字符的區(qū)別在于,字符串是很多構(gòu)成的所以說(shuō)要進(jìn)行循環(huán),不斷寫,直到寫完,跳出循環(huán)。
void writestring(uchar x,uchar y,uchar *s)
{
if (y==0)
{
writecom(0x80+x);//10000000,寫在第一行
}
else
{
writecom(0xc0+x);
}
while(*s)
{
writedata(*s);
s++;
}
}
2.8、初始化
主要參照我上面列出的表格,確定LCD的顯示模式,例如設(shè)置光標(biāo),以及光標(biāo)移不移動(dòng),等等。
設(shè)置顯示模式需要發(fā)送三次指令0x38,每次發(fā)送可以確保指令被正確接收。0x38表示設(shè)置顯示模式為8位數(shù)據(jù)總線,2行顯示,5x7點(diǎn)陣字符,這是一種常用的基本顯示模式。
void Init()
{
cmg();
delay(10);
writecom(0x38); //設(shè)置顯示模式
writecom(0x38);
writecom(0x38);
writecom(0x0e); //顯示開(kāi)關(guān)控制,顯示功能開(kāi),有光標(biāo), 光標(biāo)不閃爍
writecom(0x06); // 寫入數(shù)據(jù)光標(biāo)右移,顯示屏不移動(dòng)
writecom(0x01); //清屏
}
2.9、主函數(shù)
進(jìn)行初始化,調(diào)用寫字符和字符串進(jìn)行寫入顯示
void main()
{
Init();
while(1)
{
writechar(1,0,'d'); //第一行1位置上寫字符d
writechar(2,0,'a'); // 第一行位2置上寫字符a
writestring(3,0,"npianji");
writestring(1,1,"tainanle");
}
}
3、完整代碼文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-468800.html
#include <reg52.h>
#include <intrins.h>
//定義端口
sbit duan=P2^6;
sbit wei=P2^7;
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P2^5;
#define uchar unsigned char
#define uint unsigned int
#define Data P0 // 數(shù)據(jù)接在P0
#define RS_command RS=0 //命令
#define RS_data RS=1 //數(shù)據(jù)
#define RW_write RW=0 //寫
#define RW_read RW=1 //讀
#define E_close E=0 //使能關(guān)
#define E_open E=1 //使能開(kāi)
//延時(shí)部分
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<113;j++)
{
;
}
}
}
//數(shù)碼管部分,注意是關(guān)數(shù)碼管
void cmg ()
{
duan=1; //段開(kāi)啟
wei=1;
P0=0x00;
duan=0;
wei=0;
}
//寫命令
void writecom (uchar command)
{
delay(10);
RS_command;
RW_write;
E_open;
Data=command;
_nop_();
E_close;
}
//寫數(shù)據(jù)
void writedata (uchar da)
{
delay(10);
RS_data;
RW_write;
E_open;
Data=da;
_nop_();
E_close;
}
//寫字符 (確定坐標(biāo))
void writechar(uchar x,uchar y,uchar c)
{
if (y==0)
{
writecom(0x80+x);//10000000,寫在第一行
}
else
{
writecom(0xc0+x);
}
writedata(c);
}
//寫字符串
void writestring(uchar x,uchar y,uchar *s)
{
if (y==0)
{
writecom(0x80 + x);//10000000,寫在第一行
}
else
{
writecom(0xc0+x);
}
while(*s)
{
writedata(*s);
s ++;
}
}
//初始化
void Init()
{
cmg();
delay(15);
writecom(0x38); //設(shè)置顯示模式
writecom(0x38);
writecom(0x38);
writecom(0x0e); //顯示開(kāi)關(guān)控制,顯示功能開(kāi),有光標(biāo), 光標(biāo)不閃爍
writecom(0x06); // 寫入數(shù)據(jù)光標(biāo)右移,顯示屏不移動(dòng)
writecom(0x01); //清屏
}
//主函數(shù)
void main()
{
Init();
while(1)
{
writestring(1,0,"danpianji");
writestring(1,1,"tainanle");
}
}
4、運(yùn)行結(jié)果
猜猜運(yùn)行結(jié)果是什么文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468800.html
到了這里,關(guān)于單片機(jī)——LCD1602的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!