多功能电子时钟说明文档.docx

上传人:b****6 文档编号:3266441 上传时间:2022-11-21 格式:DOCX 页数:16 大小:197.57KB
下载 相关 举报
多功能电子时钟说明文档.docx_第1页
第1页 / 共16页
多功能电子时钟说明文档.docx_第2页
第2页 / 共16页
多功能电子时钟说明文档.docx_第3页
第3页 / 共16页
多功能电子时钟说明文档.docx_第4页
第4页 / 共16页
多功能电子时钟说明文档.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

多功能电子时钟说明文档.docx

《多功能电子时钟说明文档.docx》由会员分享,可在线阅读,更多相关《多功能电子时钟说明文档.docx(16页珍藏版)》请在冰豆网上搜索。

多功能电子时钟说明文档.docx

多功能电子时钟说明文档

多功能电子时钟

一、功能:

1.基本时钟功能,显示时间、日期、闹钟、秒

显示方式:

1)、时间:

16:

25:

38,秒显示每秒变动一次;

2)、日期:

090709,日期显示有两种,一种是不动显示,一种是与时间交替显示;

3)、闹钟:

06:

28

4)、秒:

:

30,秒前面的“:

”每秒闪一次

2.按键功能:

能通过两个按键来调节时间,日期,闹钟等

3.遥控功能:

能通过遥控器上的两个按键来调节时间,日期,闹钟等

4.红外解码显示功能:

能将解出来的遥控器红外编码通过两种方式显示出来

1)、通过P1口的8个LED灯,用二进制的形式显示出来;

2)、通过LCD1602,用2位数字将解出来的码显示出来;

5.温度显示功能:

能将环境的温度显示出来,精确度为0.1℃;

6.能自动提示人体对环境温度的感知程度,分别为“Cold”、“Warm”、“Hot”,即“冷”、“暖和”、“热”;

7.能自动显示当前闹钟所处的状态,即为开还是关闭状态;

8.当前时间与设定的闹钟时间一致时,闹钟闹响。

并能够通过两个按键或者遥控器止闹;

9.整点报时功能;

10.通过短响一下来判断按键是否按下;

11.将星期作为一个单独的显示,并能通过按键或者遥控器调节;

12.看门狗功能,能够在程序跑飞的情况下将系统自动复位,且从程序跑飞到复位不超过1S钟,与I2C配合,最大程度保证了程序跑飞后

时间的准确性;

二、状态显示转换图:

状态1:

当前时间(16:

25:

38);

备注:

秒显示每秒变动一次;

状态2:

显示日期(090709);

状态3:

显示闹钟(06:

28);

状态4:

显示秒(:

30);

备注:

秒前面的“:

”每秒闪一次

状态5:

交替显示时间和日期;

备注:

每秒切换显示

状态6:

同状态4;

状态7:

调年(09);

备注:

其它内容(如温度、星期、红外解码等)照常显示

状态8:

调月(09);

备注:

其它内容(如温度、星期、红外解码等)照常显示

状态9:

调日(09);

备注:

其它内容(如温度、星期、红外解码等)照常显示

状态10:

调星期

(1);

备注:

为了区别,调星期的时候星期会每秒闪一次

状态11:

调闹钟时(06);

备注:

其它内容(如温度、星期、红外解码等)照常显示

状态12:

调闹钟分(28);

备注:

其它内容(如温度、星期、红外解码等)照常显示

状态13:

调小时(07);

备注:

其它内容(如温度、星期、红外解码等)照常显示

状态14:

调分钟(30);

备注:

其它内容(如温度、星期、红外解码等)照常显示,这时,秒清零,时间暂停

状态15:

显示停(16:

25:

38);

备注:

显示一个停止的时间,这时时间不走了;

三、按键转换图

按键A转换图(红外键A):

1)、1.当前时间->5.交替显示时间和日期->7.调年->8.调月->9.调日->10.调星期->11.调闹钟时->12.调闹钟分->13.调小时->14.调分(停表)->15.显示停->1.当前时间;

2)、4(或6).显示秒->7.调年;

按键B转换图(红外键B):

1)、1.当前时间->2.显示日期->3.显示脑钟->4.显示秒->1.显示时间;

2)、5.交替显示时间和日期->6.显示秒->5.交替显示时间和日期;

3)、7.调年->年加一;

4)、8.调月->月加一;

5)、9.调日->日加一;

6)、10.调星期->星期加一;

7)、11.调闹钟时->闹钟时加一;

8)、12.调闹钟分->闹钟分加一;

9)、13.调小时->小时加一;

10)、14.调分(停表)->分加一,并将秒清零,停表;

四、硬件电路图

五、实际显示效果图

 

1、硬件组成

2、显示效果

3、遥控调试时间状态下

4、LED用二进制显示当前红外编码状态;

六、主程序:

(程序比较长,整个代码的CODE为4866Byte,是通过多个C文件来实现,通过调用头文件的方式来调用函数,可以再打开Keil工程文件看)

#include"Initial.h"

#include"Display.h"

#include"KeyandSpeaker.h"

/*******************************************************************************

程序说明:

主函数

入口:

返回值:

备注:

主循环里面的执行时间过长,有一秒一上了,主要是因为LCD只能用延时的方法来跳过查忙,想办法将里面的时间缩短。

********************************************************************************/

voidmain(void)

{

Init_MCU();//初始化MCU

Init_I2C();//初始化I2C

Init_LCD();//初始化LCD1602

Init_Time();//先初始化时间和先读I2C有区别。

先初始化时间:

以后开机的时间是从I2C读出,初始化失效。

//先读I2C:

第一次读出的是乱码,因为I2C里面没有写入想要的数据。

故第一次下载程序到MCU要后初始化MCU

//然后在把顺序改过来,即先初始化MCU,然后读I2C。

//将I2C里面的时间、日期、星期、闹钟等信息先读出来

Second=RandomRead_I2C(0x00);

Delay_Nms

(1);

Minute=RandomRead_I2C(0x01);

Delay_Nms

(1);

Hour=RandomRead_I2C(0x02);

Delay_Nms

(1);

Day=RandomRead_I2C(0x03);

Delay_Nms

(1);

Mounth=RandomRead_I2C(0x04);

Delay_Nms

(1);

Year=RandomRead_I2C(0x05);

Delay_Nms

(1);

Alarm_Hour=RandomRead_I2C(0x06);

Delay_Nms

(1);

Alarm_Minute=RandomRead_I2C(0x07);

Delay_Nms

(1);

Week=RandomRead_I2C(0x08);

Delay_Nms

(1);

//Init_Time();

//主循环

while

(1)

{

WDTRST=0x3c;//由于在按键调节分钟的时候要停定时器2,这时不能在定时器喂狗,故到主程序里喂狗;

SpitTime();//拆分时间数据

SpitDate();//拆分日期数据

SpitAlarm();//拆分闹钟数据

KeyAFunc();//按键A检测函数

KeyBFunc();//按键B检测函数

Display();//显示函数

tmpchange();//温度转换函数,将其与温度读取函数隔远,让其有充足时间转换;

LCD_WriteNChar(13,1,2,"D:

");//在星期前面写入"D:

",以方便辨认;

//LCD_WriteOneChar(15,1,Week+'0');

//闹钟模块

if((Alarm_Hour==Hour)&&(Alarm_Minute==Minute))

{

if(AlarmStopFlag==0)

{

LCD_WriteNChar(5,1,6,"AR:

On");//智能显示当前闹钟状态

Alarm_SP_Fun();//闹响

}

}//闹钟功能

else

{

LCD_WriteNChar(5,1,6,"AR:

Off");

AlarmStopFlag=0;

}

//整点报时模块;

if((Minute==00)&&(Second<1))

{

Pip_SP_Fun();

}

//将时间、日期、星期、闹钟等信息写入I2C;

if(Write_I2C_Flag==1)

{

Write_I2C_Flag=0;

WriteByte_I2C(0x00,Second);

Delay_Nms

(1);

WriteByte_I2C(0x01,Minute);

Delay_Nms

(1);

WriteByte_I2C(0x02,Hour);

Delay_Nms

(1);

WriteByte_I2C(0x03,Day);

Delay_Nms

(1);

WriteByte_I2C(0x04,Mounth);

Delay_Nms

(1);

WriteByte_I2C(0x05,Year);

Delay_Nms

(1);

WriteByte_I2C(0x06,Alarm_Hour);

Delay_Nms

(1);

WriteByte_I2C(0x07,Alarm_Minute);

Delay_Nms

(1);

WriteByte_I2C(0x08,Week);

Delay_Nms

(1);

}

//读取温度

TempValue=tmp();

//拆分温度

temp[0]=TempValue/100+'0';

temp[1]=TempValue%100/10+'0';

temp[3]=TempValue%10+'0';

LCD_WriteNChar(0,1,4,temp);//显示温度

//智能显示环境温度对人体体感模块

if(TempValue>25)

{

LCD_WriteNChar(3,0,4,"Hot");

}

elseif((TempValue>=15)&&(TempValue<=25))

{

LCD_WriteNChar(3,0,4,"Warm");

}

else

{

LCD_WriteNChar(3,0,4,"Cold");

}

//红外解码模块

if(IrOK==1)

{

show[1]=Im[2]&0x0F;//取键码的低四位

show[0]=Im[2]>>4;

IrOK=0;

if(show[1]>0x09)

{

show[1]='A'+show[1]-0x0a;

}

else

{

show[1]+='0';

}

if(Im[2]==0x01)

{

IrFlag1=1;

}

elseif(Im[2]==0x02)

{

IrFlag2=1;

}

else

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1