📄 电子时钟.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code TAB[]={0x77,0x42,0x3b,0x6b,0x4e,0x6d,0x7d,0x47,0x7f,0x6f}; //字码表
sbit com1= P1^7; //数码管公共端1
sbit com2= P1^6; //数码管公共端2
uchar DATA=0xef;//键值,一开始就显示秒
uchar tim=0;//中断次数计数器
uchar t=2;
uchar time[3];//时,分,秒缓冲区
/***************键盘扫描程序**************/
void key(void)
{ P2=0Xff;
if((P2&&0xff)!=0xff) //有键按下
{uchar i;
for(i=0;i<255;i++){;;} //延时
if((P2&&0xff)!=0xff)
DATA=P2;
}
}
/*************查表程序**************/
uchar ctab(uchar c)
{return TAB[c];}
/**************显示程序*************/
void dis(uchar i)
{ uint j;
uint a;
a=(time[i]);
P0=~ctab(a/10); //查表,送显 十位
com1=1;
com2=0;
for(j=0;j<250;j++){;;}
P0=~ctab(a%10);//查表,送显 个位
com1=0;
com2=1;
}
/****************键值处理***************/
void pros(void)
{ switch(DATA)
{case 0xfe://键1
t=0;break;
case 0xfb://键2
t=1;break;
case 0xef://键3
t=2;;break;
case 0xbf://键4
;break;
case 0xfd://键5
/* {if((DATA!=0xfe)&&(DATA!=0xfb)&&(DATA!=0xef))
{ key();
dis(t);
if(DATA==0xfd){if(DATA!=0xfd)
{if(t!=2){t++;}
t=0;}
key();
dis(t);
}
if(DATA==0xbf){if(DATA!=0xbf)
{(time[t])++;}
key();
dis(t);
}
if(DATA==0x7f){if(DATA!=0x7f)
{(time[t])++;}
key();
dis(t);
}
}
} */
break;
case 0xf7://键6
;break;
case 0xdf://键7
;break;
case 0x7f://键8
;break;
default:break;
}
}
/****************中断***************/
void timer() interrupt 1 using 1 //50ms来一次中断
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tim++;
if(tim==20)
{tim=0;
(time[2])++;
if((time[2])==60)
{(time[2])=0;
(time[1])++;
if((time[1])==60)
{(time[1])=0;
(time[0])++;
if((time[0])==24)
{(time[2])=0;
}
}
}
}
}
/*****************主程序****************/
void main()
{ P1=0x00;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{key();
pros();
dis(t);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -