📄 time.c
字号:
/******************************************************************
本程序只供学习使用,未经作者许可,不得用于其它任何用途
欢迎访问我的USB专区:http://group.ednchina.com/93/
欢迎访问我的blog: http://www.ednchina.com/blog/computer00
http://computer00.21ic.org
time.c file
作者:Computer-lov
建立日期: 2008
修改日期: 2008
版本:V1.0
版权所有,盗版必究。
Copyright(C) Computer-lov 2008-2018
All rights reserved
*******************************************************************/
#include "key.h"
#include "uart.h"
#include "lcd1602.h"
#include "ds1302.h"
#include "main.h"
#include "240x.h"
uint8 AlarmTime[4]={0,0,0,0}; //闹钟时间
uint8 AlarmTemperature=50; //报警温度
/********************************************************************
函数功能:将日期转换为需要显示的字符串。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void DateToString(void)
{
DispBuffer[0]='2';
DispBuffer[1]='0';
DispBuffer[2]='0'+(Time[6]>>4); //年
DispBuffer[3]='0'+(Time[6]&0x0F);
DispBuffer[4]='-';
DispBuffer[5]='0'+(Time[4]>>4); //月
DispBuffer[6]='0'+(Time[4]&0x0F);
DispBuffer[7]='-';
DispBuffer[8]='0'+(Time[3]>>4); //日期
DispBuffer[9]='0'+(Time[3]&0x0F);
DispBuffer[10]=' ';
DispBuffer[11]=' ';
DispBuffer[12]='0'+(Time[5]&0x0F); //星期
DispBuffer[13]=0;
}
////////////////////////End of function//////////////////////////////
/********************************************************************
函数功能:将时间转换为需要显示的字符串。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void TimeToString(void)
{
DispBuffer[0]='0'+(Time[2]>>4);
DispBuffer[1]='0'+(Time[2]&0x0F); //小时
DispBuffer[2]=':';
DispBuffer[3]='0'+(Time[1]>>4); //分
DispBuffer[4]='0'+(Time[1]&0x0F);
DispBuffer[5]=':';
DispBuffer[6]='0'+(Time[0]>>4); //秒
DispBuffer[7]='0'+(Time[0]&0x0F);
DispBuffer[8]=0;
}
////////////////////////End of function//////////////////////////////
/********************************************************************
函数功能:显示时间函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void DispTime(void)
{
GetTime(Time);
Prints("Date: ");
DateToString();
Prints(DispBuffer);
#ifdef LCD //如果有LCD,则同时显示到LCD上
if(DispStatus==DISP_TIME)
{
LcdCls();
LcdSetPosition(0x02);
LcdPrints(DispBuffer);
}
#endif
Prints("\r\nTime: ");
TimeToString();
Prints(DispBuffer);
Prints("\r\n");
#ifdef LCD //如果有LCD,则同时显示到LCD上
if(DispStatus==DISP_TIME)
{
LcdSetPosition(0x44);
LcdPrints(DispBuffer);
}
#endif
}
////////////////////////End of function//////////////////////////////
/********************************************************************
函数功能:设置时间函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void DispSetTime(void)
{
uint8 SetDigit=1;
uint8 on=0;
uint8 TimeModified=0;
uint8 t;
uint8 NeedRefresh;
uint16 OldTick;
Prints("Waiting for input: ");
while(1)
{
if(KeyDown) //有按键按下
{
if(KeyDown&(KEY1|KEY2|KEY3|KEY8))return; //按下这些键放弃设置时间,返回
if(KeyDown&KEY4)
{
if(TimeModified) //如果对时间做了修改
{
BeepOn(); //蜂鸣器响,提示正在保存设置
SetTime(Time); //保存设置的时间
BeepOff();
}
DispStatus=DISP_TIME; //切换回时间显示状态
KeyDown&=~KEY4;
return;
}
if(KeyDown&KEY5) //切换调整位
{
SetDigit++; //切换到下一位
if(SetDigit>=14)SetDigit=1; //到最后一位,返回
KeyDown&=~KEY5;
NeedRefresh=1; //需要刷新显示
}
if(KeyDown&KEY6) //减1调整
{
TimeModified=1; //修改了时钟
NeedRefresh=1; //需要刷新显示
switch(SetDigit) //调整不同的位
{
case 1: //年高位
t=Time[6]>>4;
if(t>0)t--;
else t=9;
Time[6]&=0x0F;
Time[6]|=t<<4;
break;
case 2: //年低位
t=Time[6]&0x0F;
if(t>0)t--;
else t=9;
Time[6]&=0xF0;
Time[6]|=t;
break;
case 3: //月高位
t=(Time[4]>>4)&0x01;
if(t!=0)t=0;
else
{
t=1;
Time[4]&=0xF0;
}
Time[4]&=0x0F;
Time[4]|=t<<4;
break;
case 4: //月低位
t=Time[4]&0x0F;
if((Time[4]>>4)==0)
{
if(t>0)t--;
else t=9;
}
else
{
if(t>0)t--;
else t=2;
}
Time[4]&=0xF0;
Time[4]|=t;
break;
case 5: //天高位
t=(Time[3]>>4)&0x03;
if((Time[4]&0x1F)==2)
{
if(t>0)t--;
else t=2;
}
else
{
if(t>0)t--;
else
{
t=3;
Time[3]&=0xF0;
}
}
Time[3]&=0x0F;
Time[3]|=t<<4;
break;
case 6: //天低位
t=Time[3]&0x0F;
if(((Time[3]>>4)&0x03)==3) //最多只能到31号
{
if(t!=0)t=0;
else t=1;
}
else
{
if(t>0)t--;
else t=9;
}
Time[3]&=0xF0;
Time[3]|=t;
break;
case 7: //星期
t=Time[5]&0x07;
if(t>1)t--;
else t=7;
Time[5]=t;
break;
case 8: //小时高位
t=(Time[2]>>4)&0x03;
if(t>0)t--;
else t=2;
Time[2]&=0x0F;
Time[2]|=t<<4;
break;
case 9: //小时低位
t=Time[2]&0x0F;
if(((Time[2]>>4)&0x03)==2)
{
if(t>0)t--;
else t=3;
}
else
{
if(t>0)t--;
else t=9;
}
Time[2]&=0xF0;
Time[2]|=t;
break;
case 10: //分高位
t=(Time[1]>>4)&0x07;
if(t>0)t--;
else t=5;
Time[1]&=0x0F;
Time[1]|=t<<4;
break;
case 11: //分低位
t=Time[1]&0x0F;
if(t>0)t--;
else t=9;
Time[1]&=0xF0;
Time[1]|=t;
break;
case 12: //秒高位
t=(Time[0]>>4)&0x07;
if(t>0)t--;
else t=5;
Time[0]&=0x0F;
Time[0]|=t<<4;
break;
case 13: //秒低位
t=Time[0]&0x0F;
if(t>0)t--;
else t=9;
Time[0]&=0xF0;
Time[0]|=t;
break;
}
KeyDown&=~KEY6;
}
if(KeyDown&KEY7) //加1调整
{
TimeModified=1; //修改了时钟
NeedRefresh=1; //需要刷新显示
switch(SetDigit) //调整不同的位
{
case 1: //年高位
t=Time[6]>>4;
if(t<9)t++;
else t=0;
Time[6]&=0x0F;
Time[6]|=t<<4;
break;
case 2: //年低位
t=Time[6]&0x0F;
if(t<9)t++;
else t=0;
Time[6]&=0xF0;
Time[6]|=t;
break;
case 3: //月高位
t=(Time[4]>>4)&0x01;
if(t!=0)t=0;
else
{
t=1;
Time[4]&=0xF0;
}
Time[4]&=0x0F;
Time[4]|=t<<4;
break;
case 4: //月低位
t=Time[4]&0x0F;
if((Time[4]>>4)==0)
{
if(t<9)t++;
else t=0;
}
else
{
if(t<2)t++;
else t=0;
}
Time[4]&=0xF0;
Time[4]|=t;
break;
case 5: //天高位
t=(Time[3]>>4)&0x03;
if((Time[4]&0x1F)==2)
{
if(t<2)t++;
else t=0;
}
else
{
if(t<3)t++;
else t=0;
if(t==3)Time[3]&=0xF0;
}
Time[3]&=0x0F;
Time[3]|=t<<4;
break;
case 6: //天低位
t=Time[3]&0x0F;
if(((Time[3]>>4)&0x03)==3) //最多只能到31号
{
if(t!=0)t=0;
else t=1;
}
else
{
if(t<9)t++;
else t=0;
}
Time[3]&=0xF0;
Time[3]|=t;
break;
case 7: //星期
t=Time[5]&0x07;
if(t<7)t++;
else t=1;
Time[5]=t;
break;
case 8: //小时高位
t=(Time[2]>>4)&0x03;
if(t<2)t++;
else t=0;
Time[2]&=0x0F;
Time[2]|=t<<4;
break;
case 9: //小时低位
t=Time[2]&0x0F;
if(((Time[2]>>4)&0x03)==2)
{
if(t<3)t++;
else t=0;
}
else
{
if(t<9)t++;
else t=0;
}
Time[2]&=0xF0;
Time[2]|=t;
break;
case 10: //分高位
t=(Time[1]>>4)&0x07;
if(t<5)t++;
else t=0;
Time[1]&=0x0F;
Time[1]|=t<<4;
break;
case 11: //分低位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -