一个蛮简单的要用三篇博文也是够够的。主要是我把程序贴得太仔细了。。囧。。应该详略得当,,,好吧。就最后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;}
}
}
}
其他的函数博主我就不贴了。。。也没啥技术含量的拉了三篇。。怪不好意思的。。囧。。
关闭
站长推荐
/3
用户377235 2016-3-22 14:06
用户1069018 2016-3-14 17:27
用户1703049 2016-3-7 08:31