




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计论文 题 目 基于AT89S52的测温系统设计 学生姓名 鲁建彬 学 号 20071305039 院 系 电子与信息工程学院班 级 07电信(1)班指导教师 邹应全二零一零 年 六 月 九 日基于AT89S52的测温系统设计鲁建彬南京信息工程大学电子与信息工程学院07电信一班,南京 210044摘要:本文利用AT89S52单片机为核心器件,从硬件和软件两个方面设计实现了一个测温系统,并且该系统还有温度报警功能,报警温度能够通过按键设定。反应迅速结果准确。关键词:单片机;18B20;数码管;温度测量 一、设计的要求及目的此设计采用AT89S52单片机为核心控制元件,结合数码管、蜂鸣器、温度传感器等器件,利用了单片机的延时电路、按键复位电路、时钟电路、定时中断等电路构成一个测温系统。具体要求如下:(1)设计一个测温系统。(2)系统能够测量环境温度,要求能够用两位或多位LED显示。(3)要求能有报警功能,当温度超过报警上限时要能报警,报警上限要能够通过键盘设定。(4)系统设置复位按钮,按下后,报警温度上限自动变为30C。(5)电源使用普通的电源接口,通过5V电源适配器供电。二、系统方框图 该系统的方框图如图1所示,在AT89S52单片机的P2口接上三个开关用于设定报警温度上限,以及设定之后确认;温度传感器DS18B20与单片机P2.4口相连,用于采集温度数据;P3.3口接温度设定开关,按下后即可进行报警温度上限的设定;在RST脚接复位开关,用于将报警温度重新置为30C;在P13.4口接蜂鸣器用于温度超过报警温度时报警;在P0口接四个数码管用于显示当前温度和设定的报警温度。该系统还包括电源部分和振荡器部分。AT89S52复位设定温度蜂鸣器时钟振荡LED显示DS18B20键盘图1 系统原理框图三、硬件电路分析及原理图设计1.各部分电路分析(1)电源电路单片机工作时需要的+5V 电压,本设计采用普通的电源接口,通过5V的电源适配器供电。电源部分还连接开关和发光二极管,用于判断电源是否正常工作。需要注意的是,滤波电容对于电路设计非常重要,不加滤波电容会导致系统不稳定。因此在电源部分还加了104的瓷片电容和和10f铝电解作为滤波电容。(2)复位电路AT89S52的复位输入引脚RST 为单片机提供了初始化的手段,可以使程序从指定处开始执行,在AT89S52的时钟电路工作后,只要RST 引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作。只要RST 保持高电平,则单片机循环复位。只有当RST 由高电平变低电平以后,单片机才从0000H 地址开始执行程序。本系统采用按键复位方式的复位电路,当复位键按下时,系统自动将报警上限温度设为30C。(3)时钟电路AT89S52的时钟可以由两种方式产生,一种是内部方式,利用芯片内部的振荡电路;另外一种为外部方式。本论文根据实际需要和简便,采用内部振荡方式。89S52内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 分别是此放大器的输入端和输出端。 这个放大器与作为反馈元件的片外晶体或陶瓷谐振器一起构成一个自激振荡器。AT89S52虽然有内部振荡电路,但要形成时钟,必须外接元件所以实际构成的振荡时钟电路。外接晶体以及电容C1 和C2 构成并联谐振电路接在放大器的反馈回路中。 对接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性。 晶体频率可在1. 2MHz12MHz 之间任选,电容C1 和C2 的典型值在20pF100pF 之间选择,考虑到本系统对于外接晶体的频率稳定性要求不高,所以采取比较廉价的11.0592MHz 陶瓷谐振器。(4)输入电路该系统的输入电路包括温度设定键盘和一个启动外部中断的按键。当接在P3.3口的按键按下时,程序进入外部中断1,即可以设定报警温度上限。外部中断程序调用键盘扫描程序取键值,当減少键按下,报警温度下降1C,当增加键按下,报警温度上升1C,当退出键按下,则退出中断,继续执行主程序。主程序会将DS18B20采集到的温度值与设定的报警温度上限相比较,若高于报警温度,则启动蜂鸣器报警。(5)显示电路该系统显示部分选用4为共阳数码管。数码管的8位数据端通过1k的上拉电阻连接到单片机的P0口,4位使能端分别连到P1.0-P1.3。由于数码管的驱动电流较大,所以在设计时加上了三极管3904作为驱动电路。(6)蜂鸣器电路蜂鸣器的正极性的一端接到三极管的发射极,另一端连接到地,三极管的基极由单片机的P3.4口控制,高电平时蜂鸣器响,低电平时蜂鸣器不响。(7)温度传感器DS18B20是美国DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;可用数据线供电,电压范围:3.0-5.5V;温度测量范围-55C-+125C,可编程为9-12位A/D转换精度,测温分辨率最高可达0.0625C,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用处理器的端口少,可节省大量引线和逻辑电路。AT89S52控制DS18B20DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必需先启动DS18B20开始转换,再读出温度转换值。本设计采用默认的12位转换精度,外接电源供电。此时DS18B20的1脚接地,2脚作为信号线,与单片机P2.4脚相连,3脚接电源。需要注意的是,当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us,因此2脚还要接一个4.7k 的上拉电阻。2.器件清单此系统所用到的器件列于表1中。表1 器件清单型号位置数量100电阻R4, R7, R10, R13, R1651k电阻R1, R2, R3, R6, R9, R12, R1574.7k电阻R171100k电阻R5, R8, R11, R1441k排阻R18110f铝电解C1, C2, C6315pF瓷片电容C3, C420.1F瓷片电容C5, C7211.0592MHz晶体Y1118B20温度传感器U40213904三极管V1, V2, V3, V4, V55AT89S52单片机U11蜂鸣器A11按键S2, S3, S4, S5, S65开关S114位共阳极数码管U81红色发光二极管LED215V电源接口1万能版1导线若干3.原理图设计 该系统完整的原理图如下所示:四、程序设计系统软件主要由主程序、DS18B20程序和外部中断服务程序组成。主程序的功能主要是完成内部各寄存单元的初始化,对接口电路的初始化,中断的初始化及调用DS18B20程序和显示程序对温度值进行显示,并判断温度是否超过报警温度,若超过则蜂鸣器响。系统完成初始化后,循环检查各个功能,当设定键按下,外部中断1开始执行。中断服务程序扫描键值,设定报警温度,并显示报警温度。主程序流程图和外部中断流程图如图3、图4所示:完整的C语言程序见附录图3 主程序流程图图4 外部中断流程图五、焊接调试焊接和调试时按照原理图焊接一部分调试一部分。一般先焊接电源,调试电源,然后再焊单片机以及单片机周边的晶振、蜂鸣器、数码管等部分。特别注意的是焊接DS18B20时,不能直接将其焊道电路上,而是先焊一个三脚的座,再将其插入座中,因为如果直接焊,过高的温度可能会使DS18B20损坏。硬件电路焊接完成后使用C51编写程序并下载到单片机中。该系统的程序是通过开发板下载到单片机中的,所以硬件电路中并没有焊下载口。硬件和软件的工作都完成后,系统的调试也不是一帆风顺。主要出现了以下几个问题:首先,第一次上电时整个系统只有电源指示灯亮,数码管无显示,按键也没用。我测量了单片机电源脚的电压,发现还不到3V,经过仔细检查,终于发现我将本该并联之后连接电源指示灯的1k电阻串联在了电源口的5V端口,这样经过电阻分压,单片机电源端的电压自然达不到5V了。经改正后单片机的工作电压就达到了5 V,单片机开始工作。然而我发现数码管显示的温度值并不正确,设定报警温度时,数字的变化是先变十位后变个位。显然是数码管的个位、十位以及小数位都弄反了。我想起来在焊接数码管时并没有用万用表测量各个引脚,而是随便在网上搜了一个引脚图,这次我用万用表逐个判断数码管的引脚,发现原来的引脚图果然不对,它将四个使能端完全搞反了,这直接导致数码管小数位、个位、十位颠倒,显示出现错误,经过更正,系统终于能够正常工作,基本达到了预期的设计要求。六、总结 经过将近两周的单片机课程设计,终于完成了我的数字温度计的制作,虽然并不是完全由自己设计,程序和硬件都参考了课本,但从心底里说,还是高兴的,毕竟这次设计把实物做了出来,巩固了自己理论知识的同时,增强了自己的实践操作能力。在本次设计的过程中,我发现很多的问题,虽然以前还做过抢答器的设计,当那次只是给出了硬件和软件的设计方案,并没有将实物做出来,这次做出实物真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事。虽然该系统的软件程序我大部分使用了课本上的参考程序,但是课本上的程序并不完全与我使用的硬件相符合,比如课本上的键盘扫描程序适用于矩阵键盘,而我的硬件部分使用的是独立式键盘,因此我对键盘扫描程序做了修改。另外,课本上的程序也存在错误,如果直接将其下载到单片机中会发现温度值的最后一位不能正确显示,问题就出在显示程序上,因此我对显示程序的小数位也做了修改。总之,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。一学期的单片机课程已经结束,我对该课程也有了一些意见建议。根据我这一学期对单片机的认识,我发现单片机是一门与其他专业课都不相同的课程,它注重的是实践,可以说70%的功夫要花在实践上,这门课才能学好。因此,我觉得老师在上课时应该在讲述理论知识的同时多拿些实物给我们参考,多分析几个完整的电路原理图,让我们对单片机的硬件有整体的认识。在更加关键的软件方面,我希望能在课堂上学习到系统的C51的知识,既然我们大多都用C语言编程,汇编语言部分的知识就可以适当缩减。在我们对C51有了完整的学习后再通过有实际功能的程序加深我们对编程方法的掌握。我认为,这样会使我们单片机学得更轻松。参考文献:1 邹应全51系列单片机原理与实验教程西安电子科技大学出版社2 周永东基于DS18B20的单片机数字温度计2007.04中小企业科技.附录:参考程序/DS18B20温度传感器程序#include #define Alarm 10sbit Beep=P34;sbit DQ=P24; /数据传输线接单片机的相应的引脚unsigned char tempL=0,tempH=0; /设全局变量unsigned char flag=0;unsigned int temperature,negtemper; /温度值保存在temperature里unsigned char idata addrdat2=0x0,0x0;unsigned char tab=0xc0,0xf9,0xa4,0xb0, /* 0 1 2 3 4 */0x99,0x92,0x82,0xf8,0x80,0x90; /* 5 6 7 8 9 */unsigned char tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; unsigned char dispbuf3=0,0,0;unsigned char warning=30;bit on=1,off=0; /* /延时子程序 /*void delay(unsigned int i) while(i-);void beep( bit i) Beep=i; /*/初始化程序Init_DS18B20(void) unsigned char x=0; DQ=1; /DQ先置高 delay(8); /稍延时 DQ=0; /发送复位脉冲 delay(85); /延时(480us) DQ=1; /拉高数据线 delay(14); /等待(1560us) x=DQ; /用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 delay(20); /* /读一个字节ReadOneChar(void) /主机数据线先从高拉至低电平1ms以上/再使数据线升为高电平,从而产生读信号 unsigned char i=0; /每个读周期最短的持续时间为60us,各/读周期之间必须有1ms以上的高电平恢复期 unsigned char dat=0; for (i=8;i0;i-) /一个字节有8位 DQ=1; delay(1); DQ=0; dat=1; DQ=1; if(DQ) dat|=0x80; delay(4); return(dat);/* /写一个字节WriteOneChar(unsigned char dat) unsigned char i=0; /数据线从高电平拉至低电平,产生写起始信号。15ms之内将所需写的位送到数据线上, for(i=8;i0;i-) /在1560ms之间对数据线进行采样,如果是高电平就写1,低电平就写0。 DQ=0; /在开始另一个写周期前必须有1ms以上的高电平恢复期。 DQ=dat&0x01; delay(5); DQ=1; dat=1; delay(4);/*ReadTemperature(void) Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的*作 WriteOneChar(0x44); /启动温度转换 delay(125); /转换需要一点时间,延时 Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的*作 WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); /读出温度的低位LSB tempH=ReadOneChar(); /读出温度的高位MSB temperature=(tempH*256)+tempL; /温度转换,把高低位做相应的运算转化为实际温度 return(temperature); /*void Dispbuf(unsigned int temper) dispbuf2=(temper4)/10;/取十位 dispbuf1=(temper4)%10;/取个位 /小数位dispbuf0=temper&0xf; dispbuf0*=0.625; unsigned char getkey() /键盘扫描程序 P2=0xff;if(P2&0xff)!=0xff)delay(5000);if(P2&0xff)!=0xff)return P2;else return 0; Inter0_process() interrupt 2 /外部中断1 unsigned char key; int i; unsigned char dis=0x01; unsigned int j; for(j=5000;j0;j-) key = getkey();/取键值 if (key = 0xfe)/如1键按下温值递增 warning+; delay(8000); if (key=0xfd) /5按下递减 warning-; de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭关系与心理健康的关系
- 心理治疗细则
- 园艺工作环境与安全保障
- 2025重庆永川区双石镇招聘1人笔试备考题库及答案解析
- 2025重庆垫江县科学技术局公益性岗位人员招聘1人笔试备考题库及答案解析
- 农产品溯源追溯体系的信息化
- 2025浙江嘉兴市海宁市司法局招聘合同制人员1人笔试含答案
- 2025银行基金笔试题库及答案
- 2025天津市建华中学诚聘教师笔试备考试题及答案解析
- 创意无限的主题乐园
- 2025全国企业员工全面质量管理知识竞赛试题及答案
- 水利水电工程单元工程施工质量验收标准第8部分:安全监测工程
- DB4419T 23-2024 建设工程施工无废工地管理规范
- 反诈知识竞赛题库及答案(共286题)
- 轧机设备安装施工方案
- DB31∕T 926-2015 城镇供水管道水力冲洗技术规范
- (完整版)IATF16949新版过程乌龟图的编制与详解课件
- 制药企业仓库温湿度分布的验证
- 满堂脚手架工程施工方案
- LY∕T 2705-2016 樟脑磺酸
- GB∕T 3099.4-2021 紧固件术语 控制、检查、交付、接收和质量
评论
0/150
提交评论