液晶的操作:
1602液晶只能显现ASCI,今日把1602液晶驱动起来,液晶操作要比数码管简略
液晶的根本操作时序:
1.1读状况:输入:RS = L,RW =H,E = H输出D0~D7
1.2写指令:输入:RS = L,RW = L,D0~D7指令码,E = 高脉冲,输出:无;
RS是数据指令挑选端(H/L);
1.3读数据:输入RS= H,RW=H,E=H
1.4写指令:输出,RS = L,RW = L,D0~D7=数据,E=高脉冲
留意:对控制器每次进行读写操作之前,都必须进行读写检测,保证STA7为0,可以用简略的延时来替代
初始化设置
显现形式设置
指令码:00111000 功用16*2显现,5*7点阵,8为数据接口0x38的指令
显现开/关光标的设置
因而左移和右由N和S设置
数据指针的指令码
80H+地址码(0-27H,40H到67H)
其他设置
指令码 01H 功用是显现清屏:1数据指针清零,2一切显现清零
02H显现回车:1数据指针清零
电路图如图所示:
示例代码:动态显现
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P2^6;//这几个端口要和硬件电路先联络
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)//写指令函数
{
lcdrs = 0;//使能端置0低脉冲写指令,高脉冲写数据
_nop_();//推延一个机器周期
lcdrw = 0;//低电平往里面写数据
P0= com;
delay(5);
lcden = 1;//使能端给一个高电平读走数据
delay(5);
lcden = 0;//使能端给一个低电平回位
}
void write_date(uchar date)//写数据函数
{
lcdrs = 1;//使能端置0低脉冲写指令,高脉冲写数据
_nop_();//推延一个机器周期
lcdrw = 0;
P0= date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void init()
{
dula = 0;
wela = 0;//封闭数码管
lcden = 0;
write_com(0x38);//显现形式设置
write_com(0x0e);//显现开关以及光标设置
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);//设置数据指针
for(num=0;num<15; num++)
{
write_date(table1[num]);
delay(20);
}
for(num = 0 ;num<16;num++)
{
write_com(0x18);//整个屏幕左移
delay(20);
}
while(1);
}
来历;21ic