📄 digital_clock.c
字号:
#include <at89x51.h>
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<n;j++)
for(i=0;i<125;i++);
}
display()
{ unsigned char temp[2];
temp[1]=minute/10; //高位
temp[0]=minute%10; //低位
P2_6=0;P0=~disp_code[temp[1]]; delay(2);P2_6=1;
P2_7=0;P0=~disp_code[temp[0]]; delay(2);P2_7=1;
temp[1]=hour/10; //高位
temp[0]=hour%10; //低位
P2_4=0;P0=~disp_code[temp[1]]; delay(2);P2_4=1;
P2_5=0; P0=~disp_code[temp[0]];delay(2);P2_5=1;
}
key_board()
{
if(P3_2==0)
{
display();//延时20ms
while(!P3_2)display();//P1_0为低电平等待
minute++; //分钟加1
if(minute==60) {minute=0;hour++;}
}
if(P3_3==0)
{
display();//延时20ms
while(!P3_3)display();//P1_1为低电平等待
if(minute==0) minute=59;
else minute--; //分钟减1
}
if(P3_4==0)
{
display();//延时20ms
while(!P3_4)display();//P1_1为低电平等待
hour++; //hour加1
}
if(P3_5==0)
{
display();//延时20ms
while(!P3_5)display();//P1_1为低电平等待
hour--; //hour加1
}
}
main()
{
SP=0x60;
TMOD=0X10;//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==10)//20*50ms=1000ms=1s
{
count=0;
P1_7=~P1_7;
second++;
if(second==60)
{
second=0;minute++;
if(minute==60)
{
minute=0;hour++;
if(hour==24)
{hour=0;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -