栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

 



#include

#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

     }

    }

   }

  }

 }

}

完整代码私信我

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号