#include
***it LED1=P2^0; //数码管1声明 分钟个位
***it LED2=P2^1; //数码管2声明 分钟十位
***it LED3=P2^2; //数码管3声明 小时个位
***it LED4=P2^3; //数码管4声明 小时十位
***it LED8=P0^7; //数码管上的点
***it LED9=P1^0; //秒表显示LED
***it S1 =P3^5; //调时声明
***it S2 =P3^4; //调分声明
***it S4 =P3^2; //外部中断声明
void display(unsigned shishi,unsigned shige,unsigned fenshi,unsigned fenge,unsigned dian); //子函数申明
unsigned int b; //函数声明
unsigned char a,e,miao,fen,shi,shishi,shige,fenshi,fenge,miaoshi,miaoge,dian;
unsigned code wei[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f}; //数组
void main()
{
TMOD=0X10; //选择定时器工作模式
TH1 =0X3C; //设高八位初值
TL1 =0XB0; //设低八位初值
EA =1; //开总中断
ET1 =1; //开T1定时器
TR1 =1; //启动定时器
EX0 =1; //打开外部中断0
while(1)
{
TR1 =1; //启动定时器
if(a==20) //进入20次中断证明1秒时间到了; 成立则执行IF后面语句,不成立则跳过
{
miao++; // 加一秒
a=0; //中断清0
LED9=0; //秒表灯亮
}
if(miao==60) //检测有没有加到60秒
{
fen++; //加一分钟
miao=0; //把秒清0
}
if(fen==60) //检测有没有加到60分钟
{
shi++; //加一小时
fen=0; //把分钟清0
}
if(shi==24) //检测有没有加到24小时
{
shi=0; //小时清0
}
display(shishi,shige,fenshi,fenge,dian); //子函数扫描
}
}
void display(unsigned shishi,unsigned shige,unsigned fenshi,unsigned fenge,unsigned dian)
{
shishi =shi%100/10; //小时十位求余
shige =shi%10; //小时个位求模
fenshi =fen%100/10; //分钟十位求余
fenge =fen%10; //分钟个位求模
LED1=0;
P0=wei[shishi]; //小时十位显示
b=500;
while(b--);
LED1=1;
P0=0XFF;
LED2=0;
P0=wei[shige]; //小时个位显示
b=500;
while(b--);
P0=0X7F;
LED2=1;
P0=0XFF;
LED3=0;
P0=wei[fenshi]; //分钟十位显示
b=500;
while(b--);
LED3=1;
P0=0XFF;
LED4=0;
P0=wei[fenge]; //分钟个位显示
b=500;
while(b--);
LED4=1;
P0=0XFF;
LED2=0;
LED8=~LED8; //点显示
b=500;
while(b--);
LED2=1;
P0=0XFF;
}
void wodee() interrupt 3 //中断组
{
a++;
TH1 =0X3C; //重新装初值
TL1 =0XB0;
LED9=1;
}
void tiaoshi() interrupt 0 //按键中断
{
display(shishi,shige,fenshi,fenge,dian); //进入中断给屏幕扫描
TR1 =0; //关闭定时器
if(S2==0)
{
e=50;
while(e--);
if(S2==0)
{
fen++;
while(!S2);
}
} //检测S2键,给分钟加一
if(S1==0)
{
e=50;
while(e--);
if(S1==0)
{
shi++;
while(!S1);
}
} //检测S2键,给小时加一
if(fen==60)fen=0; //检测分钟是否加到60,是就把分钟清0
if(shi==24)shi=0; //检测小时是否加到24,是就把小时清0
}
//好久以前写的了,因为我自己写的版本太多我也不知道是不是这个,依稀记得要把S4按住、在按调时调分
#include
***it LED1=P2^0; //数码管1声明 分钟个位
***it LED2=P2^1; //数码管2声明 分钟十位
***it LED3=P2^2; //数码管3声明 小时个位
***it LED4=P2^3; //数码管4声明 小时十位
***it LED8=P0^7; //数码管上的点
***it LED9=P1^0; //秒表显示LED
***it S1 =P3^5; //调时声明
***it S2 =P3^4; //调分声明
***it S4 =P3^2; //外部中断声明
void display(unsigned shishi,unsigned shige,unsigned fenshi,unsigned fenge,unsigned dian); //子函数申明
unsigned int b; //函数声明
unsigned char a,e,miao,fen,shi,shishi,shige,fenshi,fenge,miaoshi,miaoge,dian;
unsigned code wei[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f}; //数组
void main()
{
TMOD=0X10; //选择定时器工作模式
TH1 =0X3C; //设高八位初值
TL1 =0XB0; //设低八位初值
EA =1; //开总中断
ET1 =1; //开T1定时器
TR1 =1; //启动定时器
EX0 =1; //打开外部中断0
while(1)
{
TR1 =1; //启动定时器
if(a==20) //进入20次中断证明1秒时间到了; 成立则执行IF后面语句,不成立则跳过
{
miao++; // 加一秒
a=0; //中断清0
LED9=0; //秒表灯亮
}
if(miao==60) //检测有没有加到60秒
{
fen++; //加一分钟
miao=0; //把秒清0
}
if(fen==60) //检测有没有加到60分钟
{
shi++; //加一小时
fen=0; //把分钟清0
}
if(shi==24) //检测有没有加到24小时
{
shi=0; //小时清0
}
display(shishi,shige,fenshi,fenge,dian); //子函数扫描
}
}
void display(unsigned shishi,unsigned shige,unsigned fenshi,unsigned fenge,unsigned dian)
{
shishi =shi%100/10; //小时十位求余
shige =shi%10; //小时个位求模
fenshi =fen%100/10; //分钟十位求余
fenge =fen%10; //分钟个位求模
LED1=0;
P0=wei[shishi]; //小时十位显示
b=500;
while(b--);
LED1=1;
P0=0XFF;
LED2=0;
P0=wei[shige]; //小时个位显示
b=500;
while(b--);
P0=0X7F;
LED2=1;
P0=0XFF;
LED3=0;
P0=wei[fenshi]; //分钟十位显示
b=500;
while(b--);
LED3=1;
P0=0XFF;
LED4=0;
P0=wei[fenge]; //分钟个位显示
b=500;
while(b--);
LED4=1;
P0=0XFF;
LED2=0;
LED8=~LED8; //点显示
b=500;
while(b--);
LED2=1;
P0=0XFF;
}
void wodee() interrupt 3 //中断组
{
a++;
TH1 =0X3C; //重新装初值
TL1 =0XB0;
LED9=1;
}
void tiaoshi() interrupt 0 //按键中断
{
display(shishi,shige,fenshi,fenge,dian); //进入中断给屏幕扫描
TR1 =0; //关闭定时器
if(S2==0)
{
e=50;
while(e--);
if(S2==0)
{
fen++;
while(!S2);
}
} //检测S2键,给分钟加一
if(S1==0)
{
e=50;
while(e--);
if(S1==0)
{
shi++;
while(!S1);
}
} //检测S2键,给小时加一
if(fen==60)fen=0; //检测分钟是否加到60,是就把分钟清0
if(shi==24)shi=0; //检测小时是否加到24,是就把小时清0
}
//好久以前写的了,因为我自己写的版本太多我也不知道是不是这个,依稀记得要把S4按住、在按调时调分
举报