收藏 分销(赏)

单片机专业课程设计方案报告-基于AT89C51单片机的数显温度传感器设计.docx

上传人:二*** 文档编号:4539937 上传时间:2024-09-27 格式:DOCX 页数:41 大小:511.48KB
下载 相关 举报
单片机专业课程设计方案报告-基于AT89C51单片机的数显温度传感器设计.docx_第1页
第1页 / 共41页
本文档共41页,全文阅读请下载保存,需付费购买,开通VIP下载更划算
资源描述

1、课题二: 基于AT89C51单片机数显温度传感器设计一、设计目标1、掌握51单片机最小系统设计;2、掌握温度传感器DS18B20使用;3、掌握C51编程方法。二、 设计任务和要求基于AT89C51单片机数显温度传感器设计关键含有以下功效,具体要求以下:1. 温度传感器DS18B20检测环境温度。2. 用4位数码管显示温度;3. 设定一个温度,当检测温度达成这个设定值时,用蜂鸣器实现报警。三、 设计步骤 依据课题,查阅相关资料。 画出系统原理框图,确定基础电路。(电路图不能在Protuse里画,在A4纸上或用DXP画电路图) 在Protuse里进行仿真。(仿真结果出来后,才发放元件) 按电路原理

2、图在板子上焊接电路。 调试硬件。 撰写电子综合设计汇报:字数约3000字(不包含程序清单),格式见附件2)。 最终一个下午,制作PPT进行答辩。题目二:基于AT89C51单片机数显温度传感器设计元件名称型号数量单片机最小开发板STC89C521温度传感器DS18B201三极管88501蜂鸣器1LED 红1电阻10k、3k、2k、1k、510、330各5各2位一体数码管共阳2AC/DC(5V/1A)电源1单排插针 402双排插针 4029X15cm万用板(3连孔)1杜邦线15附件2:单片机原理及其应用课程设计设计汇报格式成绩:重庆大学城市科技学院电气学院基于AT89C51单片机数显温度传感器设计

3、汇报一、设计目标作用本设计是一款简单实用小型数字温度计,所采取关键元件有传感器DS18B20,单片机AT89C52,四位共阴极数码管一个,电容电阻若干。DS18B20支持“一线总线”接口,测量温度范围-55 +125。在-10 +85范围内,精度为0.5。18B20精度较差,为 2 。现场温度直接以“一线总线”数字方法传输,大大提升了系统抗干扰性。适合于恶劣环境现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。此次数字温度计设计共分为五部分,主控制器,LED显示部分,传感器部分,复位部分,按键设置部分,时钟电路。主控制器即单片机部分,用于存放程序和控制电路;LED显示部分是指四

4、位共阴极数码管,用来显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路,按键部分用来设置上下限报警温度。测量总过程是,传感器采集到外部环境温度,并进行转换后传到单片机,经过单片机处理判定后将温度传输到数码管显示。二、设计要求基于AT89C51单片机数显温度传感器设计关键含有以下功效,具体要求以下:(1)温度传感器DS18B20检测环境温度。(2)用两个2位一体共阳数码管显示温度;(3)经过按键开关设定一个上限温度和一个下限温度,当检测温度达成这个设定值时,用蜂鸣器实现报警,同时LED灯闪烁。三、设计具体实现1、设计原理用温度传感器,在单片机电路设计中,大多全部

5、是使用传感器,所以这是很轻易想到,所以能够采取一只温度传感器DS18B20,此传感器,能够很轻易直接读取被测温度值,进行转换,就能够满足设计要求。(DS18B20数字温度传感器含有单总线独特优点,能够使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠,所以在该设计中采取DS18B20数字温度传感器测量温度。)试验名称是“基于AT89C51单片机数显温度传感器设计”,包含到MCS-51系列单片机,我们首先有设计一个能使单片机工作最小系统,然后温度传感器将实时温度值送给单片机,经过对单片机进行软件编程实现数据处理,然后送给LED共阴数码管显示,在对单片机编程时要考虑到要使得能经过按

6、键开关设置上限报警温度及下限报警温度,经过蜂鸣器报警,在报警同时LED灯同时闪烁。设计任务书中已给出了元件清单,不过我们需要在软件中对自己设计电路进行仿真我们还需要画出单片机最小系统电路。总体电路结构框图所表示:共阳数码管显示模块AT89C51单片机单片机时钟电路及复位电路DS18BB20温度传感器模块蜂鸣器报警及LED显示模块按键控制模块电源2、系统设计(具体介绍各单元电路选择、设计及工作原理分析,并介绍相关参数计算及元器件参数选择等,要求有原理图。)(1)、硬件设计硬件电路设计经过单片机仿真软件Proteus 8.0进行原理图编辑,依据试验要求及所给出元件设计出以下电路原理图,并进行了仿真

7、时钟及复位模块试验所给元件中直接已给出了AT89C51最小系统板,不过我们在设计电路时还是你需要画出该部分电路,时钟复位为能使单片机工作最简单电路,又称最小系统。具体试验电路以下:时钟电路有12MHz晶振及两个2030PF瓷片电容(无极性)连接在单片机XTAL1及XTAL2连个端口;复位电路由10K电阻,10UF电解电容(有极性)和按键开关组成,接在单片机RST口。当系统出现故障错误,我想让系统恢复初始化状态能够经过对按动按键开关实现对电容充放电从而实现系统复位。蜂鸣器报警及LED显示模块蜂鸣器用于当温度传感器输入温度数值大于认为设定上限温度或小于下限温度时,系统会给出对应信号使得蜂鸣器发出声

8、音同时让LED灯闪烁显示,从听觉和视觉上同时提出报警信号。电路图以下:蜂鸣器由一个PNP型三极管驱动接在单片机P1.0口,当P1.0口输出低电平是蜂鸣器发出声音;LED灯正极经过1K电阻上拉接Vcc,负极接在单片机P1.1口,当系统在P1.1口输出低电平时LED灯亮。共阳数码管显示显示模块试验给出数码管为2位一体共阳数码管,在试验显示中我们需要四个数码管去显示对应温度,所以采取两个2位一体共阳数码管并联当做一个4位一体共阳数码管。电路原理图以下:数码管使用设计到了段选及位选,我们把段选接在单片机P0口 ,位选接在数码管P2.4P2.7口,需要注意是此数码管为共阳,所以P0口输出低电平完全能够驱

9、动数码管段选显示,不过位选输出高电平不足以驱动数码管显示造成数码管亮度不够,此时我们需要在数码管位选段接上对应1K上拉电阻,这么数码管亮度就能够显著得到提升。DS18BB20温度传感器模块DS18B20温度传感器是美国DALLAS半导体企业最新推出一个改善型智能温度传感器,和传统热敏电阻等测温元件相比,它能直接读出被测温度,而且可依据实际要求经过简单编程实现912位数字值读数方法。电路图以下:接在单片机P2.3口,DS18B20DQ端需要接一个4.7K左右上拉电阻。按键控制模块按键是用来设置报警上下限温。K1是用来进入上下限调整模式,当按一下K1进入上限调整模式,再按一下进入下限调整模式。在正

10、常模式下,按一下K2进入查看上限温度模式,显示1s左右自动退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除按键音,再按一下开启按键音。在调整上下限温度模式下,K2是实现加1功效, K1是实现减1功效,K3是用来设定上下限温度正负。(2)、软件设计经过单片机编程软件Keil 4进行编程,程序部分经过一个主函数和自定义三个#includeds18b20.h #includekeyscan.h #includedisplay.h 头文件,分别完成温度采集转化、经过键盘设定上下限报警温度和模式切换、经过定时器0延时使数码管动态显示温度系统主步骤图:3、 系统实现(具体介绍实物

11、连接图及运行程序时每种结果,要求有图为证,并对每张图片进行简单说明)依据系统设计框图,查找相关资料,在Proteus 8.0中画出原理图,在KEIL 4软件中编写好程序,然后将这两个软件结合,将写好程序在Proteus 8.0中烧录进单片机,然后开启仿真开关,即可显示设计效果,经过修改硬件电路同时结合程序,实现试验要求。然后开始焊接硬件电路,在多孔板上焊出对应电路,用杜邦线将各个模块和单片机最小系统板连接在一起得到最终电路,用烧录软件将程序烧录进单片机,最终以实际电路形式展现出结果。系统调试及性能分析:硬件调试,首先检验电感焊接是否正确,然后可用万用表测试或通电检测。软件调试能够先编写显示程序

12、并进行硬件正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等编程及调试四、总结(对整个设计工作过程进行归纳和综合,对设计中所存在问题和不足进行分析和总结,提出处理方法、方法、提议和对这次设计实践认识、收获和提升。)经过此次课程设计使我收获很多,从一开始对单片机仿真软件使用到以后逐步熟悉,深深感觉到了我们在设计电路时候为了验证我们方案可行性,我们必需借助部分仿真软件,来模拟我们设计电路,这么既能够节省本也使得我们焊接实物时有了很好依据,要学会以这种方法为基础再来焊接电路。经过系统仿真软件Proteus和编译软件Keil,使我们深入了解了单片机

13、设计制作过程,其中最为困难是软件部分,即编程部分,我们上网找了好多资料,即使经过自己修改,但还是有很多功效不能实现,如温度上下限设置。因为Proteus并不是很熟练,在使用过程中有很多原件名称不知道,从而花费了大量时间查阅资料。在应用仿真过程中,还出现了仿真软件出现问题,不管怎样修改程序,结果在仿真软件上还是出现错误,以后发觉是我们使用软件是盗版所以她可能在仿真过程中出现错误,最终决定先将硬件焊接出来将程序写进去看看结果,再对软件进行对应调整,最终焊接出来将程序写进单片机经过简单调整实现了试验要求。最终一步焊接硬件也碰到了不少麻烦。总而言之我们得出这么结论,应该借助软件仿真证实我们方案可行性,

14、设计时实际电路和我们理论上数值是有所差异,我们也要学会将理论知识和实际结合起来,这么我们才能在实际中提升自我能力,我们才能真正了解并在实际中利用我们知识。五、附录附录一:元件清单元件名称型号数量单片机最小开发板STC89C521温度传感器DS18B201三极管88501蜂鸣器1LED 红1电阻10k、3k、2k、1k、510、330各5各2位一体数码管共阳2AC/DC(5V/1A)电源1单排插针 402双排插针 4029X15cm万用板(3连孔)1杜邦线15附录二:实物焊接图附录三:程序/* 程序名; 基于51单片机温度计* 功效:实时测量温度,超出上下限报警,报警温度可手动调整。 K1是用来

15、进入上下限调整模式,当按一下K1进入上限调整模式,再按一下进入下限调整模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除按键音,再按一下开启按键音。在调整上下限温度模式下,K2是实现加1功效,K1是实现减1功效, K3是用来设定上下限温度正负。*/#include#include /将intrins.h头文件包含到主程序(调用其中_nop_()空操作函数延时)#define uint unsigned int#define uchar unsigned charuchar max=0x00,min=0x

16、00; /max是上限报警温度,min是下限报警温度bit s=0;/s是调整上下限温度时温度闪烁标志位,s=0不显示200ms,s=1显示1s左右bit s1=0;/s1标志位用于上下限查看时显示void display1(uint z); /申明display1()函数(display.h头文件中函数,ds18b20.h要用应先申明)#includeds18b20.h#includekeyscan.h#includedisplay.h/*/*主函数/*/void main() beer=1; /关闭蜂鸣器 led=1; /关闭LED灯 timer1_init(0); /初始化定时器1(未开

17、启定时器1)get_temperature(1); /首次开启DS18B20获取温度(DS18B20上电后自动将EEPROM中上下限温度复制到TH和TL寄存器)while(1) keyscan();get_temperature(0);display(temp,temp_d*0.625);alarm(); /* 程序名; ds18b20keyscan函数* 功效:经过键盘设定设定上下限报警温度*/#ifndef _keyscan_H_/定义头文件#define _keyscan_H_sbit key1=P22;sbit key2=P21;sbit key3=P20;sbit key4=P33;

18、uchari=0;/定义全局变量i用于不一样功效模式选择,0正常模式,1上限调整模式,2下限调整模式uchar a=0; /定义全局变量a用于不一样模式下数码管显示选择bit k4=0;/K4按键双功效选择位,k4=0时K4按键选择消按键音功效,k4=1时K4按键选择正负温度设定功效bit v=0;/K2、K3按键双功效选择位,v=0时选择上下限查看功效,v=1时选择上下限温度加减功效bit v1=0;/v1=1时定时1250ms时间到自动关闭报警上下限查看功效bit v2=0; /消按键音功效调整位,为0时开按键音,为1时关按键音/*/*读键盘延时子函数/*/void keyscan_del

19、ay(uint z)/延时1ms左右uinti,j;for(i=z;i0;i-)for(j=120;j0;j-);/*/*温度调整函数/*/inttemp_change(intcount,bit f)/上下限温度调整 if(key2=0)/判定K2是否按下 if(v2=0)beer=0;/v2=0开按键音,不然消按键音keyscan_delay(10);/延时10msif(key2=0)/再次判定K2是否按下(实现按按键时消抖) beer=1;/K2按下关按键音 if(f=0)/若温度为正 count+;/每按一下K2温度上调1 if(a=1)if(count125) count=125;/当

20、温度值大于125时不上调if(a=2)if(count125) count=125; if(f!=0)/若温度为负 count+;/每按一下K2温度下调1 if(a=1)if(count55) count=55;/当温度值小于-55时不再下调if(a=2)if(count55) count=55; while(key2=0);/K2松开按键时消抖keyscan_delay(10);if(key3=0)if(v2=0)beer=0;keyscan_delay(10);if(key3=0) /K3按按键时消抖beer=1;count-;/每按一下K3温度为正时下调1,为负时上调1if(a=1)if

21、(count0) count=0;/当温度值达成0时不再调if(a=2)if(count2)/K1按下三次后退出调整模式 i=0;/进入正常模式 TR1=0;/关定时器1 k4=0;/在正常模式下选择K4消按键音功效 v=0;/在正常模式下选择K2、K3查看上下限报警温度功效store_t();/存放调整后上下限报警温度 switch(i)/显示选择 case 0:a=0;break;/a=0选择显示测得温度 case 1:a=1;break; /a=1选择显示上限温度 case 2:a=2;break; /a=2选择显示下限温度default:break; while(key1=0);/K1

22、松按键时消抖keyscan_delay(10);if(a=1&v=1)/a=1选择显示上限温度且v=1时选择上下限温度加功效led=0;max=temp_change(max,f_max);/显示上限温度else if(a=2&v=1)/a=2选择显示下限温度且v=1时选择上下限温度减功效led=1;min=temp_change(min,f_min);else;if(k4=1)/k4=1时K4按键选择正负温度设定功效if(key4=0)if(v2=0)beer=0;keyscan_delay(5);if(key4=0)beer=1;if(a=1) if(max55) f_max=0;else

23、 f_max=f_max;/当温度大于55度时,只能设定为正温度if(a=2) if(min55) f_max=0;else f_min=f_min;/当温度大于55度时,只能设定为正温度while(key4=0);keyscan_delay(10);if(v=0) /v=0时选择上下限查看功效if(key2=0)if(v2=0)beer=0;keyscan_delay(10);if(key2=0)beer=1; a=1;/选择上限显示 TR1=1;/开定时器1开始定时一分钟左右 s1=1;/上限显示不闪烁,显示一分钟左右自动退出while(key2=0);keyscan_delay(10);

24、if(key3=0)if(v2=0)beer=0;keyscan_delay(10);if(key3=0)beer=1; a=2;/选择下限显示 TR1=1;/开定时器1开始定时1s s1=1;/下限显示不闪烁,显示1s自动退出while(key3=0);keyscan_delay(10);if(v1=1) /v1=1时定时1s时间到自动关闭报警上下限查看功效a=0;v1=0;TR1=0; /a=0显示实测温度,v1清零,关定时器1if(k4=0) /k4=0时K4按键选择消按键音功效if(key4=0)if(v2=0)beer=0;keyscan_delay(10);if(key4=0)be

25、er=1; v2=v2;/为0时开按键音,为1时关按键音while(key4=0);keyscan_delay(10); #endif/* 程序名; DS18B20头文件* 说明:用到全局变量是:无符号字符型变量temp(测得温度整数部分),temp_d(测得温度小数部分),标志位f(测量温度标志位0表示“正温度”1表示“负温度”),标志位f_max(上限温度标志位0表示“正温度”、1表示“负温度”),标志位f_min(下限温度标志位0表示“正温度”、1表示“负温度”),标志位w(报警标志位1开启报警0关闭报警)。*/#ifndef _ds18b20_h_ /定义头文件#define _ds1

26、8b20_h_#define uint unsigned int#define uchar unsigned charsbit DQ= P23; /DS18B20接口sbit beer=P10; /用beer表示P1.0sbit led=P11; /用led表示P1.1uchar temp=0; /测量温度整数部分uchartemp_d=0; /测量温度小数部分bit f=0; /测量温度标志位0表示“正温度”1表示“负温度”)bit f_max=0; /上限温度标志位0表示“正温度”1表示“负温度”)bit f_min=0; /下限温度标志位0表示“正温度”1表示“负温度”)bit w=0;

27、 /报警标志位1开启报警,0关闭报警;/*/*延时子函数/*/void ds18b20_delayus(uint t) /延时几swhile(t-);void ds18b20_delayms(uint t) /延时1ms左右uinti,j;for(i=t;i0;i-)for(j=120;j0;j-);/*/*DS18B20初始化函数/*/void ds18b20_init() uchar c=0; DQ=1;DQ=0; /控制器向DS18B20发低电平脉冲ds18b20_delayus(80); /延时15-80sDQ=1;/控制器拉高总线,while(DQ);/等候DS18B20拉低总线,在

28、60-240s之间ds18b20_delayus(150);/延时,等候上拉电阻拉高总线DQ=1;/拉高数据线,准备数据传输;/*/*DS18B20字节读函数/*/uchar ds18b20_read()uchari;uchar d=0;DQ = 1;/准备读;for(i=8;i0;i-) d = 1; /低位先发;DQ = 0;_nop_();_nop_();DQ = 1;/必需写1,不然读出来将是不预期数据;if(DQ)/在12us处读取数据;d |= 0x80;ds18b20_delayus(10);return d; /返回读取值/*/*DS18B20字节写函数/*/void ds18

29、b20_write(uchar d)uchari;for(i=8;i0;i-) DQ=0; DQ=d&0x01; ds18b20_delayus(5); DQ=1; d = 1; /*/*获取温度函数 /*/voidget_temperature(bit flag)uchar a=0,b=0,c=0,d=0;uinti;ds18b20_init();ds18b20_write(0xcc);/向DS18B20发跳过读ROM命令ds18b20_write(0x44);/写开启DS18B20进行温度转换命令,转换结果存入内部RAMif(flag=1)/首次开启DS18B20进行温度转换需要500ms

30、,若转换时间不够就犯错,读出是85度错误值。 display1(1);/用开机动画耗时elseds18b20_delayms(1);ds18b20_init();ds18b20_write(0xcc); ds18b20_write(0xbe);a=ds18b20_read();/读内部RAM (LSB)b=ds18b20_read();/读内部RAM (MSB)if(flag=1)/局部位变量f=1时读上下线报警温度 max=ds18b20_read(); /读内部RAM (TH) min=ds18b20_read(); /读内部RAM (Tl)if(max&0x80)=0x80) /若读取上

31、限温度最高位(符号位)为1表明是负温度f_max=1;max=(max-0x80); /将上限温度符号标志位置1表示负温度,将上限温度装换成无符号数。 if(min&0x80)=0x80)/若读取下限温度最高位(符号位)为1表明是负温度f_min=1;min=(min-0x80); /将下限温度符号标志位置1表示负温度,将下限温度装换成无符号数。i=b;i=4;if (i=0) f=0; /i为0,正温度,设置正温度标识 temp=(a4)|(b4)|(b4);/整数部分a=(a&0x0f);/小数部分temp_d=a;/*/*存放极限温度函数/*/voidstore_t() if(f_max

32、=1) /若上限温度为负,将上限温度转换成有符号数(最高位为1是负,为0是正)max=max+0x80;if(f_min=1) /若下限温度为负,将上限温度转换成有符号数min=min+0x80; ds18b20_init();ds18b20_write(0xcc); ds18b20_write(0x4e); /向DS18B20发写字节至暂存器2和3(TH和TL)命令ds18b20_write(max); /向暂存器TH(上限温度暂存器)写温度ds18b20_write(min); /向暂存器TL(下限温度暂存器)写温度ds18b20_write(0xff); /向配置寄存器写命令,进行温度值分辨率设置ds18b20_init();ds18b20_write(0xcc); ds18b20_write(0x48); /向DS18B20发将RAM中2、3字节内容写入EEPROM /DS18B20上电后会自动将EEPROM中上下限温度拷贝到TH、TL暂存器/*

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服