{
u8 st //忙状态标志 0:不忙,0x80:忙
if(f_init==0) //如果某个东西没有初始化
{
return // 退出忙判断,不执行下面的代码
}
rs=0 // 读忙设置
rw=1//读
do
{
e=1 // 数据端口读写使能
st=lcd // 读数据端口的值
e=0 // 禁止数据端口读写
}
while(st&0x80) // 如果忙位BF为1,就一直读端口数据,直到为0才退出忙判断。
// BF:忙标志位,为数据端口的BIT7位。所以为0x80
}
这是为你量身制作的,希望你能喜欢,光标根据按键在数字下面闪烁,一定符合你的要求,给你截了一张效果图
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code table[]="1602"
sbit key1=P1^0
sbit key2=P1^1
sbit key3=P1^2
sbit key4=P1^3
sbit rs=P2^0
sbit rw=P2^1
sbit en=P2^2
void delay(uint z)
{
uint x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
void write_com(uchar com)
{
rs=0
rw=0
en=0
P0=com
delay(5)
en=1
delay(5)
en=0
}
void write_dat(uchar dat)
{
rs=1
rw=0
en=0
P0=dat
delay(5)
en=1
delay(5)
en=0
}
void init()
{
uchar i
write_com(0x38)
write_com(0x0c)
write_com(0x06)
write_com(0x01)
write_com(0x86)
for(i=0i<4i++)
{
write_dat(table[i])
delay(5)
}
}
void main()
{
init()
while(1)
{
if(key1==0)
{
delay(10)
if(key1==0)
{
while(key1==0)
write_com(0x86)
write_com(0x0f)
}
}
if(key2==0)
{
delay(10)
if(key2==0)
{
while(key2==0)
write_com(0x87)
write_com(0x0f)
}
}
if(key3==0)
{
delay(10)
if(key3==0)
{
while(key3==0)
write_com(0x88)
write_com(0x0f)
}
}
if(key4==0)
{
delay(10)
if(key4==0)
{
while(key4==0)
write_com(0x89)
write_com(0x0f)
}
}
}
}
这个是1602内部结构决定的,你只需要在初始化的时候先设置三次显示,然后再设置你的其他要求。芯片厂家推荐的用法:
INT:
MOV
A,#30H
MOV
DATR,#CW_ADD
MOV
R2,#03H
INT1:
MOVX
@DPTR,A
CALL
DELAY
DJNZ
R2,INT1
这上面就是1602对于51单片机推荐的初始化之前加的三次模式设置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)