已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于DS1302万年历以及基于DS18B20的温度检测电路/*主程序*/#include#include LCD1602.h#include 1302.h#includewendu.h#define uchar unsigned char#define uint unsigned intsbit speaker=P24;bit key_flag1=0,key_flag2=0; /*uchar shijian6=0;*/sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0;uchar data_alarm7=0;/*键盘控制*/int key_scan() /扫描是否有键按下 int i=0;uint temp;P1=0xf0;temp=P1;if(temp!=0xf0)i=1;elsei=0;return i; uchar key_value() /确定按键的值uint m=0,n=0,temp;uchar value;uchar code v43=2,1,0,5,4,3,8,7,6,b,a,9; /用二维数组进行按键查询P1=0xfe;temp=P1; if(temp!=0xfe)m=0;P1=0xfd;temp=P1;if(temp!=0xfd)m=1;P1=0xfb;temp=P1;if(temp!=0xfb)m=2;P1=0xf7;temp=P1;if(temp!=0xf7)m=3;P1=0xef;temp=P1;if(temp!=0xef)n=0;P1=0xdf;temp=P1;if(temp!=0xdf)n=1;P1=0xbf;temp=P1;if(temp!=0xbf)n=2;value=vmn;return value; /*设置闹铃函数*/ void naoling(void) uchar i=0,l=0,j; init1602(); while(key_flag2&i12) if(key_scan()j=key_value();write_data(j);if(i%2=0)data_alarml=(j-0)9)data11=0;data10+; if(data109)data10=0;data11=0; x1=(data10-0)9)data14=0;data13+; if(data13=1&data14=3)data13=0;data14=1; x2=(data13-0)9)data17=0;data16+; if(data16=3&data17=2)data16=0;data17=1; x3=(data16-0)9)time1=0;time0+; if(time0=2&time1=4) time0=0;time1=0; x4=(time0-0)9)time4=0;time3+; if(time3=6&time4=1) time3=0;time4=1; x5=(time3-0)9)time7=0;time6+; if(time6=6&time7=1) time6=0;time7=1; x6=(time6-0)4|(time7-0);dswrite(0x80,x6); break; /case b: reset() ;break; default: break; /*中断处理函数*/void changing(void) interrupt 0 using 0 /需要修改时间和日期,或者停止修改if(key_flag1)key_flag1=0;else key_flag1=1;void alarming(void) interrupt 3 using 0/需要设置闹铃或者停止设置 if(key_flag2)key_flag2=0;else key_flag2=1;/*主函数*/ main()uint i;/uchar *l;uchar p1=D:,p2=TM,p3=Wd;EA=1;EX0=1;IT0=1;EA=1;EX1=1;IT1=1;init1602();/LCD初始化Initial_DS1302() ; /1302初始化ds18b20(); baojing=1; /报警灯while(1) /write_com(0x80);/显示区域不够 去除 / write_string(p1,2); write_com(0x88) ; write_string(p3,2) ; write_com(0xc0); write_string(p2,2); gettime();/从1302中读取时间 datalcd( ); /日期显示转换 timelcd( ); /时间显示转换 xiugai( );/调用修改时间函数 if (key_flag2) naoling(); if (according() alarm(); write_com(0x80); write_string(data1,8); write_com(0xc2); write_string(time,8); ds18b20(); /12位转换时间最大为750ms get_temperature(); display( ); delay(10); /*1302子程序:*/#ifndef _REAL_TIMER_DS1302_2009_5_20_#define _REAL_TIMER_DS1302_2003_5_20_#include #define uchar unsigned char#define uint unsigned intvoid timelcd( );void datalcd( );sbit DS1302_CLK = P26; /实时时钟时钟线引脚 sbit DS1302_IO = P27; /实时时钟数据线引脚 sbit DS1302_RST = P25; /实时时钟复位线引脚sbit ACC0 = ACC0;sbit ACC7 = ACC7;uchar x7=0x20,0x10,0x04,0x18,0x10,0x0,0x00;/分别存放年月日,时分秒/uchar x6=0;uchar time7=0;/ 存放时间uchar data17=0;/存放日期void dswrite(unsigned char add,unsigned char dat) unsigned char i ;DS1302_CLK=0;DS1302_RST=0;DS1302_RST=1;for(i=0;i=1;DS1302_CLK=0;_nop_(); ACC=dat;for(i=0;i=1; DS1302_CLK=0;DS1302_RST=0;unsigned char dsread(unsigned char add) unsigned char i,dat;DS1302_CLK=0;DS1302_RST=0;DS1302_RST=1;ACC=add;for(i=0;i=1;DS1302_CLK=0;_nop_(); DS1302_IO=1;/送1呈输入状态dat=0; for(i=0;i= 1;_nop_();DS1302_CLK=0;_nop_();DS1302_CLK=0;DS1302_RST=0;return dat; void gettime()/从1302中读取时间 DS1302_RST=0;x1=dsread(0x8d);/年x2=dsread(0x89);/月x3=dsread(0x87);/日x4=dsread(0x85);/时x5=dsread(0x83);/分x6=dsread(0x81);/秒 void datalcd( ) data10=(x14)+0; data11=(x1&0x0f)+0); data12=-; data13=(x24)&0x0f)+0; data14=(x2&0x0f)+0; data15=-; data16=(x34)&0x0f)+0; data17=(x3&0x0f)+0; void timelcd( ) time0=(x44)&0x0f)+0; time1=(x4&0x0f)+0; time2=:; time3=(x54)&0x0f)+0; time4=(x5&0x0f)+0; time5=:; time6=(x64)&0x0f)+0; time7=(x6&0x0f)+0; void DS1302_SetProtect(bit flag) /是否写保护if(flag)dswrite(0x8E,0x10); elsedswrite(0x8E,0x00);void DS1302_SetTime(unsigned char Address, unsigned char Value) / 设置时间函数DS1302_SetProtect(0);dswrite(Address, (Value/10)4 | (Value%10); /将十进制数转换为BCD码/在DS1302中的与日历、时钟相关的寄存器存放的数据必须为BCD码形式void Initial_DS1302(void) /初始化1302unsigned char Second;Second=dsread(0x80);if(Second&0x80) /初始化时间 DS1302_SetTime(0x80,0);/*ds18b20子程序*/ #include #include /#include cd1602.h#define uchar unsigned char#define uint unsigned int void display( );void delay(uint z);sbit ds=P37;sbit baojing=P36;uchar flag ;uint temp; /参数temp一定要声明为 int 型uchar wendustring6=0; /显示温度用void TempDelay (uchar us) /延时函数 while(us-);void ds_reset(void) /18b20复位 ds=1; _nop_(); /延时1us ds=0; TempDelay(80); /最少480us _nop_(); ds=1; TempDelay(5); /存在检测高电平时间:1560us, 此处大约延时44us _nop_(); _nop_(); _nop_(); if(ds=0) flag=1; /detect 18b20 success else flag=0; /detect 18b20 fail TempDelay(20); /存在检测低电平时间:60240us,此处延时约140us _nop_(); _nop_(); ds=1; /拉高总线,让总线处于空闲状态bit ds_read_bit(void) /读一位 bit dat; ds=0; _nop_(); /读时隙起始总线拉低至少1us ds=1; _nop_(); _nop_(); dat=ds; TempDelay(10); /所有读时间隙必须60120us,此处延时约77us return(dat); uchar ds_read_byte(void ) /读一字节uchar value,i,j;value=0; for(i=0;i8;i+) j=ds_read_bit(); value=(j1); return(value); /返回一个字节的数据void ds_write_byte(uchar dat) /写一个字节 uchar i; bit onebit; for(i=1;i1;if(onebit) /写 1ds=0;_nop_(); _nop_(); ds=1; TempDelay(5); else /写 0ds=0; TempDelay(8); /写0 时间隙,低电平至少60s,此处大约64usds=1;_nop_(); _nop_(); void ds18b20() /初始化 ds_reset(); delay(1); /约2ms ds_write_byte(0xcc); ds_write_byte(0x44);uint get_temperature()/读取温度函数 float wendu; uchar a,b; ds_reset(); delay(1); /约2ms ds_write_byte(0xcc); ds_write_byte(0xbe); a=ds_read_byte(); b=ds_read_byte(); temp=b; temp=2&wendustring35) baojing=0;else if (wendustring2=3)baojing=0;else baojing=1;wendustring4=.;wendustring5=temp%10+0; elsewendustring0=+;wendustring1=temp/1000+0;if(temp750) baojing=0;else baojing=1;wendustring2=temp%1000/100+0; /显示温度用wendustring3=temp%100/10+0;wendustring4=.;wendustring5=temp%10+0; write_com(0x8a); write_string(wendustring,6); delay(5); /*1602液晶显示子程序*/#ifndef LCD_CHAR_1602_2005_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年火电电力职业技能鉴定考试-变压器检修工考试历年参考题库含答案解析
- 2026年满洲里俄语职业学院高职单招笔试职业技能测验试题库含答案解析3套试卷
- 2026年湖南艺术职业学院高职单招笔试数学试题库含答案解析3套试卷
- 2026年湖南中医药高等专科学校高职单招笔试综合素质试题库含答案解析3套试卷
- 2026年渭南职业技术学院高职单招笔试综合素质试题库含答案解析3套试卷
- 2026年浙江纺织服装职业技术学院高职单招笔试职业适应性测验试题库含答案解析3套试卷
- 2026年浙江住院医师-浙江住院医师全科医学历年参考题库含答案解析
- 2026年注册公用设备工程师-注册设备工程师(暖通空调)历年参考题库含答案解析
- 2026年河南质量工程职业学院高职单招笔试化学试题库含答案解析2套试卷
- 2026年河南地矿职业学院高职单招笔试数学试题库含答案解析3套试卷
- 2026年甘肃省兰州新区产投资本控股集团有限公司招聘考试备考试题及答案详解
- 2026年秋季西师大版小学一年级上册数学教学计划
- 新版2025-2026部编人教版小学语文1一年级上册(全册)教案设计合集
- 基层医疗卫生机构慢性病健康管理中心建设与服务指南(2026年)
- 2026秋季小学生开学第一课
- (2026秋新版)苏教版六年级数学上册全册教案
- 加油站操作员岗中安全风险考核试卷含答案
- 2026年广东省中考数学试卷(含详细答案解析)
- 新学期(2026年秋)高中班主任工作计划
- 2026监理员继续教育考试题库及答案
- 2026年金融专业测试题目及答案
评论
0/150
提交评论