帮我设计一个51单片机利用DS18B20温度传感器实现温度的控制与显示,具体内容:1. 基本范围为-50℃110℃;2.精度误差小于0.5℃;3. Lcd1602直接显示上下限温度和实际温度;4. 可以任意设定温度的上下限报警功能;实现语音报数。

时间: 2024-03-11 16:48:53 浏览: 18
好的,以下是一个基于AT89C51单片机的DS18B20温度控制与显示的设计方案: 1. 硬件连接 将DS18B20的VCC引脚连接到单片机的电源正极,GND引脚连接到单片机的电源负极,DQ引脚连接到单片机的一个GPIO口。将LCD1602模块的RS、RW、E引脚分别连接到单片机的P2.0、P2.1、P2.2引脚,将LCD1602模块的D0-D7引脚分别连接到单片机的P0口。 2. 软件实现 在单片机上编写程序,读取DS18B20的温度数据并进行显示、控制和报警。以下是一个基本的示例代码: ```c #include <reg51.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define DQ P3_7 sbit beep=P3^6; sbit rs=P2^0; sbit rw=P2^1; sbit en=P2^2; // LCD1602初始化 void LcdInit(){ write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c);//开显示,关光标,不显示光标闪烁 write_com(0x06);//字符不动,指针自动右移 write_com(0x01);//清除显示 write_com(0x80);//设置显示起始地址为第一行第一列 } // 写命令 void write_com(uchar com){ rs=0; rw=0; P0=com; en=1; _nop_();_nop_();_nop_(); en=0; } // 写数据 void write_data(uchar dat){ rs=1; rw=0; P0=dat; en=1; _nop_();_nop_();_nop_(); en=0; } // 延时函数 void Delay1ms(uint y){ uint x; for(;y>0;y--) for(x=110;x>0;x--); } // 初始化DS18B20 bit Init_DS18B20(){ bit initflag; EA=0; DQ=1; Delay1ms(1); DQ=0; Delay1ms(20); DQ=1; initflag=DQ; Delay1ms(30); EA=1; return initflag; } // 写一位数据 void Write_DS18B20(uchar dat){ uchar i; EA=0; for(i=0;i<8;i++){ DQ=0; _nop_();_nop_(); DQ=dat&0x01; Delay1ms(6); DQ=1; dat>>=1; } EA=1; } // 读一位数据 uchar Read_DS18B20(){ uchar i,dat; EA=0; for(i=0;i<8;i++){ DQ=0; _nop_();_nop_(); dat>>=1; DQ=1; if(DQ) dat|=0x80; Delay1ms(6); DQ=1; } EA=1; return dat; } // DS18B20转换温度 void Convert_DS18B20(){ Init_DS18B20(); Write_DS18B20(0xcc); Write_DS18B20(0x44); } // DS18B20读温度 double Read_Temp(){ uchar temp; double t; Init_DS18B20(); Write_DS18B20(0xcc); Write_DS18B20(0xbe); temp=Read_DS18B20(); temp|=Read_DS18B20()<<8; t=temp*0.0625; return t; } // 主函数 void main(){ double temp,up_temp=50,down_temp=10; uchar str[16]; LcdInit(); while(1){ Convert_DS18B20(); Delay1ms(500); temp=Read_Temp(); sprintf(str,"Temp:%.1f",temp); write_com(0x80); for(uchar i=0;i<9;i++){ write_data(str[i]); } if(temp>up_temp){ beep=1; write_com(0xc0); write_data('U'); write_data('P'); } else if(temp<down_temp){ beep=1; write_com(0xc0); write_data('D'); write_data('N'); } else{ beep=0; write_com(0xc0); write_data('N'); write_data('O'); } } } ``` 该示例程序使用了AT89C51单片机的P0和P2口作为LCD1602模块的控制引脚,通过读取DS18B20的温度数据并进行转换后,将结果显示在LCD1602模块上,并实现了温度报警功能。当温度超过设定的上限或下限时,蜂鸣器会发出警报,并在LCD1602模块上显示相应的警报信息。 另外,您提到了语音报数的功能,这需要在单片机与语音模块之间进行串口通信,并在程序中添加相应的语音播报代码。由于语音模块的型号和具体使用方法不同,这里无法提供具体的示例代码,您可以根据实际情况进行调整和修改。 希望以上内容对您有所帮助!

相关推荐

最新推荐

recommend-type

基于89C51和DS18B20的温度采集系统设计

本系统是以89C51单片机为控制核心技术的温度采集控制系统,介绍了与DS18B20温度传感器组成温度采集系统的设计方案。本温度采集系统的下位机采用89C51单片机为主控制器,利用DS18B20温度传感器进行溫度测量,采用...
recommend-type

基于AT89C51和DS18B20的最简温度测量系统

本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合...
recommend-type

DS18B20 温度传感器自动火灾报警论文

本人毕业论文,详细介绍如何用51单片机驱动1602LCD, DS1302时钟,DS18B20温度传感器,并最终完成火灾自动报警器的设计,不可多得的毕业论文参考资料。
recommend-type

51单片机驱动DS1302时间模块+DS18B20温度传感器模块+12864液晶显示完整程序设计

这是一个用51单片机驱动DS1302时间模块+DS18B20温度传感器模块+12864液晶显示完整程序设计实例,有四个键盘KEY0 到KEY3,key0是修改时间的 首先是秒到分到时到年到月到日到星期 key1是加1 key2是减一 在修改时间状态...
recommend-type

基于51单片机的温度测量系统

单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。 本文从硬件和软件两方面介绍了AT89C2051单片机温度控制系统的设计,对硬件原理图和程序框图作了简洁的描述。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。