电子信息工程专业本科生毕业论文内容摘要:

比,外部电源供电方式是 DS18B20 温度传感器最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。 因此我选择了方案 3。 显示模块 由于本设计有实现显示温度数值的功能,所以选择一个合适的显示模块设计方案 对系统来说非常重要。 常用的显示模式有 LCD 液晶显示 、 LED 数码管显示 、点阵显示。 对于显示模块我考虑了以下 2 种方案: 方案 1: LCD 液晶显示屏具有轻薄短小,低耗电量,几乎没有辐射危险,平面直角显示以及形象稳定不闪烁等优势,大面积显示,画面效果好,分辨率高,抗干扰能力强等特点,其缺点便是成本偏高。 方案 2: LED 数码管( LEDSegmentDisplays)是由七段发光二极管封装在一起组成“ 8”字型的器件,引线已在内部连接完成,根据 LED 的接法不同分为共阴和共阳两类,使用时只需引出它们的各个笔划,公共电极。 控制简单,但硬件电路接线所需的I/O 较多且本体体积较大。 考虑到该设计的产品在实际使用时大小要适合安装、美观以及抗干扰的能力,我选择了方案 1。 警报模块 对于本系统的警报模块我考虑了以下 2种方案: 方案 1:采用蜂鸣器发出有声警报。 方案 2:采用 LED 发出无声警报。 考虑到采用有声警报可能会对人们的日常生活产生一些不必要的困扰(如:夜晚休息时突然发出警报影响休息等),故此我选择了方案 2。 5 3.硬件实现及单元电路设计 微控制器模块的设计 STC 公司的 STC89C52 是 51 内核的单片机。 不用专用 烧写器而只需要串口或者并口就可以往单片机中下载程序。 采用的晶振为。 图 31 STC889C52RC接线电路 电源电路的设计 由于本次为了使单片机和传感器等工作稳定、互不影响,故采用 7V 直流充电器经过稳压芯片 7805 转换后的电压作为单片机和传感器供电。 其转换电路如下: 6 图 32 电源电路 DS18b20 温度传感器温度采集模块的设计 采用外部供电方式。 图 33 DS18b20接线电路 7 LCD1602 显示模块电路 的设计 采用 10ΚΩ的变阻器调节其对比度。 图 34 LCD1602接线电路 警报模块电路的设计 二极管正向工作电流为 2mA~ 10mA,正向饱和压降为 ~ ,计算其搭配的电阻阻值 R=(5V2V)/10mA=300Ω。 8 图 35 警报灯 LED接线电路 复位电路的设计 计算电容值 CC43R S T1 /VRR*VC )(  =6μF。 图 36 复位电路 9 电路总图 图 37 电路总图 10 程序流程图 设计的软件的程序流程图如下图所示: 图 41 程序流程图 系统初始化 LCD1602 显示读取到的温度值 读取室内 DS18b20 测得的温度数值 读取室外 DS18b20 测得的温度数值 LCD1602 显示读取到的温度值 计算两个数值的差值 差值是否大于 7。 警报 灯 LED 亮起 Y Y Y N N N 11 关键模块程序及其代码 DS18b20 温度采集模块程序 /****************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 = 0。 for (i=0。 i8。 i++) { DQ = 0。 //给脉冲信号 dat=1。 DQ = 1。 //给脉冲 信号 if(DQ) dat|=0x80。 delay_18B20(10)。 } return(dat)。 } void ds1820wr(uchar dat)/*写数据 */ { uchar i=0。 for (i=0。 i8。 i++) { DQ = 0。 DQ = datamp。 0x01。 delay_18B20(10)。 DQ = 1。 dat=1。 } } 12 void b20_Matchrom(uchar a) //匹配 ROM { char j。 ds1820wr(0x55)。 //发送匹配 ROM 命令 if(a==1) { for(j=0。 j8。 j++) ds1820wr(str1[j])。 //发送 18B20的序列号,先发送低字节 } if(a==2) { for(j=0。 j8。 j++) ds1820wr(str2[j])。 //发送 18B20的序列号,先发送低字节 } } read_temp(uchar z)/*读取温度值并转换 */ {uchar a,b。 float tt。 ds1820rst()。 ds1820wr(0xcc)。 //读序列号 ds1820rst()。 if(z==1) { b20_Matchrom(1)。 //匹配 ROM 1 } if(z==2) { b20_Matchrom(2)。 //匹配 ROM2 } ds1820wr(0x44)。 //*启动温度转换 */ delay1ms(5)。 ds1820rst()。 ds1820wr(0xcc)。 //读序列号 ds1820rst()。 if(z==1) { b20_Matchrom(1)。 //匹配 ROM 1 } if(z==2) { b20_Matchrom(2)。 //匹配 ROM2 } 13 ds1820wr(0xbe)。 //*读取温度 */ a=ds1820rd()。 b=ds1820rd()。 tvalue=b。 tvalue=8。 tvalue=tvalue|a。 if(tvalue0x0fff) tflag=0。 else {tvalue=~tvalue+1。 tflag=1。 } tt=tvalue*。 tvalue=tt*10。 return(tvalue)。 } LCD1602 显示模块程序 /*************************lcd1602 程序 **************************/ void delay1ms(uint ms)//延时 1毫秒 { uint i,j。 for(i=0。 ims。 i++) for(j=0。 j100。 j++)。 } void wr_(uchar )//写指令 // { delay1ms(1)。 RS=0。 RW=0。 EN=0。 P2=。 delay1ms(1)。 EN=1。 delay1ms(1)。 EN=0。 } void wr_dat(uchar dat)//写数据 // { delay1ms(1)。 RS=1。 14 RW=0。 EN=0。 P2=dat。 delay1ms(1)。 EN=1。 delay1ms(1)。 EN=0。 } void wr_new()//写新字符 { uchar i。 wr_(0x40)。 for(i=0。 i8。 i++) { wr_dat(table[i])。 } } void lcd_init()//初始化设置 // {delay1ms(15)。 wr_(0x38)。 delay1ms(5)。 wr_(0x08)。 delay1ms(5)。 wr_(0x01)。 delay1ms(5)。 wr_(0x06)。 delay1ms(5。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。