做外贸用什么网站好,手机网站优点,yzipi主题wordpress,网站建设维护岗位本文是关于DS18B20温度传感器的一个扩展实验。 文章目录 一、相关元件介绍二、实验分析三、proteus原理图设计四、软件设计 本扩展实验实现的功能#xff1a;利用DS18B20设计一个智能温度控制系统#xff0c;具有温度上下限值设定。当温度高于上限值时#xff0c;电机开启利用DS18B20设计一个智能温度控制系统具有温度上下限值设定。当温度高于上限值时电机开启同时蜂鸣器报警当温度低于下限值时继电器工作加热同时蜂鸣器报警当温度处于上下限间正常工作。 首先系统运行后可以通过按键设置温度上下限当按下开始运行按键后温控系统开始工作。默认温度上下限为23~25°C。温控系统开始运行后会在数码管中显示当前温度。
使用到的硬件资源有
独立按键蜂鸣器ULN2003直流电机继电器共阴极数码管74HC12874HC245DS18B20温度传感器
一、相关元件介绍 当按键按下时按键两端管脚电平一致按键处理时需要延时消抖二次确认。 要驱动蜂鸣器发声分为有源蜂鸣器和无源蜂鸣器。对于有源蜂鸣器控制其中一端管脚为高电平或低电平即可发声对于无源蜂鸣器需要一定频率的脉冲才可发声。驱动蜂鸣器需要比较大的电流使用ULN2003芯片实现放大电流的功能。本实验使用有源蜂鸣器。 要驱动直流电机转动在其一端管脚输入高电平另一端管脚输入低电平使直流电机有电流通过即可转动高低电平在不同位置仅控制转动的方向。要驱动直流电机也需要比较大的电流使用ULN2003芯片实现放大电流的功能。 使用一个PNP三极管驱动继电器添加一个二极管用于保护继电器。 使用74HC138芯片控制数码管的位选74HC245控制数码管的段选。 DS1302温度传感器是单总线通信不需要外围元件。具有可编程的分辨率内含64位的ROM64位的序列号识别当前使用的芯片、一个包含9字节的高速暂存器RAM和一个非易失性可电擦除EEPROM。 不考虑64位ROM序列号DS1302读取温度过程初始化→发送CCH命令跳过ROM→发送温度转换命令44H→延时→初始化→发送CCH命令跳过ROM→发送读RAM命令BEH→连续读出数据。 设置温度上下限过程初始化→发送CCH命令跳过ROM→发送48H命令将RAM2、3字节的内容复制到EEPROM中→延时→初始化→发送CCH命令跳过ROM→发送4EH命令将温度限值写入RAM→发送连个字节的数据。 二、实验分析
本实验实现的是一个温度控制系统当温度超过设定范围时触发一定操作。温度超过上限时电机开启同时蜂鸣器报警温度低于下限时继电器工作同时蜂鸣器报警温度处于上下限之间时系统正常工作。系统通过按键调节上限、下限和工作开始或停止。
本系统的需求包括
按键控制系统的开始和停止按键调节上限和下限温度超过范围报警温度在范围内正常工作调节温度上下限时对应的上下限温度会显示在数码管中系统工作时的温度实时显示在数码管中
三、proteus原理图设计
proteus仿真原理图如下。P3.0~P3.3口控制独立按键K1 ~ K4P3.0 ~ 03.3口为低电平时表示按键按下。K1向上调温度上限K2向下调温度下限按K3确定温度的上下限按K4 温度控制系统开始工作。P3.7口作为温度传感器DS18B20的输入/输出。
通过ULN2003芯片起到放大电流的作用用来控制蜂鸣器、继电器和直流电机。P1.0控制直流电机P1.0为高电平时直流电机工作为低电平时直流电机不工作。P1.5控制蜂鸣器P1.5为低电平是蜂鸣器不发声为高电平时蜂鸣器发声。P1.1口控制继电器P1.1为低电平时继电器工作为高电平时继电器不工作。 P0口通过74HC245控制数码管的段选P2.2~P2.4通过74HC138控制数码管的位选。P0口为高电平时对应数码管的段亮。 四、软件设计
按键函数处理如下
void DataPros()
{int tempcurTmp*100;if(temp0){display[0]0x40; // -} else{display[0]0x00;}display[1]smg[temp%10000/1000];display[2]smg[temp%1000/100]|0x80; // |0x80显示小数点display[3]smg[temp%100/10];display[4]smg[temp%10/1];display[5]0x39;}// 按键处理函数
void KeyPros()
{u8 i;// K1上调温度上限if(0K1){delay1ms(10);if(0 K1){tmpHtmpH1;if(tmpH125)tmpH125;curTmptmpH;DataPros();}while(!K1);}// K2下调温度下限if(0K2){delay1ms(10);if(0 K2){tmpLtmpL-1;if(tmpL-55)tmpL-55;curTmptmpL;DataPros();}while(!K2);}// 按K4系统开始运行读取当前温度判断是否超过温度范围if(0K4){delay1ms(10);if(0K4){enRead~enRead;if(0enRead){for(i0;i8;i){display[i]0;}}}while(!K4);}
}温度处理函数如下
// 温度处理函数
void TempPros(int temp)
{float tp;if(temp0){display[0]0x40; // -temptemp-1;temp~temp;tptemp;temptp*0.0625*1000.5;}else{display[0]0x00;tptemp;temptp*0.0625*1000.5;}// 如果温度超过上限蜂鸣器发声电机转动if((tp*0.0625)tmpH){BEEP1;MOTOR1;RELAY1;}else if((tp*0.0625)tmpL) // 如果温度低于下限蜂鸣器发声继电器工作{BEEP1;MOTOR0;RELAY0;}else{BEEP0;MOTOR0;RELAY1;}display[1]smg[temp%10000/1000];display[2]smg[temp%1000/100]|0x80; // |0x80显示小数点display[3]smg[temp%100/10];display[4]smg[temp%10/1];display[5]0x39;
}主函数
void main()
{enRead0;BEEP0;MOTOR0;RELAY1;while(1){if(0!enRead)TempPros(DS18B20ReadTemp()); // 系统运行时默认数码管不显示当按了K4时显示实时温度KeyPros();DigDisplay();}
}仿真结果