#include
unsigned char code disp_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char count=0,second=0,minute=0;hour=0;
void delay( unsigned char n)
{
unsigned char i,j;
for(j=0;j
}
display()
{
unsigned char temp[2];
temp[1]=second/10; //高位
temp[0]=second%10; //低位
P0=disp_code[temp[1]];P2_6=0; delay(2);P2_6=1;
P0=disp_code[temp[0]];P2_7=0; delay(2);P2_7=1;
temp[1]=minute/10; //高位
temp[0]=minute%10; //低位
P0=disp_code[temp[1]];P2_4=0; delay(2);P2_4=1;
P0=disp_code[temp[0]];P2_5=0; delay(2);P2_5=1;
temp[1]=hour/10; //高位
temp[0]=hour%10; //低位
P0=disp_code[temp[1]];P2_2=0; delay(2);P2_2=1;
P0=disp_code[temp[0]];P2_3=0; delay(2);P2_3=1;
}
key_board()
{
if(P3_2==0)
{
display();//延时20ms
while(!P3_2)display();//P3_2为低电平等待
minute++; //分钟加1
if(minute==60) {minute=0;}
}
if(P3_3==0)
{
display();//延时20ms
while(!P3_3)display();//P3_3为低电平等待
if(minute==0) minute=59;
else minute--; //分钟减1
}
if(P3_4==0)
{
display();//延时20ms
while(!P3_4)display();//P3_4为低电平等待
hour++; //hour加1
if(hour==24) {hour=0;}
}
if(P3_5==0)
{
display();//延时20ms
while(!P3_5)display();//P3_5为低电平等待
if(hour==0) hour=23;
else hour--; //hour减1
}
}
main()
{
SP=0x60;
TMOD=0X11;//T1 定时, 模式1
TH1=0x3C; //0x3c 12MHz 定时50ms 15536/256;
TL1=0xB0; //0XB0; 15536%256;
TR1=1; //启动定时器
IE=0x88;// T1中断源许可,INT0中断许可
while(1)
{
display();
key_board();
}
}
void T1_int() interrupt 3 using 1//工作寄存器用第一组08h-0fh
{
TL1=0xB0;//重新赋给初值
TH1=0x3C;
count++;
if(count==20)//20*50ms=1000ms=1s
{
count=0;
second++;
if(second==60)
{
second=0;minute++;
if(minute==60)
{
minute=0;hour++;
if(hour==24)
{hour=0;
}
}
}
}
}