下面是我用串口改变时间的代码,但是我只会改变时、分、秒中的一个,求大神帮我改一改能够分别改时、分、秒
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar hour,min,sec,temp;
uchar aa;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint z);
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f);
void time_change();
void revdata(void) interrupt 4
{
ES=0;
if(RI==1){RI=0;aa=SBUF-48;
hour=aa;
ES=1;}
}
void main()
{
hour=0;
min=0;
sec=0;
SCON=0x50;
PCON = 0x00;
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
EA=1;
ES=1;
ET0=1;
ET1=0;
TR0=1;
TR1=1;
delay(50);
while(1)
{
time_change();
display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10]);
}
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
P1=0x01;P0=a;delay(2);
P1=0x02;P0=b;delay(2);
P1=0x08;P0=c;delay(2);
P1=0x10;P0=d;delay(2);
P1=0x40;P0=e;delay(2);
P1=0x80;P0=f;delay(2);
P1=0x04;P0=0xbf;delay(2);
P1=0x20;P0=0xbf;delay(2);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
temp++;
}
void delay(uint z)
{
uint j,k;
for(j=z;j>0;j--)
for(k=120;k>0;k--);
}
void time_change()
{
if(temp>=20)
{
temp=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)
{
hour=0;
}
}
}
}
}