版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
页附录附录1电路原理图
附录2源程序代码#include<reg52.h>#include"lcd.h"#include"ds1302.h"#include"string.h"#include"EEPROM.h"//#include"uart.h"//#include"temp.h"voidLcdDisplay();voiddelayms(intms);voidSetShowTime();voidSetShowTemp();voidSetShowSet();//时间段设置显示//sbitSWITCH=P3^7;//sbitKEY1=P3^4;//设置时间+sbitKEY2=P3^5;//设置时间-sbitBEEP=P1^7;unsignedintTT11=630,TT12=635; //时间段1unsignedintTT21=1230,TT22=1235; //时间段2unsignedintTT31=2230,TT32=2235; //时间段3unsignedcharset;unsignedcharTime1[12],Time2[12],Time31[6],Time32[6];intTD;unsignedcharmode=0;//unsignedcharonce=0;voidwrite_data(){ unsignedchari; for(i=0;i<50;i++) //擦除 扇区 { SectorErase(0x2000+i); delayms(2); } byte_write(0x2000,TT11/256); delayms(10);byte_write(0x2001,TT11%256); delayms(10); byte_write(0x2002,TT12/256); delayms(10);byte_write(0x2003,TT12%256); delayms(10); byte_write(0x2004,TT21/256); delayms(10); byte_write(0x2005,TT21%256); delayms(10); byte_write(0x2006,TT22/256); delayms(10); byte_write(0x2007,TT22%256); delayms(10); byte_write(0x2008,TT31/256); delayms(10); byte_write(0x2009,TT31%256); delayms(10); byte_write(0x2010,TT32/256); delayms(10); byte_write(0x2011,TT32%256); delayms(10);}voidread_data(){TT11=byte_read(0x2000)*256+byte_read(0x2001); //上电时,先读取报警值 如果读取到的报警值异常,则重新赋值delayms(5); TT12=byte_read(0x2002)*256+byte_read(0x2003); delayms(5); TT21=byte_read(0x2004)*256+byte_read(0x2005); delayms(5); TT22=byte_read(0x2006)*256+byte_read(0x2007); delayms(5); TT31=byte_read(0x2008)*256+byte_read(0x2009); delayms(5); TT32=byte_read(0x2010)*256+byte_read(0x2011); delayms(5);}voidmain(){//SWITCH=0; IT0=1;//外部中断0初始化//下降沿触发 EX0=1; IT1=1;//外部中断1初始化//下降沿触发 EX1=1; EA=1;//开总中断 LcdInit();//write_data();read_data();// Ds1302Init();//配置初始时间时使用,其余时间注销掉 while(1) {if(set==0) { Ds1302ReadTime();//读取时间 TD=TIME[2]/16*1000+(TIME[2]&0x0f)*100+TIME[1]/16*10+(TIME[1]&0x0f);//时分转换为整型 LcdDisplay(); //显示时间 //温度控制部分 在我们设定的时间内才控制,,其余时间不控制 if((TD>=TT11&&TD<=TT12)) { BEEP=0; } else if((TD>=TT21&&TD<=TT22)) { BEEP=0; } else if((TD>=TT31&&TD<=TT32)) { BEEP=0; } else { BEEP=1; } }elseif(set==1)//小时设置按钮功能函数 { if(KEY1==0)//小时加1处理函数 { while(!KEY1); TIME[2]+=0x01; if((TIME[2]&0X0F)>0x09) { TIME[2]+=0x10;//高位进1 TIME[2]&=0xf0;//低位置0 } if(TIME[2]>=0x24)TIME[2]=0; SetShowTime(); } if(KEY2==0) //小时减1处理函数 { while(!KEY2); if(TIME[2]!=0X00) TIME[2]-=1; elseTIME[2]=0X24; if(((TIME[2]&0x0f))>0x0A) { TIME[2]&=0xf9; } SetShowTime(); } LcdSetCursor(0x06,0); LcdWriteCom(0x0F);//清屏 }elseif(set==2)//分钟设置函数 { if(KEY1==0)//分钟加1处理函数 { while(!KEY1); TIME[1]+=0x01; if((TIME[1]&0X0F)>0x09) { TIME[1]+=0x10;//高位进1 TIME[1]&=0xf0;//地位置0 } if(TIME[1]>=0x60)TIME[1]=0; SetShowTime(); } if(KEY2==0) //分钟减1处理函数 { while(!KEY2); if(TIME[1]!=0X00) TIME[1]-=1; elseTIME[1]=0X59; if(((TIME[1]&0x0f))>0x0A) { TIME[1]&=0xf9; } SetShowTime(); } LcdSetCursor(0x09,0); LcdWriteCom(0x0F);//清屏 } elseif(set==3) //秒按钮设置函数 { if(KEY1==0)//秒加1处理函数 { while(!KEY1); TIME[0]+=0x01; if((TIME[0]&0X0F)>0x09) { TIME[0]+=0x10;//高位进1 TIME[0]&=0xf0;//地位置0 } if(TIME[0]>=0x60)TIME[0]=0; SetShowTime(); } if(KEY2==0) //秒减1处理函数 { while(!KEY2); if(TIME[0]!=0X00) TIME[0]-=1; elseTIME[0]=0X59; if(((TIME[0]&0x0f))>0x0A) { TIME[0]&=0xf9; } SetShowTime(); } LcdSetCursor(0x0c,0); LcdWriteCom(0x0F);// } elseif(set==4) //TT11处理函数 { if(once==0) { SetShowSet(); once=1; } if(KEY1==0) { while(!KEY1); TT11+=1; if((TT11%100)>=60) { TT11=TT11/100*100+100; if(TT11>=TT12)TT11=TT12-1; } SetShowSet(); } if(KEY2==0) //减1处理函数 { while(!KEY2); TT11-=1; if(TT11<0)TT11=0; if((TT11%100)==99) { TT11=TT11-40; } SetShowSet(); } LcdSetCursor(0x03,0); LcdWriteCom(0x0F); }elseif(set==5) //TT12处理函数 { if(KEY1==0) { while(!KEY1); TT12+=1; if((TT12%100)>=60) { TT12=TT12/100*100+100; if(TT12>=TT21)TT12=TT21-1; } SetShowSet(); } if(KEY2==0) //减1处理函数 { while(!KEY2); TT12-=1; if(TT12<=TT11)TT12=TT11+1; if((TT12%100)==99) { TT12=TT12-40; } SetShowSet(); } LcdSetCursor(0x08,0); LcdWriteCom(0x0F); } elseif(set==6) //TT21处理函数 { if(once==0) { SetShowSet(); once=1; } if(KEY1==0) { while(!KEY1); TT21+=1; if((TT21%100)>=60) { TT21=TT21/100*100+100; if(TT21>=TT22)TT21=TT22-1; } SetShowSet(); } if(KEY2==0) //减1处理函数 { while(!KEY2); TT21-=1; if(TT21<TT12)TT21=TT12+1; if((TT21%100)==99) { TT21=TT21-40; } SetShowSet(); } LcdSetCursor(0x03,1); LcdWriteCom(0x0F); }elseif(set==7) //TT22处理函数 { if(KEY1==0) { while(!KEY1); TT22+=1; if((TT22%100)>=60) { TT22=TT22/100*100+100; if(TT22>=TT31)TT22=TT31-1; } SetShowSet(); } if(KEY2==0) //减1处理函数 { while(!KEY2); TT22-=1; if(TT22<=TT21)TT22=TT21+1; if((TT22%100)==99) { TT22=TT22-40; } SetShowSet(); } LcdSetCursor(0x08,1); LcdWriteCom(0x0F); } elseif(set==8) //TT31处理函数 { if(once==0) { SetShowSet(); once=1; } if(KEY1==0) { while(!KEY1); TT31+=1; if((TT31%100)>=60) { TT31=TT31/100*100+100; if(TT31>=TT32)TT31=TT32-1; } SetShowSet(); } if(KEY2==0) //减1处理函数 { while(!KEY2); TT31-=1; if(TT31<0)TT31=0; if((TT31%100)==99) { TT31=TT31-40; } SetShowSet(); } LcdSetCursor(0x0E,0); LcdWriteCom(0x0F); }elseif(set==9) //TT32处理函数 { if(KEY1==0) { while(!KEY1); TT32+=1; if((TT32%100)>=60) { TT32=TT32/100*100+100; if(TT32>=2400)TT32=2359; } SetShowSet(); } if(KEY2==0) //减1处理函数 { while(!KEY2); TT32-=1; if(TT32<=TT31)TT32=TT31+1; if((TT32%100)==99) { TT32=TT32-40; } SetShowSet(); } LcdSetCursor(0x0E,1); LcdWriteCom(0x0F); } elseif(set>=10) { set=0; LcdWriteCom(0x0C);//关光标闪烁 Ds1302Write_time(); write_data(); LcdWriteCom(0x01); }}}/********************************************************************************函数名:LcdDisplay()*函数功能 :显示函数*输入:无*输出 :无*******************************************************************************///显示时间voidLcdDisplay(){ LcdWriteCom(0x80+0x00); LCD1602_write_word("Time:");LcdWriteData('0'+TIME[2]/16); //时 LcdWriteData('0'+(TIME[2]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[1]/16); //分 LcdWriteData('0'+(TIME[1]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[0]/16); //秒 LcdWriteData('0'+(TIME[0]&0x0f)); LCD1602_write_word("");}voidSetShowSet(){ Time1[0]=TT11/1000+48;Time1[1]=TT11%1000/100+48; //时间段1处理显示 Time1[2]=TT11%1000%100/10+48; Time1[3]=TT11%10+48; Time1[4]='-'; Time1[5]=TT12/1000+48;Time1[6]=TT12%1000/100+48; Time1[7]=TT12%1000%100/10+48; Time1[8]=TT12%10+48; Time2[0]=TT21/1000+48;Time2[1]=TT21%1000/100+48; //时间段2处理显示 Time2[2]=TT21%1000%100/10+48; Time2[3]=TT21%10+48; Time2[4]='-'; Time2[5]=TT22/1000+48;Time2[6]=TT22%1000/100+48; Time2[7]=TT22%1000%100/10+48; Time2[8]=TT22%10+48; Time31[0]=TT31/1000+48;Time31[1]=TT31%1000/100+48; //时间段3处理显示 Time31[2]=TT31%1000%100/10+48; Time31[3]=TT31%10+48; Time31[4]='-'; Time32[0]=TT32/1000+48;Time32[1]=TT32%1000/100+48; Time32[2]=TT32%1000%100/10+48; Time32[3]=TT32%10+48;Time32[4]=''; LcdWriteCom(0x80+0x00); LCD1602_write_word(Time1); LCD1602_write_word(""); LcdWriteCom(0x80+0x40); LCD1602_write_word(Time2); LCD1602_write_word(""); LcdWriteCom(0x80+0x0b); LCD1602_write_word(Time31); LcdWriteCom(0x80+0x4b); LCD1602_write_word(Time32);}voiddelayms(intms){ inti,j; for(i=0;i<ms;i++) for(j=0;j<110;j++);}voidSetShowTime(){LcdWriteCom(0x80+0x05); LcdWriteData('0'+TIME[2]/16); //时 LcdWriteData('0'+(TIME[2]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[1]/16); //分 LcdWrit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 申请增加合作方资质确认函3篇
- 2026年合作伙伴关系协议续约通知函(4篇)
- 安全知识普及:保护自己与他人小学主题班会课件
- 2026年双鸭山中医确有专长和出师考核(中医医师资格考试)历届真题及答案
- 2026年临床执业医师考试(实践技能)模拟题及答案(青海果洛)
- 企业安全生产管理人员安全管理指导书
- 2026年贵州遵义职业卫生技术服务专业技术人员考试(职业卫生检测)模拟题库及答案
- 人际关系建设方案实战手册
- 传承文化:了解中国节日小学主题班会课件
- 关于供应商信用评估结果的函(7篇)
- 2026《超龄劳动者基本权益保障暂行规定》解读
- 湖南农发环保科技有限责任公司招聘笔试题库2026
- 2026年交通辅警测试题及答案
- 2026天津华北地质勘查局及所属事业单位第二批招聘7人笔试备考试题及答案详解
- 2026海南陵水黎族自治县县属国有企业第一批招聘60人笔试模拟试题及答案详解
- 中国医院护理管理指南2025版
- 2026年无损检涡流检二级考核模拟题库附参考答案详解【考试直接用】
- 悬索桥工程监理实施细则
- 八年级数学下册:一次函数建模解决跨学科实际问题教学设计
- 油茶修剪技术
- 生产工厂内务管理制度
评论
0/150
提交评论