/********************************************
//*****文件名:Mode.c
//*****
说明:
每次按KEY4进入模式选择 显示--P_
按KEY1 键进行模式的切换,
显示--P1 钟表校对模式,按KEY4后进入该功能 ,调用函数Set_Time();
--P2 秒表模式 ,按KEY4后进入该功能,调用函数 Cnt_Time()
--P3 定时器模式,按KEY4后进入该功能,调用函数 Limt_Time ();
--P4 闹钟模式 ,按KEY4后进入该功能,调用函数 Rin_Time() ;
uchar SetMode = 0 ; //时间的显示//1 :钟表校对模式, 2:秒表模式 3:定时器模式 4:闹钟模式
按KEY1切换显示的模式,按KEY4确定当前显示的模式,选择进入该模式。
**********************************************/
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
//=======================变量=================================
uchar DispModePage = 0 ; //显示的页面的标记,1为P1,2为P2,3为P3。
extern uchar SetMode ;//用于模式的选择
extern uchar data KeyCvtBuf ;
extern uchar data KeyOldBuf ;
//**************函数调用********
extern void KeyIn(void);
extern void KeyChk(void);
extern void LedDisp(uchar i, uchar j, uchar m, uchar n) ;
/********************************************
//*****函数名:ModeSetDisp()
//*****函数功能: 数码管显示模式
//*****输入参数: 无
//*****输出参数:无
说明:uchar SetMode = 0 ; //时间的显示//1 :钟表校对模式, 2:秒表模式 3:定时器模式 4:闹钟模式
P1为钟表校对模式,调用函数Set_Time();
P2为 秒表模式 ,调用函数 Cnt_Time()
p3为定时器模式,调用函数 Limt_Time ();
P4为闹钟模式 ,调用函数 Rin_Time() 。
按KEY1切换显示的模式,按KEY4确定当前显示的模式,选择进入该模式。
**********************************************/
void ModeSetDisp (void )
{
KeyIn();
KeyChk();
if(KeyCvtBuf==KeyOldBuf)
return;
else if (DispModePage == 0)
{
LedDisp(21 ,21, 17 ,24); //显示--P_
DispModePage = 1;
}
else if (DispModePage != 0 ) //--P_ 消隐
{
KeyOldBuf = KeyCvtBuf;
switch ( KeyCvtBuf)
{
case 0x00 :
{ return ; }
case 0x01 :
{
if (DispModePage ==1) //当前显示为P1,为时钟校对模式 ,再按KEY1,切换至P2模式
{
LedDisp(21 ,21, 17 ,1);
DispModePage = 2 ;
}
else if(DispModePage == 2) //当前显示为P2,为秒表模式 ,再按KEY1,切换至P3模式
{
LedDisp(21 ,21, 17 ,2);
DispModePage = 3 ;
}
else if(DispModePage == 3) //当前显示为P3,为定时器模式,再按KEY1,切换至P4模式
{
LedDisp(21 ,21, 17 ,3);
DispModePage = 4 ;
}
else if( DispModePage == 4) //当前显示为P4,为定时器模式,再按KEY1,切换至P1模式
{
LedDisp(21 ,21, 17 ,4);
DispModePage = 1;
}
break ;
}
case 0x08 :
{
if( DispModePage == 2 ) //显示为P1,为时钟校对模式
{
DispModePage= 1; //退出时还原
SetMode = 1;
}
else if( DispModePage == 3 ) //显示为P2,为时秒表模式
{
DispModePage = 2; //退出时还原
SetMode = 2 ;
}
else if(DispModePage == 4) //当前显示为P3,为定时器模式,
{
DispModePage = 3; //退出时还原
SetMode = 3 ;
}
else if(DispModePage == 1) //当前显示为P4,为闹钟模式
{
DispModePage = 4; //退出时还原
SetMode = 4 ;
}
break ;
}
}
}
}
/************************************************
//文件名: clock.c
// 说明: 时钟功能文件,
电子表时钟初始化为2012年10月13日06点00分
四个按键的定义: KEY1 S0 ; KEY2 S1 ; KEY3 S3 ; KEY4 S4 ;
演示步骤: 1. 钟表功能:
初始化主页面上显示2012年10月13日06点00分。 首先四个数码管显示06:04
(1)不对此页面进行设置。查看年月日:按KEY2表示上翻查看日期,再按KEY2上翻查看年;
类似地,按KEY3下翻查看年分显示 2012 ;
再按KEY3表示查看日期,显示 10 -13。
按KEY4跳至功能选择 .
(2)功能模式的选择。按KEY4进入此页的设置(从年开始进行设置),显示--P_ 按KEY1键进行功能切换。
*************************************************/
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
//=======================变量=================================
//显示小时分钟时为1 ,显示 日期 标志 为2// 显示年的标志 3 //模式页时为0// 4:不显示--P_
uchar ShowPage = 1 ; //数码管显示页面标记,初始化为1,显示小时分
extern uchar SetMode;
extern uchar SetFlag ; //1 :钟表模式,2:计时模式。。。。
extern uchar DispModePage ;
uchar StFg = 3 ; //修改标志,初始化为3,当年份修改完成后变为2,当日期修改完成变为1,当时间设置后变为0;
uchar SECOND = 3 ; // 秒
uchar MINUTE = 14 ; // 分
uchar HOUR = 6 ; // 6 时
uchar DAY = 13 ; // 13日
uchar MONTH = 10 ; // 10月
uint YEAR = 2012 ; // 2012年
uchar YearFlag = 0 ;
extern uchar DispModePage ;
extern uchar SecondFlag ; //每秒的标志位
uchar SecondFlagOld ; //每秒的上一次标志位
//******************外部变量**********************
extern uchar data KeyChkBuf ;
extern uchar data KeyOldBuf ;
extern uchar data KeyCvtBuf ;
extern DataPort ;
//=======================调用函数===================================
extern void LedDisp(uchar i, uchar j, uchar m, uchar n) ;
extern void Led_Init(void);
extern void MnKey(void);
extern void KeyIn(void);
extern void KeyChk(void);
/******************************************************************
//函 数 名: Time_Process()
//功能描述:
//说明:时间进程函数,时间: 秒、分、小时、日、月、年
********************************************************************/
void Time_Process(void)
{
if(SecondFlag != SecondFlagOld)
{
SECOND ++ ;
SecondFlagOld = SecondFlag;
if(SECOND == 60 )
{
MINUTE ++;
SECOND = 0;
if(MINUTE ==60)
{
HOUR++;
MINUTE = 0;
if(HOUR == 24)
{
HOUR = 0;
if(MONTH == 4 || MONTH == 6 || MONTH == 9 || MONTH == 11)
{
DAY ++;
if(DAY ==31)
{
DAY = 1;
MONTH ++ ;
}
}
else if(MONTH == 2)
{
DAY ++ ;
if(YearFlag == 4||YearFlag == 0)
{
if(DAY == 30)
DAY = 1;
}
else if(DAY == 29)
{
DAY = 1;
}
}
else //1、3、5、7、9、10、12
{
DAY ++;
if(DAY == 32)
{
DAY = 1;
MONTH ++ ;
if(MONTH == 13)
{
MONTH = 1;
YEAR ++ ;
YearFlag ++ ;
}
}
}
}
}
}
}
}
文章评论(0条评论)
登录后参与讨论