查看: 662|回复: 0

新手练习之如何设计电子时钟(三)

[复制链接]

该用户从未签到

发表于 2016-3-11 10:32:25 | 显示全部楼层 |阅读模式
分享到:
继上面的新手练习之如何设计电子时钟(二)
/******************************************************************
//函 数 名: 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;}
}
}
   }
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /5 下一条

手机版|小黑屋|与非网

GMT+8, 2024-12-19 22:52 , Processed in 0.119707 second(s), 18 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.