1、2.2.1 数字温度传感器DS18B20 ,具有独特的单总线接口方式,需一根总线就能实现控制模块与DS18B20之间的半双工通信。DS18B20是集传感元件和转换电路于一体的小芯片上。另外,DS18B20也支持一线总线接口,测量温度范围为-55C+125C,在-10+85C范围内 。现场温度直接以的数字方式传输,大大提高了系统的抗干扰性。 2.2.2 工作原理 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图1所示。 第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节为配置寄存
2、器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义热图二所示。低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换得精度位数,即用来设置分辨率,定义方法见表1。 图一 图二2.2.3 供电方式采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电2.3烟雾报警器电路MQ2 MQ2烟雾传感器,有只针状管脚,其中个用于信号取出,个用于提供加热电流。当烟雾扩散时,烟雾传感器感应到烟雾时, 继电器打到NO
3、,风扇开始工作,马达转动,风扇产生吸力将烟雾吸入到装有活性炭和负离子的过滤外壳中,排清新干净的气体2.4信号调理及放大整形模块,LM358芯片 LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器。当P1.5为0时报警。2.5显示模块LED 采用LED数码管显示 2.6报警电路 用蜂鸣器作报警提示音,加发光二极管,声光结合充分突出了紧急提示信号的特点。2.7按键分析 四个按键的功能分别为:第一个按键是结束选择,按一下表示显示管进行显示当时温度;第二个键是减键,对设定的温度进行减一;第三个键是加键;第四个键是进入键,按一下表示进入设置温度模式。 2.8 复位电路原理:VCC上电时,
4、C3充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10k电阻上电流降为0,电压也为0,使得单片机复位。工作期间,按下S4,C放电,在10K电阻上出现电压,使得单片机复位。S松手,C又充电,几个毫秒后,单片机进入工作状态。 第三章 流程图设计3.1电路系统模块 3.2主程序流程图 3.3温度报警子程序3.4烟雾报警子程序图3.5对18B20写程序流程图3.6对18B20读8为数据流程图3.7温度值转换流程图3.8 18B20读取温度流程图 第四章 电路实验与调试 4.1 焊接 4.2 软件设计#include #include 18b20.hintrins.h#define
5、uint unsigned int/宏定义#define uchar unsigned char/宏定义 #define date P1 /数码管段选uint temp,alarm_temp;/定义温度,设定温度bit key_lock,chang_flag;bit zerotemp_flag; /负温度标志位uchar code LED = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /三位共阳极数码管09的断码/数码管位定义sbit ge = P12;/个位sbit shi = P11;/十位sbit bai = P10;/百位sb
6、it bell = P27;/蜂鸣器定义sbit MQ = P15;/MQ-2定义sbit DQ = P14;/18B20定义/按键定义sbit key0 = P20;sbit key1 = P21;sbit key2 = P22;sbit key3 = P23;void delay_ms(uint xms)/延时子程序 uint i,j; for(i=xms;i0;i-)/i=xms即延时约xms; for(j=110;jj-);void delay_us(uint z)/微妙级延时 while(z-) _nop_();void display(uint x)/数码管显示子程序 /取一温度值
7、x uint temp1; temp1 = x; temp1 = temp1%1000;/使温度值不超过三位有效数/动态显示 /显示个位 ge = 0;/开显示 date = LEDtemp1%10;/将temp1的个位显示出来 delay_ms(2);/延时2ms ge = 1;/关显示 /显示十位 shi = 0; date = LEDtemp1%100/10&0x7f; /将temp1的十位显示出来,并显示小数点dp位 shi = 1; /显示百位 bai = 0; date = LEDtemp1/100;/将temp1的百位显示出来 bai = 1; /关显示 void alarm(v
8、oid)/报警子程序 if(tempalarm_temp)|(MQ = 0)/如果温度大于设定值或MQ2=0 bell = 0;/蜂鸣器响 else bell = 1;/蜂鸣器不响/*18B20程序*/void fuwei(void)/18B20复位 DQ = 0; delay_us(50); /600us DQ = 1; delay_us(5); /70usuchar read_18B20(void)/从18B20读取8位数据 uchar i,dat; /从最低位开始接收 for(i = 0;i=1; /数据右移一位 /延时1us /释放总线 /延时2us后在读取,不然读取值会紊乱,很关键!
9、 if(DQ) dat|=0x80; /如果接收到的是1,则最高位置为1 delay_us(2); /延时40us return dat;void write_18B20(uchar dat)/对18B20写8位数据 uchar i;/延时10us DQ = (bit)(dat&0x01); /从最低位开始发送 /右移一位 delay_us(1); /延时40us /释放总线void changetemp(void)/温度值转换 uint Temp_L,Temp_H; Temp_L = read_18B20();/读取低八位 Temp_H = read_18B20();/读取高八位,当温度为负
10、数时 temp(74)为1,反之为0 if(bit)(Temp_H&0x80) zerotemp_flag = 1; /温度为负数标志位 /负温度计算 Temp_H &= 0x0f; temp = (Temp_H990)/如果数码管前两位大于99,则清零 alarm_temp = 0; key_lock = 0; alarm_temp-=10; /alarm_temp+10=alarm_temp(温度减1)1000)/如果三位数码管都是0,则减一后变为990 alarm_temp = 990;key3) chang_flag = 0; display(alarm_temp);/显示设定温度4.
11、3调试与处理出现问题 1.温度显示不正确,发现DS18B20电路少接一个电阻。 2.程序无法上电,发现复位程序出现虚焊。 第五章 设计总结在二周的电子课程设计中,这次的实验不仅加强了硬件的使用能力,还加强了软件设计能力。在这之中有效的巩固了本学期所学的专业知识,加强了电子实物制作的动手能力 。在这次的实验设计中我们首先要做了就是画硬件图,在脑海里形成一个总的构思,包括主程序流程图,按键处理流程图,更新当前时间流程图,更新显缓存流程图等,这是比较难的,开始我们毫无思路,在老师的精心指导下最终成功的画出。焊接是比较简单的,一般一个下午就可以完成,最重要的是焊接中很容易出现的虚焊问题必须认真对待。最
12、后是程序设计与调试,程序的话应该说是上学期学过的东西运用运用而已,但是总是有些被遗忘了,在编程的时候会遇到或多或少的问题,最后也是通过参考别人的程序才成功。经过这次设计,我认识到自己还有很多的不足,只有将课本上的理论知识结合实践不断练习,不断总结提炼,反复思考实践中的经验教训,才能更好的,将课本知识化为自己的知识 。希望在以后的学习中能更加努力,学习好这门专业。(附录一) 主电路图(附录二)课程设计元器件清单表 器件名称型号数量单片机STC89C521温度传感器DS18B20 1 运算放大器LM358烟雾传感器MQ2底座DIP40,DIP8各一个数码管 共阳三连体三极管8550 3晶振12MHZ电容33PF4 22UF2电阻10K101K4.7K470 电位器103,102按键20*30 CM5蜂鸣器发光二极管排针万能板 (资料素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1