




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#include#includesbit_pin.h#includeuchar.h#include24c08.h#includekey_scan.h#include12864.h#includeds1302.h#includedht11.h#includevoice.hvoid Delay_main(uint z) /* 001 主函数延时 */uint x,y;for(x=z;x0;x-)for(y=110; y0;y-); void Rd_time() /*002 读取并显示时间 ds1302 */ read_rtc(); time_pros(); /时间转换 Disp_SJ(0x98+3,time0,time1);/Disp_SJ(0x98+4,0xa1-0x30,0xc3-0x30); /冒号Disp_SJ(0x98+5,time2,time3);/Disp_SJ(0x98+6,0xa1-0x30,0xc3-0x30);/冒号Disp_SJ(0x98+7,time4,time5);/时分秒/Disp_HZ(0x80,nian,8); / *年*月*日*Disp_SJ(0x81,date0,date1); / 年月日Disp_SJ(0x80+3,date2,date3);Disp_SJ(0x80+5,date4,date5);Send(0,0x90+6);/灯的图标Send(1,0x0f);/* 003 初始化液晶屏 12864 * line1=2011年04月10日;/12864 line2=温度:00; line3=湿度:00%RH ; line4=时间:12:00:00;*/void Init_12864()/初始化液晶屏 12864 Init_Lcd();/初始化12864Disp_HZ(0x80,line1,8);Disp_HZ(0x90,line2,8);Disp_HZ(0x88,line3,8);Disp_HZ(0x98,line4,8);void Display_dht11() /*004 温湿度读取 显示 dht11 */ RH();Disp_SJ(0x88+3,RH_shi,RH_ge);Disp_SJ(0x90+3,T_shi,T_ge);Disp_SJ(0x90+4,0xA1-0X30,0xE6-0X30); /显示摄氏度void init_INT0() /* 005 外部中断设置 & & 零点提取 */EA=1; /IT0=1; / void init_INT0_2() /开关灯 显示 调节灯的亮度 if(key=6)flag_int0=flag_int0; /开关灯标志 1为开中断 0为关中断key_led=key_led; /2号控制开关key=0;if(flag_int0)/开灯时EX0=1;if(key=1&t_delay=1)t_delay-; key=0; Disp_SJ(0x90+7,t_delay/10,t_delay%10); /显示灯的亮度else EX0=0; key_led=0; /2号控制开关 清零 Send(0,0x97); /显示灯的亮度Send(1,0x20);Send(1,0x20); key_led=0; /2号控制开关 清零 void voice_sp() /* 006 语音报时 */if(key=8)if(time0=1) read_voice(time0+2);/读出要发的声音if(time0=2)read_voice(12); /十if(time1=0)if(time0=0)read_voice(time1+2);/读出要发的声音 elseread_voice(time1+2);/读出要发的声音read_voice(15); /点read_voice(time2+2);/读出要发的声音if(time2=1)read_voice(12); /十if(time3!=0)read_voice(time3+2);/读出要发的声音read_voice(18); /分key=0; void pir() /* 007 热释电红外 */bit flag_pir=0; / 热释电红外开关标志/sbit pir_pin=P15;/人体热释电 引脚 uchar delay_pir1,delay_pir2;/红外延时if(flag_int0=1) /开灯时执行if(key=3) flag_pir=flag_pir; key=0;if(flag_pir=1)/开红外 if(pir_pin=1) /delay_pir1=time2*10+time3+;/关灯的时间 十进制delay_pir1=time4*10+time5+10;/关灯的时间 十进制key_led=1; /2号控制开关 开启led=0; / else delay_pir2=time2*10+time3;/现在时间 if(delay_pir25) delay_pir2+=60; if(delay_pir1=delay_pir2) key_led=0; /2号控制开关 关断 led=1;/ else key_led=1; /2号控制开关 关断 led=1;/ void read_alarm()/* 008 在EEprom读出定时数据 并存储与 alarm_24c08 */uchar i;for(i=0;i=11;i+)alarm_24c08i=Read24c08(i); /在地址rom读出数据返回给函数read24c08 void write_alarm()/ 将 alarm_24c08 写入EEprom */uchar i;for(i=0;i=6) lie=0;key=0; switch (lie) case 0:lie_addr=0x91;alarm_addr=0x91;break;case 1:lie_addr=0x93;alarm_addr=0x93;break;case 2:lie_addr=0x95;alarm_addr=0x95;break; case 3:lie_addr=0x89;alarm_addr=0x8d;break;case 4:lie_addr=0x8b;alarm_addr=0x9f;break;case 5:lie_addr=0x8d;break; void alarm() /*009 闹钟 时钟 */uchar set_temp;if(key=2)if(flag_alarm=1)flag_alarm+;/flag_alarm 1为时间设置 2 为闹钟设置 0为退出elseflag_alarm=0;key=0;if(flag_alarm=1) /时间设置 Send(0,0x01); /*清屏,将DDRAM的位址计数器调整为“00H”*/Disp_HZ(0x80,set_time,8); / 请您输入时间Disp_SJ(0x88+1,time0,time1);Disp_SJ(0x88+2,0xa1-0x30,0xc3-0x30); /冒号Disp_SJ(0x88+3,time2,time3);Disp_SJ(0x88+4,0xa1-0x30,0xc3-0x30);/冒号Disp_SJ(0x88+5,time4,time5);/时分秒Disp_HZ(0x90,nian,8); / *年*月*日*Disp_SJ(0x91,date0,date1); / 年月日Disp_SJ(0x93,date2,date3);Disp_SJ(0x95,date4,date5);key_scan();fx_scan(); while(flag_alarm=1) /时间设置循环key_scan();if(key=2) /再次判断if(flag_alarm=100)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=100;set_temp-;down=0;if(lie=1)/月设置if(up=1)/加 set_temp+;if(set_temp=13)set_temp=1;up=0;if(down=1) / 减去 if(set_temp=1) set_temp=13;set_temp-;down=0; if(lie=2)/日设置if(up=1)/加 set_temp+;if(set_temp=32)set_temp=1;up=0;if(down=1) / 减去 if(set_temp=1) set_temp=32;set_temp-;down=0;if(lie=3) /时设置if(up=1)/加 set_temp+;if(set_temp=24)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=24;set_temp-;down=0;if(lie=4) /分设置if(up=1)/加 set_temp+;if(set_temp=60)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=60;set_temp-;down=0;if(lie=5) /秒设置if(up=1)/加 set_temp+;if(set_temp=60)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=60;set_temp-;down=0;weilie*2=set_temp/10;weilie*2+1=set_temp%10;Disp_SJ(lie_addr,weilie*2,weilie*2+1);time_datalie=weilie*2*16+weilie*2+1; set_rtc();lie_addr=0;alarm_addr=0;lie=0; if(flag_alarm=2) /闹钟设置 Send(0,0x01); /*清屏,将DDRAM的位址计数器调整为“00H”*/read_alarm();Disp_HZ(0x80,set_alarm1,8); / 语音闹钟Disp_HZ(0x88,set_alarm2,8); / 响铃时间: 00分Disp_HZ(0x98,set_alarm3,8); /是否打开闹铃: 否Disp_SJ(0x90+1,alarm_24c080,alarm_24c081);Disp_SJ(0x90+2,0xa1-0x30,0xc3-0x30); /冒号Disp_SJ(0x90+3,alarm_24c082,alarm_24c083);Disp_SJ(0x90+4,0xa1-0x30,0xc3-0x30);/冒号Disp_SJ(0x90+5,alarm_24c084,alarm_24c085);/时分秒Disp_SJ(0x8d,alarm_24c086,alarm_24c087);/响铃时间Disp_SJ(0x9f,alarm_24c088,alarm_24c089);/是否/key_scan();/fx_scan(); lie=0;up=0;down=0;alarm_addr=0x91;while(flag_alarm=2) /闹钟设置循环key_scan();if(key=2) /再次判断if(flag_alarm=24)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=24;set_temp-;down=0; Send(0,alarm_addr);flash_gb(alarm_addr,1);/光标闪烁if(lie=1)/分设置 if(up=1)/加 set_temp+;if(set_temp=60)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=60;set_temp-;down=0; Send(0,alarm_addr);flash_gb(alarm_addr,1);/光标闪烁if(lie=2)/秒设置if(up=1)/加 set_temp+;if(set_temp=60)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=60;set_temp-;down=0; Send(0,alarm_addr);flash_gb(alarm_addr,1);/光标闪烁if(lie=3) /响铃时间设置if(up=1)/加 set_temp+;if(set_temp=60)set_temp=0;up=0;if(down=1) / 减去 if(set_temp=0) set_temp=60;set_temp-;down=0; Send(0,alarm_addr);flash_gb(alarm_addr,1);/光标闪烁if(lie=4) /闹铃开关设置if(alarm_24c0810) switch_alarm=1;elseswitch_alarm=0;if(up=1)/加 switch_alarm=switch_alarm;up=0;if(down=1) / 减去switch_alarm=switch_alarm;down=0;if(switch_alarm=1) alarm_24c088=0xca-0X30;alarm_24c089=0xc7-0X30;alarm_24c0810=1;elsealarm_24c088=0xb7-0X30;alarm_24c089=0xf1-0X30;alarm_24c0810=0; Send(0,alarm_addr);flash_gb(alarm_addr,10);/光标闪烁if(lie4)alarm_24c08lie*2=set_temp/10;alarm_24c08lie*2+1=set_temp%10;Disp_SJ(alarm_addr,alarm_24c08lie*2,alarm_24c08lie*2+1);/Disp_SJ(0x87,alarm_24c0810,alarm_24c0810); write_alarm();/在地址rom上写数据numberDisp_HZ(0x80,line1,8);Disp_HZ(0x90,line2,8);Disp_HZ(0x88,line3,8);Disp_HZ(0x98,line4,8);lie_addr=0;alarm_addr=0;lie=0;if(alarm_24c0810=1) /闹钟打开 if(alarm_24c082=time2&alarm_24c083=time3) /分位相同 if(alarm_24c084=ti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 氮肥管理在油菜增产中的作用
- 2025年注册建筑师专业知识考核试卷(建筑设计与时代特征)
- 非遗传承中的社区参与与文化认同
- 基于模拟医学教育的临床能力培养
- 儿童行为心理学解析
- 创新引领业务前行
- 临产的处理原则及护理措施
- 舞蹈魅力与初中生活
- 出资转让协议书
- 2025授权代理在线直投广告合同模板
- 重度哮喘诊断与处理中国专家共识(2024)解读
- DZ∕T 0273-2015 地质资料汇交规范(正式版)
- 供应链服务外包与合作模式
- 员工竞业禁止保证金协议书
- (正式版)JBT 14587-2024 胶体铅酸蓄电池 技术规范
- (高清版)DZT 0216-2020 煤层气储量估算规范
- 2023年10月自考00533中国古代文学作品选(二)试题及答案含评分标准
- 拖拉机驾驶员培训(课件)
- 媒介发展史概论
- 儿童慢性病管理的挑战与解决方案
- 两办意见八硬措施煤矿安全生产条例宣贯学习课件
评论
0/150
提交评论