标题:
51单片机1602按键松手,光标不显示,怎么回事?
[打印本页]
作者:
linjinghan
时间:
2020-5-18 11:44
标题:
51单片机1602按键松手,光标不显示,怎么回事?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
sbit lcdrs=P3^5;
sbit lcden=P3^4;
sbit wela=P2^7;
sbit dula=P2^6;
sbit key0=P3^0;
sbit key1=P3^1;
sbit key2=P3^2;
sbit rd=P3^7;
uchar shi,fe,miao,t0,j,num,num1,temp;
uchar code table[]={"0123456789"};
uchar code table1[]={"Welcome!"};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void di()
{
beep=0;
delayms(30);
beep=1;
}
void write_com(uchar com)
{
lcdrs=0;
lcden=0;
P0=com;
lcden=1;
delayms(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1;
lcden=0;
P0=date;
lcden=1;
delayms(5);
lcden=0;
}
void init()
{
rd=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
shi=0;
fe=0;
miao=0;
wela=0;
dula=0;
write_com(0x38);
delayms(1);
write_com(0x0c);
delayms(1);
write_com(0x06);
delayms(1);
write_com(0x01);
}
void display()
{
write_com(0x80);
for(j=0;j<8;j++)
{
write_date(table1[j]);
}
delayms(2);
write_com(0x80+0x45);
for(j=0;j<1;j++)
{
write_date(table[shi/10]);
}
delayms(2);
write_com(0x80+0x46);
for(j=0;j<1;j++)
{
write_date(table[shi%10]);
}
delayms(2);
write_com(0x80+0x47);
for(j=0;j<1;j++)
{
write_date(':');
}
delayms(2);
write_com(0x80+0x48);
for(j=0;j<1;j++)
{
write_date(table[fe/10]);
}
delayms(2);
write_com(0x80+0x49);
for(j=0;j<1;j++)
{
write_date(table[fe%10]);
}
delayms(2);
write_com(0x80+0x4a);
for(j=0;j<1;j++)
{
write_date(':');
}
delayms(2);
write_com(0x80+0x4b);
for(j=0;j<1;j++)
{
write_date(table[miao/10]);
}
delayms(2);
write_com(0x80+0x4c);
for(j=0;j<1;j++)
{
write_date(table[miao%10]);
}
delayms(2);
}
void keysan()
{
rd=0;
if(key0==0)
{
delayms(10);
if(key0==0)
{
TR0=0;
while(!key0);
write_com(0x80+0x10);
write_com(0xf0);
di();
}
}
}
void main()
{
init();
while(1)
{
display();
keysan();
}
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==20)
{
t0=0;
miao++;
if(miao==60)
{
miao=0;
fe++;
if(fe==60)
{
fe=0;
shi++;
{
if(shi==24)
shi=0;
}
}
}
}
}
作者:
man1234567
时间:
2020-5-22 10:11
看不懂你讲啥,对没注释的程序没兴趣,以下百度来的供参考:
屏幕开关、光标开关、闪烁开关。
08H、09H、0AH、0BH:关闭显示屏,实质上是不把DDRAM中的内容对应显示在屏幕上,对DDRAM的操作还是在进行的,执行这条指令,接着对 DDRAM进行写入,屏幕上没有任何内容,但是接着执行下面的某条指令,就能看到刚才屏幕关闭期间,对DDRAM操作的效果了。
0cH:打开显示屏,不显示光标,光标所在位置的字符不闪烁。
0dH:打开显示屏,不显示光标,光标所在位置的字符闪烁。
0eH:打开显示屏,显示光标,光标所在位置的字符不闪烁。
0fH:打开显示屏,显示光标,光标所在位置的字符闪烁。
关于光标的位置:光标所在的位置指示了下一个被写入的字符所处的位置,加入在写入下一个字符前没有通过指令设置DDRAM的地址,那么这个字符就应该显示在光标指定的地方。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1