/*通过独立键控制调节的时钟。s2控制启动;s3控制暂停;s4控制在暂停的状态下切换时针、分针;s5控制时针、分针的值的增加*/
/* 其中优化完善的功能是:在切换时针、分针的状态下,其数码管能闪烁显示数字*/
#include <reg52.h>
#include <intrins.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
//数码管显示数字赋值初始化
uchar code leddate[]={
0X3f,//0
0X06,//1
0X5B,//2
0X4f,//3
0X66,//4
0X6d,//5
0X7d,//6
0X07,//7
0X7f,//8
0X6f, //9
0Xbf,//0.
0X86,//1.
0Xdb,//2.
0Xcf,//3.
0Xe6,//4.
0Xed,//5.
0Xfd,//6.
0X87,//7.
0Xff,//8.
0Xef //9.
};
sbit LED1=P1^0;
sbit wei=P2^7;
sbit duan=P2^6;
sbit s2=P3^0;//启动计时
sbit s3=P3^1;//暂停计时
sbit s4=P3^2;//切换分针、时针调节位
sbit s5=P3^3;//分针或时针 加一
uchar t=0;
uchar s=0;
uchar m=0;
uchar h=0;
uchar te=0;
uchar temp=0; //实现闪烁功能的数值,每temp加一,其数值闪烁一次
//延时
void delay(uchar z){
uchar x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--)
_nop_();
}
//定时器初始化
void T_reput(){
TMOD = 0X11;
TH0=0X4b;
TL0=0Xfd;
TH1=0X4b;
TL1=0Xfd;
EA=1;//系统开放中断
ET0=1;//允许T0中断
ET1=1;//允许T1中断
TR0=1;//启动时钟 0
TR1=1;//启动时钟1
}
//秒针
void miao(uchar z){
uchar shi,ge;
shi= z/10;//求模
ge= z%10;//求余
P0=0Xff;//在位打开之前,先将前一次的P0值(段)清零
wei=1; //开启位选开关
P0=0X7f;
wei=0; //关闭位选开关
duan=1; //开启段选开关
P0=leddate[ge];
duan=0; //关闭段开关
delay(1); //正常刷新延时
P0=0Xff;
wei=1;
P0=0Xbf;
wei&#