#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
//sbit key4=P3^3;
sbit key=P3^7;
void display();
void delayms(uint z);
void keysscan();
void init();
void write_com(uchar com);
void write_data(uchar date);
uchar num,num1,num2;num3,num4;
uchar sshi,sge,fshi,fge,mshi,mge;
uint temp=0;
void init() //初始化
{
dula=0;
wela=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TH1=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void write_com(uchar com) //寫指令
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uchar date)//寫數據
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void delayms(uint z)//延時
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display()//液晶屏顯示
{
write_com(0x80);
write_data(sshi+48);
delayms(1);
write_com(0x80+0x01);
write_data(sge+48);
delayms(1);
write_com(0x80+0x02);
write_data(':');
delayms(1);
write_com(0x80+0x03);
write_data(fshi+48);
delayms(1);
write_com(0x80+0x04);
write_data(fge+48);
delayms(1);
write_com(0x80+0x05);
write_data(':');
delayms(1);
write_com(0x80+0x06);
write_data(mshi+48);
delayms(1);
write_com(0x80+0x07);
write_data(mge+48);
delayms(1);
}
void keysscan()
{
key=0;
if(key1==0)
{
delayms(5);
if(key1==0);
{
while(!key1);
temp++;
TR0=0;
write_com(0x0f);
}
}
switch(temp)
{
case 1:
if(key2==0)
{
delayms(5);
if(key2==0);
{
while(!key2)
num1++;
if(num1==60)num1=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3)
num1--;
if(num1==-1)num1=0;
}
}
break;
case 2:
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
num2++;
if(num2==60)num2=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
num2--;
if(num2==-1)num2=0;
}
}
}
break;
case 3:
{ if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
num3++;
if(num3==60)num3=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
num3--;
if(num3==-1)num3=0;
}
}
}
break;
case 4:
{
temp=0;
TR0=1;
write_com(0x08);
}
}
}
void T0_time()interrupt 1 //時鐘0中斷
{
num++;
TH0=(65536-45872)/256;
TH1=(65536-45872)%256;
if(num==20)
{
num=0;
num1++;
if(num1==60)
{
num1=0;
num2++;
}
mshi=num1/10;
mge=num1%10;
if(num2==60)
{
num2=0;
num3++;
}
fshi=num2/10;
fge=num2%10;
if(num3==24)
{
num3=0;
// num4++;
}
sshi=num3/10;
sge=num3%10;
//if(num4)
display();
}
}
void main()
{
init();
while(1)
{
keysscan();
}
}