LCD1602+独立按键

/************独立按键*************/
#include
#define uint unsigned int
#define uchar unsigned char
sbit rs=P0^0;
sbit rw=P0^1; //不可以共用一个变量
sbit en=P0^2;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar num,num1,second,minute,hour;
uchar code table3[]="2012-12-26 ";
uchar code table2[]=" : : ";
uchar code table1[]="0123456789";
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar date,ID)
{
if(ID==0) //ID=0,写命令;ID=1,写数据;
rs=0;
else
rs=1;
P2=date;
delayms(5);
en=1;
delayms(5);
en=0;
}
void init()
{
rw=0;
en=0;

hour=17;
minute=33;
second=12;
write_com(0x38,0);
write_com(0x0c,0);
write_com(0x06,0);
write_com(0x01,0);

TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
write_com(0x80,0);
for(num1=0;num1<16;num1++)
{
write_com(table3[num1],1);
}
write_com((0x80+0x40),0);
for(num1=0;num1<16;num1++)
{
write_com(table2[num1],1);
}

}
/*void keyscan()
{
if(key1==0)
{
TR0=0;
while(!key1);
hour++;
delayms(10);
TR0=1;

}
else if(key2==0)
{
TR0=0;
while(!key2);
minute++;
delayms(10);
TR0=1;
}

else if(key3==0)
{
TR0=0;
while(!key3);
second++;
delayms(100);
TR0=1;
}
if(key4==0)
{TR0=0;
hour=0;
minute=0;
second=0;
delayms(100);
TR0=1;
}


}*/
void keyscan()
{
if(key1==0)
{
uchar a;
// while(!key1)
a++;
if(a==1)
{
TR0=0;
write_com(0x80+0x43,0);
write_com(0x0f,0);
delayms(10);
if(key2==0)
{
delayms(10);
if(key2==0)
{
while(!key2)
hour++;
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
while(!key3)
hour--;
}
}

}
if(a==2)
{
TR0=0;
write_com(0x80+0x46,0);
write_com(0x0f,0);
delayms(10);
if(key2==0)
{
delayms(10);
if(key2==0)
{
while(!key2)
minute++;
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
while(!key3)
minute--;
}
}

}
if(a==3)
{
a=0;
TR0=1;
write_com(0x0c,0);

}

}
}
void display()
{
keyscan();
write_com(0x80+0x42,0);
write_com(table1[hour/10],1);
write_com(table1[hour%10],1);

write_com(0x80+0x45,0);
write_com(table1[minute/10],1);
write_com(table1[minute%10],1);

write_com(0x80+0x48,0);
write_com(table1[second/10],1);
write_com(table1[second%10],1);
}



void main()
{
init();
while(1)
{

display();
}
}
void t0()interrupt 1
{


TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
second++;
}
if(second==60)
{
second=0;
minute++;
}
if(minute==60)
{
minute=0;
hour++;
}
if(hour==24)
hour=0;
}

相关文档
最新文档