失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 51单片机独立按键数码管可调时钟显示程序

51单片机独立按键数码管可调时钟显示程序

时间:2020-12-18 20:32:46

相关推荐

51单片机独立按键数码管可调时钟显示程序

/**************************************************************************

独立按键数码管时钟显示程序

***************************************************************************/

#include <REGX52.H>

#include "Nixie.h"

#include "Delay.h"

#include "Key.h"

#include "Timer0.h"

bit TimeSetFlashFlag=0;//闪烁标志位

unsigned char KeyNum;//按键值

unsigned char MODE=0;//模式切换

unsigned char TimeSetSelect;//时间设置

unsigned char Hour=8,Min=30,Sec=00;//时分秒

void TimeShow(void)//时间显示功能

{

while(1)

{

if(TimeSetSelect==0 && TimeSetFlashFlag==1){Nixie(1,11);}

else {Nixie(1,Hour/10);}

if(TimeSetSelect==1 && TimeSetFlashFlag==1){Nixie(2,11);}

else {Nixie(2,Hour%10);}

Nixie(3,10);

if(TimeSetSelect==2 && TimeSetFlashFlag==1){Nixie(4,11);}

else {Nixie(4,Min/10);}

if(TimeSetSelect==3 && TimeSetFlashFlag==1){Nixie(5,11);}

else {Nixie(5,Min%10);}

Nixie(6,10);

if(TimeSetSelect==4 && TimeSetFlashFlag==1){Nixie(7,11);}

else {Nixie(7,Sec/10);}

if(TimeSetSelect==5 && TimeSetFlashFlag==1){Nixie(8,11);}

else {Nixie(8,Sec%10);}

}

}

void main()

{

Timer0Init();

while(1)

{

KeyNum=Key();//读取键码

TimeShow();//调用显示

}

}

void Timer0_Routine() interrupt 1

{

static unsigned int T0Count,T1Count;

TL0 = 0x18; //设置定时初值

TH0 = 0xFC; //设置定时初值

T0Count++;

T1Count++;

KeyNum=Key();//读取键码

if(T0Count>=300)//每500ms进入一次

{

T0Count=0;

if(MODE==1)

{

TimeSetFlashFlag=!TimeSetFlashFlag;//闪烁标志位取反

}

}

if(KeyNum==2&&MODE==1)

{

TimeSetSelect++;//设置选择位加1

TimeSetSelect%=6;//越界清零

}

switch(TimeSetSelect)

{

case 0: //数码管1

if(KeyNum==3&&MODE==1)

{

if(Hour<20)

{

Hour+=10;}

else{Hour+=3;}

if(Hour>23){Hour=0;}

if(Hour<0){Hour=23;}

}

else if(KeyNum==4&&MODE==1)

{

Hour-=10;

if(Hour>23){Hour=0;}

if(Hour<0){Hour=23;}

}

break;

case 1: //数码管2

if(KeyNum==3&&MODE==1)

{Hour++;

if(Hour>23){Hour=0;}

if(Hour<0){Hour=23;}

}

else if(KeyNum==4&&MODE==1)

{Hour--;

if(Hour>23){Hour=0;}

if(Hour<0){Hour=23;}

}

break;

case 2: //数码管4

if(KeyNum==3&&MODE==1)

{

if(Min<50)

{Min+=10;}

else{Min+=9;}

if(Min>59){Min=0;}

if(Min<0){Min=59;}

}

else if(KeyNum==4&&MODE==1)

{Min-=10;

if(Min>59){Min=0;}

if(Min<0){Min=59;}

}

break;

case 3: //数码管5

if(KeyNum==3&&MODE==1)

{Min++;

if(Min>59){Min=0;}

if(Min<0){Min=59;}

}

else if(KeyNum==4&&MODE==1)

{Min--;

if(Min>59){Min=0;}

if(Min<0){Min=59;}

}

break;

case 4: //数码管7

if(KeyNum==3&&MODE==1)

{

if(Sec<50)

{Sec+=10;}

else{Sec+=9;}

if(Sec>59){Sec=0;}

if(Sec<0){Sec=59;}

}

else if(KeyNum==4&&MODE==1)

{Sec-=10;

if(Sec>59){Sec=0;}

if(Sec<0){Sec=59;}

}

break;

case 5: //数码管8

if(KeyNum==3&&MODE==1)

{Sec++;

if(Sec>59){Sec=0;}

if(Sec<0){Sec=59;}

}

else if(KeyNum==4&&MODE==1)

{Sec--;

if(Sec>59){Sec=0;}

if(Sec<0){Sec=59;}

}

break;

}

if(KeyNum==1)//判断模式

{

MODE++;

MODE%=2;}

if(MODE==0)

{

if(T1Count>=1000) //定时器分频,1s

{

T1Count=0;

Sec++; //1秒到,Sec自增

if(Sec>=60)

{

Sec=0; //60秒到,Sec清0,Min自增

Min++;

if(Min>=60)

{

Min=0; //60分钟到,Min清0,Hour自增

Hour++;

if(Hour>=24)

{

Hour=0; //24小时到,Hour清0

}

}

}

}

}

}

完整代码私信我

如果觉得《51单片机独立按键数码管可调时钟显示程序》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。