51单片机课程设计数字温度计报告.docx
《51单片机课程设计数字温度计报告.docx》由会员分享,可在线阅读,更多相关《51单片机课程设计数字温度计报告.docx(14页珍藏版)》请在冰豆网上搜索。
51单片机课程设计数字温度计报告
电子毕业设计
数
字
温
度
计
题目:
数显温度计
学院:
电子信息学院
班级:
学号:
姓名:
指导老师:
日期:
数字温度计设计任务书
一、课程设计目的
1、加强学生理论联系实际的能力,提高学生的动手能力;
2、学会基本电子元器件的识别和检测;
3、学会应用EDA软件Proteus进行电路的设计和仿真;
4、基本掌握单片机的基本原理,并能将其应用于系统的设计。
5、通过实训,提高学生的学习兴趣,激发自主学习能力,培养创新意识。
二、设计任务
先焊制一个单片机最小系统,并以制作的单片机最小系统为核心,设计并制作一个数字式温度计应用系统。
三、设计要求具有以下功能:
(1)采用DS18B20作为温度传感器进行温度检测;
(2)对采集温度进行显示(显示温度分辨率℃);
(3)采集温度数值应采用数字滤波措施,保证显示数据稳定;
(4)显示数据,无数据位必须消隐。
数字温度计设计任务书………………………………………………2
1、设计思路
(1)设计原理…………………………………………………………………4
(2)系统方案及总体设计框图………………………………………………4
2、数字温度计应用系统的硬件设计
(1)单片机小系统基本组成及硬件图
(2)外围电路工作原理及系统硬件图
(3)主要芯片及其功能
3、系统软件程序的设计
软件流程框图
4、系统调试
(1)仿真器介绍
(2)调试结果及其分析
(3)系统设计电路的特点和方案的优缺点
5、课程设计心得体会
参考文献
附录程序清单及注释
一、设计思路:
设计方案及其总体设计框图
温度计设计系统流程图
将温度转换为BCD码
更新数据缓冲区
二、数字温度计应用系统的硬件设计
1、单片机小系统的基本组成及其选择
(1)单片机
单片机选型参考
•①AT89S51、AT89S52:
具备ISP下载功能,可以使用USBASP程序下载线或者并口下载
•②STC89C51、STC89C52:
使用串口线+MAX232烧写程序。
•③AT89C51、AT89C52:
可以在最小系统板上使用,但需要另外用编程器烧写程序
本次课程设计选用AT89S52型号单片机进行操作。
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S52具有如下特点:
40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
AT89S52引脚图 此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
AT89S52引脚图
此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
(4)电源
•①电源适配器供电:
DC座(三个管脚)
•②usb供电:
3、时钟
石英晶振
电路结构原理如右图所示
4、I/O口&接口
•①所有I/O用排针引出
•②串行通信口:
•③ISP:
单片机共有4个8位双向并行I/O通道口,每位均有自己的锁存器、输出驱动器和输入缓冲器组成。
这种结构,在数据输出时可以锁存,及输出新的数据以前,通道口上的原始数据不变。
但对输入信息是不锁存的,所以从外部输入的信息必须保持到取数指令执行完为止。
2、外围电路工作原理及系统硬件图
3、主要芯片及其功能
①AT89S52
(1)AT89S52各引脚及I/O口介绍
P0口也可用做访问片外数据存储器和程序存储器时的低8位地址/数据总线的复用口。
这种情况下,P0口内含上拉电阻。
在Flash编程时,P0口输入代码数据;在Flash校验时,P0口输出代码数据。
在进行编程校验时,需外接10KΩ的上拉电阻。
●P1口——8位、双向I/O口,内含上拉电阻。
P1口为用户使用的通用I/O口,每个引脚可驱动4个TTL负载。
当用做输入时,每个端口首先置1。
和引脚也用做定时器2的外部计数输入T2)和触发器输入T2DX)。
在编程和校验期间,P1口可输入低字节地址。
●P2口——8位、双向I/O口,内部具有上拉电阻。
P2口可用做通用I/O,可以驱动4个TTL负载。
对P2口各位写入1,可作为输入。
每个引脚由外部负载拉为低电平时,经由内部上拉电阻向外输出电流。
在访问16位地址的外部程序存储器和数据存储器时,P2口提供高8位地址。
用MOVX@DPTR类指令访问外部数据存储器时,P2口为高8位地址(即PCH);用MOVX@R0和MOVX@R1类指令访问外部数据存储器时,P2口上的内容是SFRP2的内容。
在编程和校验时,P2口接收地址线的高位和一些控制信号。
P3口——8位、双向I/O口,内部含有上拉电阻。
●P3口可用做通用I/O口,可驱动4个TTL负载。
当用做输入熟,要先将P3口各位置如外部负载将P3口拉低,则经过上拉电阻向外输出电流。
在编程和校验时,P3口接收某些控制信号。
●——地址锁存允许/编程脉冲输入。
●——外部程序存储器读选通,低电平有效。
●——片外程序存储器访问允许。
●XTAL1和XTAL2——XTAL1是片内振荡器反相放大器和时钟发生器的输入端,XTAL2是片内振荡器反相放大器的输出端。
(2)AT89S52实物与仿真的区别
②DS18B20
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。
DS18B20的性能特点如下:
(1)独特的单线接口仅需要一个端口引脚进行通信,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)DS18B20支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点组网测温;
(3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;
(4)可通过数据线供电,电压范围为;
(5)零待机功耗;
(6)温度以9或12位数字,对应的可分辨温度分别为℃、℃、℃和℃,可实现高精度测温;
(7)用户可定义报警设置;
(8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
(10)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
DS18B20采用3脚PR35封装或8脚SOIC封装,其引脚排列及内部结构框图如图及测温原理图如下所示:
③1602液晶显示屏
1602液晶显示流程图:
三、系统软件程序的设计(见附录):
软件流程框图:
四、系统调试:
1、仿真器的介绍:
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
①keil软件的开发运用
(1)KeilC51单片机软件开发系统的整体结构
C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
(2)使用独立的Keil仿真器时,注意事项
仿真器标配的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
②proteus软件的开发运用
(1)Protues软件介绍
Proteus是目前最好的模拟单片机外围器件的工具,它可以仿真51系列、AVR,PIC等常用的MCU及其外围电路。
本文基于Proteus和KeiluVision3软件。
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
(2)proteus的工作过程
运行proteus的ISIS程序后,进入该仿真软件的主界面。
在工作前,要设
置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。
通过工
具栏中的p命令,在pickdevices窗口中选择电路所需的元件,放置元件并调
整其相对位置,元件参数设置,元器件间连线,编写程序;在source菜单的
Definecodegenerationtools菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source菜单的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况。
Proteus软件提供了30多个元件库,数千种元件。
元件涉及数字和模拟、交流和直流等。
2、系统整体调试
①调试结果
②结果分析
在运行仿真结果时通过改变温度传感器DS18B20的温度,然后调用各种子函数,可以改变液晶显示1602的第二行显示数据,说明程序编写正确。
③系统设计电路的特点和方案的优缺点
我们组设计的数字温度计系统知识运用简单的AT89S52芯片的I/O口传输功能,通过几个小的读数据、传递数据、延时子函数实现温度的读取传输功能,是比较简单,容易实现的,所以我们的系统只是实现了一些简单的功能,系统整体来说比较简易,但好像这个温度计没有多大的应用价值,所以我们后续分析觉得这个系统可以加一个温度复位系统提高AT89S52芯片的功能价值,也提高数字温度计的智能价值,还可以增加一个报警子函数,实现智能数字温度计更高的应用价值。
五、课程设计心得体会:
经过这次单片机课程设计,终于完成了我的数字温度计的设计,虽然不能做到很完美,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,也许是第一次进行这种系统的设计所以感觉完成这样一次小系统设计我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。
但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。
而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。
所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
参考文献:
[1]科技教育创新中国科技信息2010年第11期CHINASCIENCEANDTECHNOLOGYINFORMATION
附录:
程序清单及其注释:
;
}
}
}
/******************************DS18B20*******************************/
voidmain()
{
uchartable[]="NowTemperature";
delayMs
(1);
sendChangeCmd();
init();
writeComm(0x80);
writeString(table,16);
while
(1)
{
delayMs(1000);//温度转换时间需要750ms以上
writeComm(0xc0);
display(getTmpValue());
sendChangeCmd();
}
}