




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水费计收机制方案(3篇)
- 公司合理持股方案(3篇)
- DB23-T3024-2021-酸浆栽培技术规程-黑龙江省
- DB23-T2915-2021-刺五加野生资源恢复技术规程-黑龙江省
- DB23-T2820-2021-企业双重预防机制信息系统建设评估指南-黑龙江省
- 学校周末策划管理制度
- 公司行政经费管理制度
- 公司保密工作管理制度
- 农村初中后勤管理制度
- 外包保洁公司管理制度
- 2023年大理白族自治州不动产登记中心事业单位工作人员招聘笔试模拟试题及答案
- 国家开放大学《经济法》形考任务1-4参考答案
- TSZFA 2003.2-2019 床垫人体工程学评价 第二部分:床垫贴合度定量与评价方法
- 千载悠悠客家情
- GB/T 34134-2017家用和类似用途安全特低电压(SELV)交流和直流插头插座16 A 6 V、12 V、24 V、48 V型式、基本参数和尺寸
- 望洞庭课件模板
- GB/T 17145-1997废润滑油回收与再生利用技术导则
- 人教版初中日语必修一二三单词表
- 中国城镇水务行业发展报告(2022) - 污水处理技术应用情况
- GA/T 1567-2019城市道路交通隔离栏设置指南
- 桩基桩基础工程
评论
0/150
提交评论