液晶的操作:
1602液晶只能顯示ASCI,今天把1602液晶驅(qū)動(dòng)起來(lái),液晶操作要比數(shù)碼管簡(jiǎn)單
液晶的基本操作時(shí)序:
1.1讀狀態(tài):輸入:RS = L,RW =H,E = H輸出D0~D7
1.2寫指令:輸入:RS = L,RW = L,D0~D7指令碼,E = 高脈沖,輸出:無(wú);
RS是數(shù)據(jù)命令選擇端(H/L);
1.3讀數(shù)據(jù):輸入RS= H,RW=H,E=H
1.4寫指令:輸出,RS = L,RW = L,D0~D7=數(shù)據(jù),E=高脈沖
注意:對(duì)控制器每次進(jìn)行讀寫操作之前,都必須進(jìn)行讀寫檢測(cè),確保STA7為0,可以用簡(jiǎn)單的延時(shí)來(lái)代替
初始化設(shè)置
顯示模式設(shè)置
指令碼:00111000 功能16*2顯示,5*7點(diǎn)陣,8為數(shù)據(jù)接口0x38的指令
顯示開(kāi)/關(guān)光標(biāo)的設(shè)置
因此左移和右由N和S設(shè)置
數(shù)據(jù)指針的指令碼
80H+地址碼(0-27H,40H到67H)
其他設(shè)置
指令碼 01H 功能是顯示清屏:1數(shù)據(jù)指針清零,2所有顯示清零
02H顯示回車:1數(shù)據(jù)指針清零
電路圖如圖所示:
示例代碼:動(dòng)態(tài)顯示
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P2^6;//這幾個(gè)端口要和硬件電路先聯(lián)系
sbit lcdrw = P2^5;
sbit lcdrs = P2^4;
sbit dula = P3^1;
sbit wela = P3^2;
uchar num;
uchar code table[]="I LIke MCU!";
uchar code table1[]="I LIke HULeiHao";
void delay(uint z)
{
uint x,y;
for(x= z;x>0;x--)
for(y =110;y>0;y--);
}
void write_com(uchar com)//寫命令函數(shù)
{
lcdrs = 0;//使能端置0低脈沖寫指令,高脈沖寫數(shù)據(jù)
_nop_();//推遲一個(gè)機(jī)器周期
lcdrw = 0;//低電平往里面寫數(shù)據(jù)
P0= com;
delay(5);
lcden = 1;//使能端給一個(gè)高電平讀走數(shù)據(jù)
delay(5);
lcden = 0;//使能端給一個(gè)低電平回位
}
void write_date(uchar date)//寫數(shù)據(jù)函數(shù)
{
lcdrs = 1;//使能端置0低脈沖寫指令,高脈沖寫數(shù)據(jù)
_nop_();//推遲一個(gè)機(jī)器周期
lcdrw = 0;
P0= date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void init()
{
dula = 0;
wela = 0;//關(guān)閉數(shù)碼管
lcden = 0;
write_com(0x38);//顯示模式設(shè)置
write_com(0x0e);//顯示開(kāi)關(guān)以及光標(biāo)設(shè)置
write_com(0x06);
write_com(0x80+0x10);
}
void main()
{
init();
for(num=0;num<11; num++)
{
write_date(table[num]);
delay(20);
}
// write_com = 1;//清屏操作
write_com(0x80+0x53);//設(shè)置數(shù)據(jù)指針
for(num=0;num<15; num++)
{
write_date(table1[num]);
delay(20);
}
for(num = 0 ;num<16;num++)
{
write_com(0x18);//整個(gè)屏幕左移
delay(20);
}
while(1);
}