基于单片机多点温度测试仪带按键设定温度报警带仿真图

上传人:玩*** 文档编号:153802278 上传时间:2020-12-02 格式:PDF 页数:27 大小:249.83KB
返回 下载 相关 举报
基于单片机多点温度测试仪带按键设定温度报警带仿真图_第1页
第1页 / 共27页
基于单片机多点温度测试仪带按键设定温度报警带仿真图_第2页
第2页 / 共27页
基于单片机多点温度测试仪带按键设定温度报警带仿真图_第3页
第3页 / 共27页
基于单片机多点温度测试仪带按键设定温度报警带仿真图_第4页
第4页 / 共27页
基于单片机多点温度测试仪带按键设定温度报警带仿真图_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《基于单片机多点温度测试仪带按键设定温度报警带仿真图》由会员分享,可在线阅读,更多相关《基于单片机多点温度测试仪带按键设定温度报警带仿真图(27页珍藏版)》请在金锄头文库上搜索。

1、本系统的设计思路 1.2.1 本系统的设计思想和工作原理 设计思想:随着时代的发展人们的生活水平越来越高,对生活的要求也越 来越高,单片机已在各行业得到广泛应用,为适应更多的应用领域,厂家采取 了在一块单片机芯片上集成多种功能部件和大容量存储器的方法。因而,整个 应用系统不需要扩展,而体积变小、可靠性增高,使单片机成为真正意义上的 单片机系统。同时随着现代信息技术的飞速发展,温度测量采集以及报警系统 在工业、农业、军事及人们的日常生活中扮演着一个越来越重要的角色,它对 人们的生活具有很大的影响,所以温度采集报警系统的设计与研究有十分重要 的意义。 设计原理:本设计采用单片机作为数据处理与控制单

2、元,为了进行数据处 理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传 递到单片机上。单片机数据处理之后,发出控制信息改变报警和控制执行模块 的状态,同时将当前温度信息发送到LCD进行显示。本系统可以实现多路温度 信号采集与显示,可以使用程序来设置温度限定值,通过进行温度数据的运算 处理,发出控制信号达到控制蜂鸣器和LED进行报警。 #include #define uchar unsigned char #define uint unsigned int sbit DQ =P20 。/ 一号 ds18b20 与单片机连接口 sbit DQ1=P21 。/ 二号 ds18b2

3、0 与单片机连接口 sbit D1=P23 。 sbit D2=P24 。 sbit RS=P25 。/LCD 控制脚 sbit RW=P26。 sbit EN=P27 。 sbit key0=P33 。 sbit key1=P34 。 /按键定义 sbit key2=P35 。 sbit key3=P36 。 sbit key4=P37 。 sbit bell=P17。 uchar code str1=wendu1:。 uchar code str2=wendu2:。 uchar code str3=set high 。 uchar code str4=set low 。 uchar dat

4、a disdata 5。 uchar data disdata15。 uchar data disdata24。 uchar data disdata34。 unsigned char temphigh=40,templow=5。 / 温度设定初始值 uint flag0,flag1,flag2,flag3,flag4。/按 键 标志 uint high,low。 /高温和低温设置值 uint tvalue,tvalue1。/ 温度值 uchar tflag,tflag1。/ 温度正负标志 /*lcd1602程序*/ void delay1ms(uint ms / 延时 1 毫秒 unsign

5、ed int i,j。 for(i=0。i for(j=0。j 。 void wr_com(uchar com /LCD 写指令 RS=0 。 RW=0。 P0=com 。 delay1ms(5。 EN=1 。 delay1ms(5。 EN=0 。 void wr_dat(uchar dat /LCD 写数据 RS=1 。 RW=0 。 P0=dat。 delay1ms(5。 EN=1 。 delay1ms(5。 EN=0 。 void lcd_init( /LCD 初始化设置 wr_com(0 x38。/ 设置162 显示, 57 点 阵,8 位数据接口 wr_com(0 x0c。/ 设置开

6、显示,不显示关标 wr_com(0 x06。/ 写一个字符后地址指针加1 wr_com(0 x01。/ 显示清 0,数据指针清 0 void display(uchar *p / 显示 while(*p!=0 wr_dat(*p 。 p+。 delay1ms(5。 init_play( /1号 初始 化 显示 lcd_init(。 wr_com(0 x80。 display(str1。 /*二号初始化 */ init_play1( /2 号初始化显示 wr_com(0 x80+0 x40 。 display(str2。 /*温度设定初始化 */ /*init_wendusheding( if(

7、flag1=1 lcd_init(。 wr_com(0 x80 。 display(str3。 */ /*1号 DS1820程序*/ void delay_18B20(uint i / 延时 1 微秒 while(i-。 void ds1820rst( /ds1820 复位 uchar x=0 。 DQ = 1。/DQ 复位 delay_18B20(4 。/ 延时 DQ = 0。/DQ 拉低 delay_18B20(100。/ 精确延时大于 480us DQ = 1。/ 拉高 delay_18B20(40。 uchar ds1820rd( / 读数据 uchar i=0 。 uchar dat

8、 = 0。 for (i=8。i0 。i- DQ = 0。/ 给脉冲信号 dat=1。 DQ = 1。/ 给脉冲信号 if(DQ dat|=0 x80。 delay_18B20(10。 return(dat。 void ds1820wr(uchar wdata / 写数据 uchar i=0 。 for (i=8。 i0 。 i- DQ = 0。 DQ = wdata&0 x01。/ 数据放在数据线上被读走 delay_18B20(10 。 DQ = 1 。 wdata=1。 read_temp( /1号读取温度值并 转换 uchar a,b 。 ds1820rst( 。 ds1820wr(0

9、 xcc 。/ 跳过读序列 号 ds1820wr(0 x44。/ 启动温度转 换 ds1820rst( 。 ds1820wr(0 xcc 。/ 跳过读序列 号 ds1820wr(0 xbe。/ 读取温度 a=ds1820rd( 。 b=ds1820rd( 。 tvalue=b 。 tvalue=8 。 tvalue=tvalue|a。 if(tvalue tflag=0。 else tvalue=tvalue+1。 tflag=1 。 tvalue=tvalue*(0.625。/ 温度值扩大 10 倍,精确到 1 位小数 return(tvalue。 /*1号温度值显示 */ void ds1

10、820disp( uchar flagdat。 disdata0=tvalue/1000+0 x30。/百 位 数 disdata1=tvalue%1000/100+0 x30。/十 位 数 disdata2=tvalue%100/10+0 x30。/ 个位数 disdata3=tvalue%10+0 x30。/ 小数位 if(tflag=0 flagdat=0 x20 。/ 正温度不显示符号 else flagdat=0 x2d 。/ 负温度显示负号 :- if(disdata0=0 x30 disdata0=0 x20。/ 如果百位为 0,不显示 if(disdata1=0 x30 dis

11、data1=0 x20。/如 果 百位为 0,十位为 0 也不显示 wr_com(0 x80+0 x0a 。 wr_dat(flagdat。/ 显示符号位 wr_com(0 x80+0 x0b 。 wr_dat(disdata0。/ 显示百位 wr_com(0 x80+0 x0c。 wr_dat(disdata1。/ 显示十位 wr_com(0 x80+0 x0d 。 wr_dat(disdata2。/ 显示个位 wr_com(0 x80+0 x0e 。 wr_dat(0 x2e。/ 显示小数点 wr_com(0 x80+0 x0f。 wr_dat(disdata3。/ 显示小数位 /*二号D

12、S18B20程序 */ void delay_18B201(unsigned int i / 延时 1 微秒 while(i-。 void ds1820rst1( /ds1820 复位 uchar x=0 。 DQ1 = 1。/DQ 复位 delay_18B20(4 。/ 延时 DQ1 = 0。/DQ 拉低 delay_18B201(100。/精 确 延 时 大 于 480us DQ1 = 1。/ 拉高 delay_18B201(40。 uchar ds1820rd1( / 读数据 uchar i=0 。 uchar dat1 = 0。 for (i=8。i0 。i- DQ1 = 0。/ 给脉

13、冲信号 dat1=1。 DQ1 = 1。/ 给脉冲信号 if(DQ1 dat1|=0 x80。 delay_18B201(10。 return(dat1。 void ds1820wr1(uchar wdata1 / 写数据 uchar i=0 。 for (i=8。 i0 。 i- DQ1 = 0。 DQ1 = wdata1&0 x01。 delay_18B201(10。 DQ1 = 1 。 wdata1=1。 read_temp1( /2 号读取温度值并转换 uchar a1,b1 。 ds1820rst1( 。 ds1820wr1(0 xcc。/跳 过 读序列号 ds1820wr1(0 x

14、44。/启 动 温度转换 ds1820rst1( 。 ds1820wr1(0 xcc。/跳 过 读序列号 ds1820wr1(0 xbe。/读 取 温度 a1=ds1820rd1(。 b1=ds1820rd1(。 tvalue1=b1 。 tvalue1=8 。 tvalue1=tvalue1|a1。 if(tvalue1 tflag1=0。 else tvalue1=tvalue1+1。 tflag1=1 。 tvalue1=tvalue1*(0.625。/ 温度值扩大 10 倍,精确到 1 位小数 return(tvalue1。 /* */ void ds1820disp1( /2号温 度值显示 uchar flagdat1。 disdata10=tvalue1/1000+0 x30。/百 位 数 disdata11=tvalue1%1000/100+0 x30。/十 位 数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 心得体会

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号