⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 51edn开发板程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************
   本程序只供学习使用,未经作者许可,不得用于其它任何用途
			
		欢迎访问我的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 + -