时钟
#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;
/*ÑÓʱº¯Êý*/
void delay(unsigned int x)
{
while(x--);
}
/*°´¼ü¿ØÖƺ¯Êý*/
void key(void)
{
if(mode==0) //Èç¹û°´¼ü°´ÏÂ
{
delay(300); //ÑÓʱÏû³ý°´¼ü¶¶
while(mode==0); //Èç¹û°´¼üȷʵ°´Ï£¬µÈ´ý°´¼üÁÁÆð
hour_t=hour;
min_t=min;
sec_t=sec;
key_flag++;
if(key_flag>3)key_flag=1;
}
if(Add==0)//¼Ó°´¼ü
{
delay(300);//ÑÓʱÏû³ý¼ü¶¶
while(Add==0);//Èç¹û°´¼üȷʵ°´Ï£¬µÈ´ý°´¼ü̧Æð
if(key_flag==1)//Сʱ++
hour_t++;
if(hour_t>=24)
hour_t=0;
hour=hour_t;//¸³Öµ
if(key_flag==2)//·ÖÖÓ++
min_t++;
if(min_t>=60)
min_t=0;
min=min_t; //¸³Öµ
if(key_flag==3)//Ãë++
sec_t++;
if(sec_t>=60)
sec_t=0;
sec=sec_t;//¸³Öµ
}
if(Cut==0)
{
delay(300);//ÑÓʱÏû³ý¼ü¶¶
while(Cut==0);//Èç¹û°´¼üȷʵ°´Ï£¬µÈ´ý°´¼ü̧Æð
if(key_flag==1)//Сʱ--
hour_t--;
if(hour_t<0)
hour_t=23;
hour=hour_t;//¸³Öµ
if(key_flag==2)//·ÖÖÓ--
min_t--;
if(min_t<0)
min_t=59;
min=min_t; //¸³Öµ
if(key_flag==3)//Ãë--
sec_t--;
if(sec_t<0)
sec_t=59;
sec=sec_t;//¸³Öµ
}
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;//ÏûÒþÇå³ýP0^0¶Ë¿ÚµÄÊý¾Ý
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;
}
}
//µ÷ÕûСʱ£¬Ð¡Ê±ÉÁ˸
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)//µ÷ÓÃÄĸöÊýÂë¹Üµ½ÏÔʾ״̬
{
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();
}
}