時鐘
#include<reg51.h>
code unsigned char seven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char sec=50,min=44,hour=12;
unsigned char sec_t,min_t,hour_t;? ? ? ? //?óêüμ±?°μ÷??μ???ê±·?
unsigned char cp,i,flash,cp1,key_flag=0;? //key_flag?£ê?±ê??±?á?
sbit mode = P3^3;
sbit Add = P3^2;
sbit Cut = P3^1;
sbit Reset = P3^0;
/*?óê±oˉêy*/
void delay(unsigned int x)
{
? while(x--);
}
/*°′?ü????oˉêy*/
void key(void)
{
? if(mode==0)? ? ? ? //è?1?°′?ü°′??
? ? {
delay(300);? ? ? //?óê±??3y°′?ü??
while(mode==0);? //è?1?°′?üè·êμ°′??£?μè′y°′?üáá?e
hour_t=hour;
min_t=min;
sec_t=sec;
key_flag++;
if(key_flag>3)key_flag=1;
? ? }
if(Add==0)//?ó°′?ü
{
delay(300);//?óê±??3y?ü??
while(Add==0);//è?1?°′?üè·êμ°′??£?μè′y°′?üì§?e
if(key_flag==1)//D?ê±++
hour_t++;
if(hour_t>=24)
hour_t=0;
hour=hour_t;//?3?μ
if(key_flag==2)//·??ó++
min_t++;
if(min_t>=60)
min_t=0;
? ? ? min=min_t; //?3?μ
if(key_flag==3)//??++
sec_t++;
if(sec_t>=60)
sec_t=0;
sec=sec_t;//?3?μ
}
if(Cut==0)
{
delay(300);//?óê±??3y?ü??
while(Cut==0);//è?1?°′?üè·êμ°′??£?μè′y°′?üì§?e
if(key_flag==1)//D?ê±--
hour_t--;
if(hour_t<0)
hour_t=23;
hour=hour_t;//?3?μ
if(key_flag==2)//·??ó--
min_t--;
if(min_t<0)
min_t=59;
? ? ? min=min_t; //?3?μ
if(key_flag==3)//??--
sec_t--;
if(sec_t<0)
sec_t=59;
sec=sec_t;//?3?μ
}
if(Reset==0)
{
delay(300);
while(Reset==0)
key_flag=0;
}
}
void timer0_isr(void) interrupt 1 ?
{
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
cp++; ? ? ?
if(cp>=100)
? {
cp=0;
cp1++;
flash=~flash;
? }
? if(cp1>=2)
? {
cp1=0;
sec++;
? }
if(sec>=60)
{
sec=0;
? ? min++;
}
? if(min>=60)
{
min=0;
hour++;
}
if(hour>=24)
{
? hour=0;
}
P0=0xff;//??òt??3yP0^0???úμ?êy?Y
if(key_flag==0)
{
switch(i)
{
case 0:P0=seven_seg[sec % 10];P2=0xdf;break;
case 1:P0=seven_seg[sec / 10];P2=0xef;break;
case 2:P0=seven_seg[min % 10]&(0x7f|flash);P2=0xf7;break;
case 3:P0=seven_seg[min / 10];P2=0xfb;break;
case 4:P0=seven_seg[hour % 10]&(0x7f|flash);P2=0xfd;break;
case 5:P0=seven_seg[hour / 10];P2=0xfe;break;
}
}
//μ÷??D?ê±£?D?ê±éá??
if(key_flag==1)
{
switch(i)
{
case 0:P0=seven_seg[sec_t % 10];P2=0xdf;break;//??ê???μ?????
case 1:P0=seven_seg[sec_t / 10];P2=0xef;break;//??ê???μ?????
case 2:P0=seven_seg[min_t % 10];P2=0xf7;break;//??ê?·?μ?????
case 3:P0=seven_seg[min_t / 10];P2=0xfb;break;//??ê?·?μ?????
case 4:P0=seven_seg[hour_t % 10] | flash;P2=0xfd;break;
case 5:P0=seven_seg[hour_t / 10] | flash;P2=0xfe;break;
}
}
//μ÷ê?·??ó£?·??óéá??
if(key_flag==2)
{
switch(i)
{
case 0:P0=seven_seg[sec_t % 10];P2=0xdf;break;//??ê???μ?????
case 1:P0=seven_seg[sec_t / 10];P2=0xef;break;//??ê???μ?????
case 2:P0=seven_seg[min_t % 10]| flash;P2=0xf7;break;//??ê?·?μ?????
case 3:P0=seven_seg[min_t / 10]| flash;P2=0xfb;break;//??ê?·?μ?????
case 4:P0=seven_seg[hour_t % 10];P2=0xfd;break;
case 5:P0=seven_seg[hour_t / 10];P2=0xfe;break;
}
}
//μ÷ê???£???éá??
if(key_flag==3)
{
switch(i)
{
case 0:P0=seven_seg[sec_t % 10]| flash;P2=0xdf;break;//??ê???μ?????
case 1:P0=seven_seg[sec_t / 10]| flash;P2=0xef;break;//??ê???μ?????
case 2:P0=seven_seg[min_t % 10];P2=0xf7;break;//??ê?·?μ?????
case 3:P0=seven_seg[min_t / 10];P2=0xfb;break;//??ê?·?μ?????
case 4:P0=seven_seg[hour_t % 10];P2=0xfd;break;
case 5:P0=seven_seg[hour_t / 10];P2=0xfe;break;
}
}
i++;
? ? if(i>=6)//μ÷ó?????êy??1üμ???ê?×′ì?
? {
? ? i=0;
? }
}
void timer0_init(void) ? ? ? ? ? ? ? ? ? ? ?
{
TMOD=0x01;
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
ET0=1;
TR0=1;
EA=1;
}
void main(void)
{
timer0_init();
P2=0x00;
while(1)
{
key();
}
}