原创 电子时钟的设计(三)

2016-3-4 13:47 1346 16 19 分类: MCU/ 嵌入式
一个蛮简单的要用三篇博文也是够够的。主要是我把程序贴得太仔细了。。囧。。应该详略得当,,,好吧。就最后cut掉一点了。。继上面的电子时钟的设计(二)了。
 /******************************************************************
//函 数 名: Time_ProcessDisp()
//功能描述: 
//说明: 钟表模式 。
调用函数: void Time_HorMinDisp(void)
void Time_MonDayDisp(void)
void Time_YearDisp(void)
void Time_HouMinDisp(void)

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

 void Time_ProcessDisp(void )
 {
KeyIn( );
KeyChk( );
if(KeyCvtBuf==KeyOldBuf)
return;
else 
{
KeyOldBuf = KeyCvtBuf;
switch ( KeyCvtBuf)
{
case 0x00 : 
  { return ; }
  case 0x02 : 
    {  
if (ShowPage == 1)     //显示小时:分钟
{   
ShowPage = 2 ;
Time_HorMinDisp( );  //若按KEY2上翻,显示日期
}
else if( ShowPage == 2)  //若继续按KEY2,再上翻 显示  年
{
ShowPage = 3;
Time_MonDayDisp();
}
else if( ShowPage == 3 )  //若继续按KEY2 回到主页面,显示 小时分
{       
ShowPage = 1 ;
Time_YearDisp(); 
}
break ;
  }
case 0x04:
     {  
if( ShowPage == 3 ) //若按KEY3 下翻,显示 日期
{
ShowPage = 2 ;
Time_YearDisp();
}
else if( ShowPage == 2)   //若继续按KEY3 下翻,显示 时间
{
ShowPage = 1 ;
Time_MonDayDisp();
}
else if( ShowPage == 1) //若继续按KEY3 下翻,显示 年份
{
ShowPage = 3 ;
Time_HorMinDisp();
}
 break ;
     }
case 0x08:   //若  按KEY4 返回上一层进入模式设置
{
SetMode = 5; //进入模式设置的选择
DispModePage = 0;
ShowPage = 1 ; //还原初始化的标记
break ;
}
default:{return;}
 }
}
  }

 /*******************************
 函数名: void Set_Time(void)
 功能: 当KEY4按下后,退出显示模式,按KEY1进行模式选择。
  当数码管上显示为--01说明是时钟校对模式,按KEY4确定进入该模式。
按KEY2为加 按KEY3为减,每项设置好后按KEY4键进行确认,当时间设置好后按KEY4键确认并退出
 *********************************/
   void Set_Time(void)
   {    
KeyIn( );
KeyChk( );
if(KeyCvtBuf==KeyOldBuf)
  return;
else if(StFg == 3)
{
Time_YearDisp();
KeyOldBuf = KeyCvtBuf;
switch(KeyCvtBuf)
{
case 0x00:
{return;}
case 0x02:    //KEY2 加
{
YEAR ++ ;
YearFlag ++ ;
Time_YearDisp();
break ;
}
case 0x04:
{
YEAR -- ;
YearFlag -- ;
Time_YearDisp();
break ;
}
case 0x08:
{
    StFg = 2 ;  //当年份修改完成后变为2,进入日期设置
Time_MonDayDisp();
break ;
}
default:{return;}
}
}
else if(StFg == 2)
{
KeyOldBuf = KeyCvtBuf;
switch(KeyCvtBuf)
{
case 0x00:
{return;}
case 0x02:    //KEY2 加
{
if(MONTH == 4 || MONTH == 6 || MONTH == 9 || MONTH == 11)
{
DAY ++;
if(DAY ==31) //
{
DAY = 1;
MONTH  ++ ;
}
Time_MonDayDisp();  
}
else if(MONTH == 2)
{
DAY ++;
if(YearFlag % 4 == 0)
    {
if(DAY == 30) 
{
DAY = 1;
MONTH ++ ;
}
    }
 else if(DAY == 29)
{
DAY = 1;
MONTH ++ ;
}
Time_MonDayDisp();
}
else  //1、3、5、7、9、10、12
{
DAY ++;
if(DAY == 32)
{
DAY = 1;
MONTH  ++ ;
if(MONTH == 13)
{
MONTH = 1;
YEAR ++ ; 
YearFlag  ++ ;
}
}
Time_MonDayDisp();
}
break ;
}

case 0x04:  //-
{
if(MONTH == 4 || MONTH == 6 || MONTH == 9 || MONTH == 11 || MONTH == 2)
{
DAY --;  
if(DAY ==0)
{
DAY = 31;
MONTH  -- ;
}
Time_MonDayDisp();  
}
else if(MONTH == 3)
{  DAY --;
if(YearFlag % 4 == 0)   // || YearFlag == 0 )
    {
if(DAY == 0) 
    {
DAY = 29;
MONTH  -- ; 
}
    }
else if(DAY == 0)
{
DAY = 28;
MONTH  -- ;
}
Time_MonDayDisp();
}
else if(MONTH == 1)
{
DAY --;
if (DAY ==0)
{
DAY =31;
YEAR --;
YearFlag --;  //朕懒得判断了
}
Time_MonDayDisp();
}
else  //3、5、7、9、10、12
{
DAY -- ;
if(DAY == 0)
{
DAY = 30;
MONTH  --;
}
Time_MonDayDisp();
}
break ;
         }
case 0x08:
{
   StFg = 1 ;  //当日期修改完成后变为1
Time_HorMinDisp();
break ;
}
default:{return;}
}
}
    else if(StFg == 1)
{
KeyOldBuf = KeyCvtBuf;
switch(KeyCvtBuf)
{
case 0x00:
{return;}
case 0x02:    //KEY2 加
{
MINUTE ++ ;
if( MINUTE == 60)
{
MINUTE = 0;
HOUR ++ ;
}
Time_HorMinDisp();
break ;
}
case 0x04:
{
MINUTE -- ;
    if( MINUTE == 0)
{
MINUTE = 59;
HOUR -- ;
}
Time_HorMinDisp();
break ;
}
case 0x08:
{
   StFg = 3 ;  //当时间修改完成后变为,3供下一次使用。
  Time_HorMinDisp();
SetMode = 0;    //确定按下后,方可退出时钟的校准模式,回到模式设置首页
DispModePage = 0 ;
break ;
}
     default:{return;}
}
}
   }
其他的函数博主我就不贴了。。。也没啥技术含量的拉了三篇。。怪不好意思的。。囧。。
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2016-3-22 14:06

福利啊!

用户1069018 2016-3-14 17:27

不错,谢谢分享.

用户1703049 2016-3-7 08:31

很好!
相关推荐阅读
用户1868903 2016-04-24 11:12
Cadence 画原理图
    Cadence 里面很多库,但是用多了就会知道,很多芯片库都是没有的,这个时候就需要自己画原理图了。很多工程师为了更快捷的画原理图,都会建立自己的原理图库。    自己建立一个平时用得...
用户1868903 2016-04-03 18:54
Arduino模拟串口
      现在很多人喜欢  Arduino 因为简单好用方便。虽然Arduino的串口只有一个,但是不担心,因为还有其他的IO口可以模拟串口,这篇博文里咱就分享一个用其他IO口模拟串口的exam...
用户1868903 2016-03-27 22:20
学习心得
 最近的一个项目里涉及到文件的打开...
用户1868903 2016-03-10 14:11
学习心得
最近在做一个项目,里面要用到stm32的HTTP网页服务器相关的知识,于是开始学习各种网络知识,都是以前没接触过的。看了一大堆协议,绕得我晚上都睡不踏实了,, 囧。。。网上的资源丰富但是同时也很杂。...
用户1868903 2016-03-04 13:39
电子时钟的设计(二)
上接电子时钟的设计(一)。由于篇幅和板式的限制,将.h和.c 合并在同一个文件,便于大家查看。这里再贴上 模式选择函数和秒表函数。 /*********************************...
EE直播间
更多
我要评论
3
16
关闭 站长推荐上一条 /3 下一条