下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、按键次数寄存器 主函数用循环计数器 温度值 温度值整数形式 上下限初值/共阳LED段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"" 不亮 "/* 程序名称:温度监控系统*/*程序功能:利用89C52单片机和DS18B2欧度传感器实现环境*/*温度的实时测量和高、低温报警*/* 程序版本: */* 作 者: */* 编写时间: */*/#in
2、clude <>#include <>/含 _nop_() 延时函数/ 定义数据类型#define uchar unsigned char#define uint unsigned int/ 定义端口#define LED P0/段码输出口sbitDQ = P3 A2;/传感器数据口sbitSMG_q = P1A0;/ / 定义数码管阳级控制脚(千位)sbitSMG_b = P1A1;/ / 定义数码管阳级控制脚(百位)sbitSMG_s = P1A2;/ / 定义数码管阳级控制脚(十位)sbitSMG_g = P1A3;/ / 定义数码管阳级控制脚(个位)sbitbu
3、zzer = P1A5;/蜂鸣器sbitled_low = P2A6;/低温指示灯sbitled_high = P2A7;/高温指示灯sbitled_ok = P2A5;/温度正常指示灯sbitled_work = P2A4;/工作指示灯sbitset = P3A7;/设置按键sbitadd = P3A4;/加一按键sbitdec = P3A5;/减一按键/ 定义变量和常量int count = 0;/int h;/uint temp;/uchar r;/ uchar high = 35,low = 20; / uchar code LED_code12 = 0xc0,0xf9,0xa4,0x
4、b0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code LED_code1 = 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; uchar code ditab16 =0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/ 小数部分转换码表uchar data temp_data2 = 0x00,0x00;/存储从传感器读出的温度值uchar data dp5 = 0x00,0x00,0x00,0x00
5、,0x00;/ 显示单元数据,共 4 个数据和一个运算/ 子函数声明voidds_reset();/DS18B20初始化函数voidds_write(uchar ds_wrdata); /DS18B20写数据函数uchar ds_read();/DS18B20读数据函数read_temp();/读取温度函数voidchange_temp(uint tem); /温度数据处理voidxianshi(int horl);/温度显示转换voiddisplay();/数码管显示函数voidkeyscan();/按键查询函数voidwarn_led();/超限报警voiddelay(uint t);/延
6、时函数,单次25us/*主函数*/void main()LED=0x00;/初始化显示端口led1=0;led2=0;led3=0;led4=0;for(h=0;h<4;h+)dph=8;while(1)/循环执行显示和温度读取uchar i;for(i=0;i<200;i+) warn_led();/display();/keyscan();/change_temp(read_temp(); /指示灯控制 显示 按键扫描温度数据读取和处理/*/* 函数名称: ds_reset()*/*函数功能:DS18B20®始化*/* 入口参数:无*/* 输出参数:无*/* 调用函数
7、: delay();_nop_();*/* 全局变量:无*/* 局部变量: presence*/ /*/ void ds_reset(void) char presence=1; while(presence) while(presence) 传感器数据段先置高电平/ 适当延时传感器数据段从高电平拉到低电平延时再置高电平延时初始化成功, 继续下一步延时拉高电平/ 开工作指示灯DQ=1;/_nop_(); _nop_();DQ=0;/delay(50); /DQ=1;/delay(6);/presence=DQ; / delay(45);/presence=DQ; DQ=1;/led_work=
8、0; /*/* 函数名称: ds_write()*/*函数功能:向 DS18B20写数据*/* 入口参数: ds_wrdata*/* 输出参数:无*/* 调用函数: delay();_nop_();*/* 全局变量:无*/* 局部变量: ds_wrdata*/ /*/ void ds_write(uchar ds_wrdata) uchar i;for(i=8;i>0;i-)DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();DQ=ds_wrdata&0x01;/最低位移出delay(6);ds_wrdata=ds_
9、wrdata/2; /右移1 位DQ=1;delay(1);/*/* 函数名称:ds_read()*/* 函数功能:从从 DS18B201 卖数据*/* 入口参数:无无*/* 输出参数:value*/* 调用函数:delay();_nop_();*/* 全局变量:*/* 局部变量:i;value;*/*/uchar ds_read(void)uchar i;uchar value=0;for(i=8;i>0;i-)DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();DQ=1;_nop_();_
10、nop_();_nop_();_nop_();if(DQ)value|=0x80; delay(6);DQ=1;return(value);/*/* 函数名称: read_temp()*/* 函数功能:读温度数据数据*/* 入口参数:无*/* 输出参数: yemp*/ /* 调用函数: ds_reset();ds_write();ds_read(); */* delay();*/* 全局变量: temp*/* 局部变量: temp_data;*/*/*/* 函数名称: chang_temp()*/* 函数功能:将温度传感器中独到的数据进行转换/* 入口参数: tem*/* 输出参数: dp*/
11、* 调用函数:无*/* 全局变量: dp;ditab;r;*/* 局部变量: tem*/*/*/read_temp()ds_reset();/传感器初始化delay(200);ds_write(0xcc);/发跳过读取序列号命令ds_write(0x44);/发温度转换命令ds_reset();delay(1);ds_write(0xcc);ds_write(0xbe);/读 18B20 中存储器temp_data0=ds_read(); /读温度值的低字节命令temp_data1=ds_read(); /读温度值的高字节temp=temp_data1;temp<<=8;temp=
12、temp|temp_data0; /两字节合成一个整型变量return temp;/返回温度值void change_temp(uint tem) uchar n=0; if(tem>6348) /温度值正负判断tem=65536-tem;/负温度求补码n=1;/标志位置1dp4=tem&0x0f;/取小数部分的值dp0=ditabdp4;/存入小数部分显示值dp4=tem>>4;/取中间八位, 即整数部分的值dp3=dp4/100;/取百位数据dp1=dp4%100;/取后两位数据dp2=dp1/10;/取十位数据dp1=dp1%10;/个位r=dp1+dp2*10
13、+dp3*100; /实际温度值(十进制)if(!dp3) /符号位显示判断dp3=0x0a;if(!dp2)/最高位为0 时不显示dp2=0x0a;/次高位为 0 时不显示if(n)dp3=0x0b;/ 负温度时最高位显示"-",*/* 函数名称: /* 函数功能:温度数据转换成显示所需 /* 入口参数: /* 输出参数: /* 调用函数:无 /* 全局变量: /* 局部变量:xianshi()*/温度数据转换成显示所需LED段码*/horl*/dp*/*/dp;*/n;*/*/void xianshi(int horl)int n=0;if(horl>128)/
14、负数补码转换horl=256-horl;n=1;dp3=horl/100;dp3=dp3&0x0f;/dp2=horl%100/10;dp1=horl%10;dp0=0;if(!dp3)dp3=0x0a;if(!dp2) dp2=0x0a;if(n) dp3=0x0b;百位/ 十位/ 个位/ 小数位/ 高位为零不显示/ 负数最高位显示“/*/* 函数名称: display()*/* 函数功能:数码管显示*/* 入口参数:无*/* 输出参数:无*/* 调用函数: delay()*/* 全局变量: dp;LED_code;LED_code1; */* led1;led2;led3;led4
15、; */* 局部变量: j;*/,*void display()int j;for(j=0;j<4;j+)/4位 LED扫描控制switch(j)case 0:LED=LED_codedp0;led4=1;delay(450);led4=0;break; /小数位case 1:LED=LED_code1dp1;led3=1;delay(450);led3=0;break; /个位case 2:LED=LED_codedp2;led2=1;delay(450);led2=0;break; /十位case 3:LED=LED_codedp3;led1=1;delay(450);led1=0;
16、break; /百位/*/* 函数名称:keyscan()*/* 函数功能:按键查询按键查询*/* 入口参数:无无*/* 输出参数:无无*/* 调用函数:delay();display();xianshi(); */* 全局变量:count;high;low;*/* 局部变量:无无*/*/void keyscan() if(set=0)while(1)delay(500);if(set=0)count+;while(!set)display();if(count=1)xianshi(high);display();if(add=0)/set 键按下/ 延时去抖动/ 重新判断 set 键是否按下
17、/ 按键弹起继续显示前面内容/set 按下一次执行此段/ 转换上限温度为段码并显示/add 键是否按下/ 弹起时上限温度加一并显示/dec 键是否按下/ 弹起时上限温度减一并显示/set 键按下两次执行此段/ 转换下限温度为段码并显示/add 键是否按下/ 弹起时下限温度加一并显示/dec 键是否按下/ 弹起时下限温度减一并显示/set 键按下三次回到温度显示状态while(!add) display(); high+=1;if(dec=0)while(!dec) display(); high-=1;if(count=2)xianshi(low);display();if(add=0)whi
18、le(!add) display(); low+=1;if(dec=0)while(!dec) display(); low-=1;if(count>=3)count=0;break;/*/* 函数名称: warn_led()*/* 函数功能:工作情况指示灯控制 */* 入口参数:无*/* 输出参数:无*/* 调用函数:无*/* 全局变量: high;low;r;*/* 局部变量:无*/ /*/void warn_led()if(r>high)led_low=1;led_high=0;led_ok =1;buzzer = 0;else if(r<low)led_low=0;led_high=1;led_ok =1;buzzer = 0;elseled_low=1;led_high=1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 周口文泰高级中学2026年招聘教师备考题库及一套答案详解
- 2026年长铺专职消防站招聘9人备考题库及1套完整答案详解
- 2026年达州这家国企招聘备考题库完整参考答案详解
- 2026年西安长安大学工程设计研究院有限公司招聘备考题库完整答案详解
- 供应商管理制度
- 南昌职教城教育投资发展有限公司2025年第七批公开招聘工作人员备考题库带答案详解
- 上海市宋校嘉定实验学校2026学年教师招聘备考题库附答案详解
- 2026年西安惠安医院招聘备考题库及一套参考答案详解
- 企业市场调研与分析制度
- 2026年黑河市第二人民医院长期招聘临床医生及影像科技师5人备考题库完整答案详解
- 2026年包头轻工职业技术学院高职单招职业适应性测试参考题库及答案详解
- 化工防止静电安全培训课件
- 2026贵州黔南州长顺县医疗集团中心医院招聘备案编制人员21人笔试参考题库及答案解析
- 中国儿童原发性免疫性血小板减少症诊断与治疗改编指南(2025版)
- 2026年辽宁生态工程职业学院单招综合素质考试题库附答案详解
- AI药物研发中的伦理风险防控
- 基坑回填质量控制措施
- 2025重庆城口县国有企业公开招聘26人参考题库附答案
- 应力性骨折课件
- 医保基金监管培训课件
- 新型医疗器械应用评估报告
评论
0/150
提交评论