单片机课程设计论文.docx
《单片机课程设计论文.docx》由会员分享,可在线阅读,更多相关《单片机课程设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
单片机课程设计论文
洛阳理工学院
课程设计报告
课程名称单片机原理与应用
设计题目基于单片机温度检测报警器的设计
专业计算机科学与技术
班级
学号
姓名
完成日期
课程设计任务书
设计题目:
基于单片机温度检测报警器的设计
设计内容与要求:
一、设计内容
利用STC89C51单片机、DS18B20数字温度采集器及LCD1602显示器件设计一个温度检测报警器,要求实现温度的实时测量与显示、温度上下限设定及报警功能;
二、设计要求
1.分析系统功能,确定系统设计方案,掌握总体设计的方法与思路。
2.系统硬件设计,确定外设与单片机的硬件接口。
掌握单片机系统外部接口的扩展设计方法。
3.系统软件设计,结合硬件设计,编写相应控制程序,并进行Protuse仿真执行。
4.熟练掌握程序烧录及调试过程。
5.按照要求撰写课程设计论文。
指导教师:
2017年6月12日
课程设计评语
成绩:
指导教师:
_______________
年月日
基于单片机温度检测报警器的设计
摘要
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术。
温度的测试也已经越来越多的影响到各个领域。
因此设计一个温度测试的系统是十分必要的。
此课程设计论文主要介绍了一个基于STC80C51单片机的数字温度检测报警器系统。
本系统是基于单片机的智能温度报警控制器的设计。
以STC80C51为核心,采用温度传感器DS18B20作为温度检测器,在液晶显示屏LCD1602上显示实时温度。
并且设置上下限报警温度。
温度传感器方面,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
通过DS18B20温度传感器感应周围的环境温度。
显示方面,LCD1602通过电压来改变填充在两块平行板之间的液晶材料内部分子的排列状况,以达到遮光和透光的目的来显示深浅不一,错落有致的图象,而且只要在两块平板间再加上三元色的滤光层,就可实现显示彩色图象。
报警方面,当温度超过警界最高温度时,响报警音乐,黄色发光二极管闪烁;当温度低于最低温度报警时,响报警音乐,黄色发光二级管闪烁!
因为所选单片机可擦写次数达万次以上,为使电路的简化,其温度报警值已预设在程序中,可以通过修改程序中的预设值改变报警温度。
因此该设计控制器使用单片机STC89C51,测温传感器使用DS18B20,用LCD1602实现温度显示,再根据硬件电路编写相应程序,能准确达到题目要求。
关键词:
STC单片机DS18B20LCD1602
前言
目前温度测试系统的发展很快,传感器应用极其广泛,目前已经研制出多种新型传感器。
但是,作为应用系统设计人员需要根据系统要求选用适宜的传感器,并与自己设计的系统连接起来,从而构成性能优良的监控系统。
温度测量报警系统的中心设备是温度传感器,温度传感器的发展大致经过了以下的3个阶段:
(1)传统的分立式温度传感器(含敏感元件),主要是能够进行非电量和电量之间的转换。
(2)模拟集成温度传感器/控制器。
(3)智能温度传感器。
目前,国际上新型温度传感器正从模拟式向数字式、集成化向智能化及网络化的方向发展。
数字式温度传感器(亦称智能温度传感器)是在20世纪90年代中期问世。
它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。
目前,国际上已开发出多种智能温度传感器系列产品。
智能温度创拿起内部包含温度传感器、A/D传感器型号处理器、信号处理器、存储器(或寄存器)和接口电路。
有的产品还带多路选择器、中央控制器(CPU)、随机存取储存器(RAM)和只读存储器(ROM)。
数字式温度传感器能传输出温度数据及相关的温度控制量,适配各种微控制器(MCU),并且可通过软件来实现测试功能,即智能化取决于软件的开发水平。
进入21世纪后,温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。
在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。
因此,在温度测量系统中,采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果,读数方便,测温范围广,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
LCD1602通过电压来改变填充在两块平行板之间的液晶材料内部分子的排列状况,以达到遮光和透光的目的来显示深浅不一,错落有致的图象,而且只要在两块平板间再加上三元色的滤光层,就可实现显示彩色图象。
液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动,以最常见普遍的向列型液晶为例,液晶分子可轻易的借着电场作用使得液晶分子转向,由于液晶的光轴与其分子轴相当一致,故可借此产生光学效果,而当加于液晶的电场移除消失时,液晶将借着其本身的弹性及黏性,液晶分子将十分迅速的回撤消来未加电场前的状态。
因此该设计控制器使用单片机STC89C51,测温传感器使用DS18B20,用LCD1602实现温度显示,能准确达到题目要求。
一、设计目标与内容
1.设计目标
课程设计的目的是使学生全面地熟悉和掌握本课程的主要知识,培养学生能系统地处理和解决本课程有关的技术问题,系统地掌握单片机技术应用的设计方法,为毕业设计和今后的工作奠定良好的基础。
本课程设计是学生在学完单片机原理及应用课程之后,进行的一个综合性和实践性很强的教学环节。
学生要按照课程设计任务书的要求,对电路进行设计、分析与计算,设计程序并调试执行。
2.设计内容
利用STC89C51单片机、DS18B20数字温度采集器及LCD1602显示器件设计一个温度检测报警器,要求实现温度的实时测量与显示、温度上下限设定及报警功能;
3.设计要求
(1)明确课程设计课题,明确设计任务和要求
(2)充分了解课程设计的的性能、指标,设计内容及要求,确定设计方案
(3)硬件设计
(4)软件设计根据电路工作过程,画出软件流程图,根据流程图编写相应的程序。
(6)原理图设计及仿真根据所确定的设计电路,利用Protel或EWB等有关工具软件绘制电路原理图、PCB板图、提供元器件清单;
(7)软件下载至硬件上调试执行。
(8)按规范和要求,撰写和打印课设报告,准备课设答辩。
二、系统设计
1
2
1.设计方案
AT89C51作为温度测试系统设计的核心器件,具有低电压供电和体积小等特点。
该器件是INTEL公司生产的MCS-5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS-51的CMOS产品。
芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O接口等计算机所需的基本功能部件。
程序存储在单片机的程序存储器中,运行过程由程序控制。
晶振选用12MHZ。
DS18B20简化了温度器件与计算机的接口电路,使得电路简单,使用更加方便。
显示部分使用LCD1602来作为温度的直接输出,当温度超出限值时,蜂鸣器报警和数码管闪烁来提示。
采用单片机汇编程序语言设计温度计的程序,对DS18B20进行初始化、读、写,读取温度,数据的转换,温度显示和报警处理等等。
1.1数字温度计设计方案论证
方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
经模数转换后的温度信号传入到STC89C52单片机,再由单片机控制LED小灯、蜂鸣器和数码管来实现温度的测量、报警、显示的功能。
从以上两种方案,很容易看出,方案二电路比较简单,软件设计也比较简单,适用前景和市场经济效益分析也更优,故采用了方案二。
1.2系统设计框图
图1系统设计框图
图2程序设计流程图
三、功能模块设计
1.主控制器
单片机STC89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51系列的单片机在指令系统和引脚上完全兼容。
它有很宽的工作电源电压,可为2.7~6V,当工作在3V时,电流相当于6V工作时的1/4,工作于12Hz时,动态电流为5.5mA,空闲态为1mA,掉电状态仅为20nA。
这样小的功耗很适合于电池供电的小型控制系统。
片内有4k字节在线可重复编程快擦写程序存储器;全静态工作,工作范围:
0Hz~24MHz;间歇和掉电两种工作方式超强抗干扰;高抗静电(ESD保护),轻松过2KV/4KV快速脉冲干扰。
有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线。
STC89C52可以按照常规方法进行编程,也可以在线编程。
图3STC89C52仿真图及实物图
2.温度测量模块
独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源,测量温度范围为-55℃至+125℃。
精度为±0.5℃
温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。
DS18B20的数字温度计提供9至12位(可编程设备温度读数。
信息被发送到从DS18B20通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。
为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。
因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。
这使得温度传感器放置在许多不同的地方。
它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。
图4DS18B20实物图
3.LCD显示模块
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便应用于市面上大部分的字符型液晶。
特点:
3.3V或5V工作电压,对比度可调;内含复位电路;提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器DDRAM;内建有192个5X7点阵的字型的字符发生器CGROM;8个可由用户自定义的5X7的字符发生器CGRAM。
图5LCD1602实物图
4.上下限设定模块
函数中先提前设置好温度上下限,也可以通过按键来改变上下限,按键在未按下之前,P1口全为高电平,为0xff,当其中按键按下后,电平发生改变,P1口不会为全1,CPU检测到电平的跳变后就可判断出是哪个按键按下:
如果是第一个按键按下,为0xfd,写命令使其为温度上限的增加按键,以此类推。
同时按键可能会有抖动,所以我们在设置按键时要进行消抖。
DS18B20只能保证-125~55℃范围内的温度精度。
5.报警模块
用判断语句将18B20读出的温度与设定的温度上下限进行比较。
如果不在此范围内则通过LED灯亮和蜂鸣器响进行报警。
LED是英文lightemittingdiode(发光二极管)的缩写,它的基本结构是一块电致发光的半导体材料芯片,用银胶或白胶固化到支架上,然后用银线或金线连接芯片和电路板,然后四周用环氧树脂密封,起到保护内部芯线的作用,最后安装外壳,所以LED灯的抗震性能好。
运用领域涉及到手机、台灯、家电等日常家电和机械生产方面。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
图6led小灯和蜂鸣器结构图
四、仿真与实物演示
1.系统仿真图
温度超出上下限时,第二行warning闪烁并且LED灯亮、蜂鸣器响进行报警。
图7超出界限显示图
温度在正常范围内时,不报警,温度显示在正中。
图8未超出界限显示图
2.调试中遇到的问题
(1)LCD引脚连接不正确:
LCD默认的RS、RW、E引脚和单片机的连接需要和电路板里的连接口一样,即RS连接P2.4,RW连接P2.5,E连接P2.6,不可随意连接,否则电路板在烧录程序后不能显示温度。
在我的程序中LCD1602的RS、RW、EN引脚最初是接的P2.1、P2.1、P2.3,因此不能正确显示。
(2)DS18B20反接:
根据硬件电路上的图像方向接,一旦接反就会立刻发热。
我们第一次反接传感器感觉到发烫立刻取下,没有烧毁电路板酿成恶果。
接反也是导致该传感器总是显示85℃的原因。
实际操作中将正负反接,传感器立即发热,液晶屏不能显示读数,正负接好后显示85℃。
另外如果使用51单片机的话,那么中间那个引脚必须接上4.7K—10K的上拉电阻,否则高电平不能正常输入/输出,要么通电后立即显示85℃,要么用几个月后温度在85℃与正常值上乱跳。
(3)将电路板上的杜邦线连接错误也有时候接触不良:
线路一旦连接错误或接触不良,可能导致显示屏上的温度一直显示为-0.06摄氏度,或者不显示。
(4)编写LCD显示闪烁时:
有时上下限显示会变成随机数,这是因为if\else语句位置不正确。
有时候会留下上一次显示的数据,这是因为第二次语句的空隙处没有用空格进行覆盖,因此上一次的数据依然在显示。
显示过快,是因为延时函数延时不够准确。
3.实物演示效果图
图9实物演示效果
五、总结
“温度报警器”课程设计课题中,自己全程独立参与了硬件部分电路原理图的设计到软件部分软件的设计再到最后的安装和调试的全部过程。
对于自己的课程设计的工作,大致的可以分为以下几个阶段:
首要阶段,首先对课题的项目的设想与研究,通过参考大量的资料,拟定一个自己心目中理想的方案,对于自己想设计的器件实现的功能有个具体全面的认识。
第二阶段,通过网络、书籍、老师提供和的ppt,查找相应的硬件元件,全面的了解每个元器件的功能(包括各个引脚功能、总体实现的功能)与具体的工作结构(元器件的内部结构及工作时的复位、脉冲、初始化等)。
第三阶段,利用Protues软件对该温度报警器进行电路原理图的绘制与调试,通过该软件测试制作一张连接正确的原理图。
第四阶段,根据设计的原理图进行软件部分的设计,通过keil软件对程序进行编译与调试无误后加载到Protues单片机中,仿真与调试到达预想的效果。
最后阶段,为了快速实现设计的实物效果,直接选用实验室的电路板板,因为该项目比较常见,用到的元器件开发板上都有。
只是电路板设计的管脚号和电路设计有点不同,需根据电路板的设定对自己设计的程序进行相应的调整,通过将程序加载到单片机,进行调试达到自己预想设计的效果。
针对自己设计的温度报警器测量范围在125℃~-55℃,测量范围广,灵敏度高。
通过这次课程设计,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
我在设计的过程中遇到了许多问题,同时也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对C语言掌握得不透彻。
这次的课设也使我对单片机有了更加浓厚的兴趣,今后也会不断的去学习单片机,增加自己的知识储备,逐步的去提高自己。
此次课程设计由于刚开始对书本知识和课件知识掌握不够,在硬件方面遇到了一些问题。
不过在老师的指导下我明白了很多,也学到了很多,在此衷心感谢老师!
六、参考文献
[1]李蒙,毛建东编.单片机原理及应用[M].北京:
中国轻工业出版社,2010
[2]杨光友.单片机微型计算机原理及接口技术[M].北京:
中国水利水电出版社,2002
[3]谭浩强.C程序设计教程[M].北京:
清华大学出版社,2013
[4]华成英编.模拟电子技术基本教程[M].北京:
清华大学出版社,2006
[5]梅丽凤,王艳秋,汪毓铎,张军,单片机原理及接口技术[M].清华大学出版社,2006
[6]余小平,奚大顺.电子系统设计[M].北京:
北京航空航天大学出版社,2011
[7]王幸之,钟爱琴.AT89系列单片机原理与接口技术[M].北京:
北京航空航天大学出版社,2004
[8]张刚毅,彭喜元.新编MCS-51单片机应用设计(第三版)[M].哈尔滨:
哈尔滨工业大学出版社,2010
七、附 录
源程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P2^4;//1602连接口数据寄存器1,0是命令寄存器
sbitRW=P2^5;//读写,0写,1读
sbitEN=P2^6;//使能端
sbitDQ=P2^7;//数据单总线
sbitSPK=P3^2;//定义报警喇叭
sbitP3_7=P3^7;//定义报警LED灯
sbitP3_0=P3^0;
#defineDataPortP0
voidDelayUs2x(unsignedchart)//俩个延时函数
{
while(--t);
}
voidDelayMs(unsignedchart)
{
while(t--)//俩个延时函数
{
DelayUs2x(245);
DelayUs2x(245);
}
}
/*18b20初始化//整体向18B20发送复位脉冲*/
bitInit_DS18B20(void)
{
bitdat=0;
DQ=1;//DQ复位
DelayUs2x(5);//延时
DQ=0;//拉低总线
DelayUs2x(250);//不小于480us-960
DQ=1;//释放总线//单片机接收18B20发送的存在脉冲
DelayUs2x(50);//15~60us
dat=DQ;//读18b20响应若DQ=0,初始化成功,等于1失败
DelayUs2x(200);//延时使间隙不小于480us
returndat;
}
/*------------------------------------------------
读一个字节
------------------------------------------------*/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)//一个字节有八位
{
DQ=0;//拉低
dat>>=1;//右移一位
DQ=1;//释放总线
DelayUs2x
(1);
if(DQ)//判断第一位有没有读完
dat|=0x80;//右移后高位赋1
DelayUs2x(25);//读间隙不小于60us
}
return(dat);
}
/*写一个字节*/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;//拉低
DQ=dat&0x01;//写最低位
DelayUs2x(25);//延时
DQ=1;//释放
dat>>=1;
}
}
/*读取温度*/
unsignedintReadTemperature(void)
{
unsignedchara=0;
unsignedintb=0;
unsignedintt=0;
Init_DS18B20();//初始化
WriteOneChar(0xCC);//ROM忽略//写命令,初始化
WriteOneChar(0x44);//温度转换的命令
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序列号ROM忽略//读命令
WriteOneChar(0xBE);//读暂存器
a=ReadOneChar();//第一个字节
b=ReadOneChar();//第二个字节
b<<=8;//使B变为高八位
t=a+b;
return(t);
}
//LCD写命令
voidLCD_Write_Com(unsignedcharcom)
{
//while(LCD_Check_Busy());
DelayMs(5);
RS=0;//命令寄存器
RW=0;//写
EN=1;//使能端1有效
DataPort=com;//命令复制给P0口
DelayMs(10);
EN=0;//使能端无效
}
//LCD写数据
voidLCD_Write_Data(unsignedcharData)
{
DelayMs(5);
RS=1;//数据寄存器
RW=0;
EN=1;
DataPort=Data;/