




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#define uint unsigned int #define uchar unsigned charsbit lcdrs=P30;sbit lcdrw=P31;sbit lcden=P32;/LCD选通线sbit DQ=P17;/18B20引脚uint value;/温度值sbit sound=P16;/蜂鸣器sbit warning=P35;/LED报警灯sbit greenled=P36;/LED报警灯sbit k1=P10;/setsbit k2=P11;/+sbit k3=P12;/-char max=40;/初始温度最大值char min=10;/初始温度最小值uchar change_flag;/按键次数uchar code table1=0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e;/rom1 测得的序列号uchar code table2=0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9;/rom2uchar code table3=0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0;/rom3uchar code table4=0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7;/rom4uchar code table5=Temple;uchar code table6=max: min: ;uint temper5;/温度值缓存bit fg=0;/温度正负标志void delay(uint n) uint x,y; for(x=n;x0;x-) for(y=110;y0;y-); void write_com(uchar com)lcdrs=0;/rs=0时输入指令P2=com;delay(5);lcden=1;/en=1时读取信息delay(5);lcden=0;/1 - 0 执行指令void write_dat(uchar dat)lcdrs=1; /rs=1时输入数据P2=dat;delay(5);lcden=1;delay(5);lcden=0;void init_lcd()lcden=0;lcdrw=0;write_com(0x38); /8位数据,双列,5*7字形write_com(0x0c); /开启显示屏,关光标,光标不闪烁write_com(0x06); /显示地址递增,即写一个数据后,显示位置右移一位write_com(0x01);void delay_us(uchar t)/微妙延时while(t-);void init_ds18b20()/数据初始化DQ=1;delay_us(4);DQ=0;delay_us(80);DQ=1;delay_us(200);void write_ds18b20(uchar dat) /写数据uchar i;for(i=0;i1;delay_us(10);uchar read_ds18b20() /读数据uchar i=0,readat=0;for(i=0;i1; /八位全部都是0,向右移一位后,仍然全是0DQ=1;if(DQ) /如果DQ为1,readat进行或运算,如果为0,则子语句不执行,直接for循环此时采集的数据是0readat=readat|0x80;/此时最高位为1 ,然后再进行for循环 最高位成为第七位,依次往复delay_us(10);return readat;void check_rom(uchar a) /匹配序列号uchar j; write_ds18b20(0x55);if(a=1)for(j=0;j8;j+)write_ds18b20(table1j);if(a=2)for(j=0;j8;j+)write_ds18b20(table2j);if(a=3)for(j=0;j8;j+)write_ds18b20(table3j);if(a=4)for(j=0;j8;j+)write_ds18b20(table4j);uint change_ds18b20(uchar z)/为DS18B20序号uchar tl,th;init_ds18b20(); /初始化write_ds18b20(0xcc); /跳过init_ds18b20(); if(z=1)check_rom(1); / 匹配rom1if(z=2)check_rom(2); / 匹配rom2if(z=3)check_rom(3); / 匹配rom3if(z=4)check_rom(4); / 匹配rom4write_ds18b20(0x44);init_ds18b20();write_ds18b20(0xcc);init_ds18b20();if(z=1)check_rom(1); /if(z=2)check_rom(2); /if(z=3)check_rom(3); /if(z=4)check_rom(4); /write_ds18b20(0xbe); /启动读暂存器。读内部ram中9字节温度数据tl=read_ds18b20();th=read_ds18b20();value=th;value=value8;value=value|tl;if(th = 0x80)fg=1; value=value+1;value=value*(0.0625*10);return value;void display_lcd1602(uchar z)/显示各个温度 uchar i; if(z=1) write_com(0x80); for(i=0;i6;i+) write_dat(table5i);delay(3); write_dat(0x2d); write_dat(0x41); write_dat(0x3a); if(fg=1) write_dat(0xb0); if(fg=0) write_dat(0x20); write_dat(value/100+0x30); write_dat(value%100/10+0x30); write_dat(0x2e); write_dat(value%10+0x30); write_dat(0xdf); write_dat(0x43); if(z=2) write_com(0x80); for(i=0;i6;i+) write_dat(table5i);delay(3); write_dat(0x2d); write_dat(0x42); write_dat(0x3a); if(fg=1) write_dat(0xb0); if(fg=0) write_dat(0x20); write_dat(value/100+0x30); write_dat(value%100/10+0x30); write_dat(0x2e); write_dat(value%10+0x30); write_dat(0xdf); write_dat(0x43); if(z=3) write_com(0x80); for(i=0;i6;i+) write_dat(table5i);delay(3); write_dat(0x2d); write_dat(0x43); write_dat(0x3a); if(fg=1) write_dat(0xb0); if(fg=0) write_dat(0x20); write_dat(value/100+0x30); write_dat(value%100/10+0x30); write_dat(0x2e); write_dat(value%10+0x30); write_dat(0xdf); write_dat(0x43); if(z=4) write_com(0x80); for(i=0;i6;i+) write_dat(table5i);delay(3); write_dat(0x2d); write_dat(0x44); write_dat(0x3a); if(fg=1) write_dat(0xb0); if(fg=0) write_dat(0x20); write_dat(value/100+0x30); write_dat(value%100/10+0x30); write_dat(0x2e); write_dat(value%10+0x30); write_dat(0xdf); write_dat(0x43); void lcd_set_mun()/显示设置菜单 uchar i; write_com(0x80); for(i=0;i16;i+) write_dat(table6i);delay(3); void lcd_set(char max,char min)/显示最大最小值uchar x1,x2,x3,x4; uchar flag_max,flag_min;if(max0)flag_max=1;max=-max;elseflag_max=0;if(min2) change_flag=0; while(k1=0);void key2()if(k2=0) if(change_flag=1) max+;if(change_flag=2) min+; while(k2=0);void key3()if(k3=0) if(change_flag=1) max-; if(change_flag=2) min-; while(k3=0);void key()/按钮 key2();key1();key3();void alarm(uint t ) int tt;/t是温度绝对值,tt是有符号数,需要转换t=t*0.1;if(fg=0) /正温度tt=t;if(fg=1)/负温度tt=t+1;if(ttmax)sound=0;warning=1; greenled=0; elseif(ttmin)sound=0;warning=1; greenled=0; elsesound=1;warning=0; greenled=1; void main()uchar m=1;uchar i;uchar a=1,b=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆黔江区2025年上半年事业单位公开遴选试题含答案分析
- 河北省栾城县2025年上半年公开招聘城市协管员试题含答案分析
- 2025版交通设备采购与专业维护合同
- 2025版外聘讲师企业人才培养合作合同协议书
- 2025对公账户个人消费贷款合同规范范本
- 2025版暖通工程安全风险评估与应急预案合同
- 2025年度房地产中介加盟业务培训及咨询服务合同范本
- 2025版自动驾驶汽车软件合作协议范本
- 2025年度校园食堂餐饮供应合同
- 2025店长聘用协议:时尚产业店长选拔与聘用标准
- 餐饮加盟协议合同书
- 知道网课智慧《睡眠医学(广州医科大学)》测试答案
- 糖尿病医疗广告宣传指南
- T CEC站用低压交流电源系统剩余电流监测装置技术规范
- python程序设计-说课
- ISO15614-1 2017 金属材料焊接工艺规程及评定(中文版)
- 国际金融(第七版)全套教学课件
- JJG 677-2006光干涉式甲烷测定仪
- 甘肃省天水市2024年事业单位考试A类《职业能力倾向测验》模拟试题含解析
- 中小学德育、班主任工作培训课件
- 小米公司物流与供应链管理案例分析课件
评论
0/150
提交评论