电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

电子时钟的设计(三)

一个蛮简单的要用三篇博文也是够够的。主要是我把程序贴得太仔细了。。囧。。应该详略得当,,,好吧。就最后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;}

}

}

   }

其他的函数博主我就不贴了。。。也没啥技术含量的拉了三篇。。怪不好意思的。。囧。。

博主
2578920726@qq.com
Sinya.H先森
C语言单片机FPGA还有那个啥
点击跳转