您的当前位置:首页正文

基于51单片机的温度计设计

2023-12-06 来源:汇智旅游网


序号(学号): 0121009320612

学生实习报告书

实习类别

单片机应用实习

实习地址 武汉理工大学信息工程学院 学 院 专 业 班 级 姓 名 指导教师

信息工程学院 通信工程 通信1006 王康 黄铮

2012 年 12 月 30 日

单片机实习报告

实习执行大纲

一、 实习目的

1、巩固《单片机原理与应用》理论课的理论知识; 2、熟悉单片机应用系统的硬件设计及软件设计的基本方法;

3、将《单片机原理与应用》理论课的理论知识应用于实际的应用系统中; 4、训练单片机应用技术,锻炼实际动手能力。

二、实习纪律与要求 1、实习纪律

1)参加实习的学生必须按照实习大纲的要求,在指导教师的指导下,全面完成实习任务;

2)听从指导教师安排,严格遵守实习纪律;

3)因故在实习期间缺勤累计超过规定时间的三分之一,不得参加本次实习考核,但可在补足所缺天数后再给予考核并评定实习成绩。

2、基本要求

1)利用PROTEL等软件进行硬件设计; 2)利用Keil uV4软件完成应用系统软件设计; 3)利用PROTEUS软件进行仿真设计;

4)完成单片机最小系统和应用系统电路板的焊接; 5)对电路进行调试;

6)利用stc-isp软件完成在系统编程、下载,并完成系统软件调试; 7)题目由指导教师提供;

8)要求每个学生单独完成硬件软件设计、仿真、焊接、调试任务; 9)写出实习报告,实习报告主要包括以下内容:目录、摘要、关键词、基

本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论、参考文献等; 10)实习完成后通过答辩;

11)答辩时交实习报告电子文档,通过答辩后根据修改意见修改并打印、装

订成册。

1

单片机实习报告

三、实习地点

武汉理工大学信息工程学院通信实验室。

四、实习时间

2012年12月17日---2012年12月30日。

五、实习内容 1、实习所需主要材料

1)元件、工具、仪器等 序号 1 2 3 4 5 6 7 8 9 10 11 名称 单片机开发试验仪 1块 1根 1根 数量 USB供电线 USB转串口线 杜邦线 NE5532 LM311 排针 不同阻值的电阻 信号源 示波器 电烙铁、锡丝、钳子 若干 两片 一片 若干 若干 1台 1台 2)软件

序号 1 2 3 4 名称 电路设计软件 编程软件Keil uV4 仿真软件PROTEUS 下载软件stc-isp 1套 1套 1套 1套 数量 2、任务

2

单片机实习报告

(1)利用上述材料完成单片机最小系统的设计、焊接、调试; (2)完成ISP下载电路的设计、焊接;

(3)完成应用系统扩展电路部分的设计、焊接、调试,应用系统扩展电路的具

体要求如下: (1)功能选择

通过功能选择键,使得单片机处于不同的工作状态并通过LED显示相应的内容。 (2)温度显示

通过功能选择键选择温度检测、显示后,LED显示温度值。 (3)数据输入

通过功能选择键选择数据输入后,将通过键盘键入的0~9按键值显示在LED上,其中,最后输入的显示在最左边,之前键入向右移动一位。 (4)数据通信

将两个单片机最小系统通过串口连接起来,其中一个作为主系统,另一个作为辅系统。当通过功能选择键选择数据通信后,当在主系统上进行功能(2)、功能(3)的操作时,辅系统的LED上显示与主系统同样的内容。 (4)利用仿真软件完成系统仿真工作;

(5)完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计。

3、参考资料

[1] 谢自美.电子线路设计·实验·测试(第三版).武汉:华中科技大学出版社 [2] 李群芳. 单片微型计算机与接口技术(第3版).电子工业出版社,2008 [3] 刘教瑜. 单片机原理及应用.武汉理工大学出版社,2011 [4] 张东亮. 单片机原理与应用.人民邮电出版社,2009

六、实习具体安排

序号 1 2 3 4

阶段内容 方案设计 硬件设计 软件设计 系统仿真 3

所需时间 2天 2天 3天 1天 单片机实习报告

5 6 7 电路板焊接 系统调试 答辩 合 计 2天 3天 1天 14天 七、实习考核

学生必须按照实习大纲的要求完成实习的全部内容,并提交实习报告。指导教师应对学生进行实习考核并评定实习成绩。实习成绩评定按优、良、中、及格和不及格五级分制。 1、对报告的要求

实习报告要求逻辑清晰、层次分明、书写整洁。报告包括标题(中英文)、提要、正文(包括①项目要求与说明;② 软件流程分析;③调试分析;④实验数据分析;⑤答辩;⑥成绩评定)、附录(图纸.程序清单或软盘) 。实习要求须每人一份,独立完成。 2、对图纸的要求

图纸要求准确全面并与任务要求完成的内容一致。 3、评分标准

1.选题合理、目的明确(10分) 2.方案正确,具有可行性、创新性(20分)

3.结果(如:硬件成果、软件程序、仿真结果)(20分) 4.态度认真、学习刻苦、遵守纪律(15分)

5.报告的规范化、参考文献充分(不少于5篇)(10分) 6.答辩(25分) 总分(100分)

备注:成绩等级:优(90分—100分)、良(80分—89分)、中(70分—79分)、及格(60分—69分)、60分以下为不及格。

4

单片机实习报告

概 况

实习单位: 武汉理工大学信息工程学院

参观考察单位: (1)

(2) (3) (4) (5) (6)

实习开始时间:20 12 年 12 月 17 日,实习时间共 14 天。

完成实习报告时间: 2012 年 12 月 30 日。

5

单片机实习报告

实 习 日 记 2012 年 12月17日

今天是单片机实习的第一天,拿到了实习要求,明确了所要完成的任务:即完成单片机最小系统的设计、焊接、调试,完成ISP下载电路的设计、焊接,并完成应用系统:矩阵键盘按键显示功能,数字温度计设计,双机串口通信,整个系统的焊接、调试,于是便开始了单片机实习。

首先要确定整个的设计方案。经过查阅书本以及各种资料,参考实习要求,便确定了键盘电路采用六个七段数码管,16个按键显示电路。数字温度计用芯片DS18B20做温度采集部分,在数码管上显示温度,由于还要通过串行通信的方式,将采集到的实时温度信息送至第二个单片机系统,并在二个单片机系统显示实时温度,因此还要考虑串口通信部分电路。

在整个设计方案的初步确定中,我又加深了对专业知识的学习,并将原来所学的知识在实践中得以应用,使知识连贯起来,让我觉得收获很多,相信在接下来的几天,会有更大的收获。

6

单片机实习报告

实 习 日 记 2012 年 12月18日

今天是实习的第二天,接着昨已经确定的设计方案,开始了硬件设计,硬件设计运用到Altium Designer软件。Altium Designer是一个全32位的电路板设计软件,该软件功能强大,人机界面友好,易学易用,使用该软件的设计者可以容易地设计出电路原理图和画出元件设计电路板图。

在实验室学习时,我就常用Altium Designer设计电路图,画过元件设计电路板图,因此对此还有一定的熟悉程度。在Altium Designer里找到所需元件后,开始连线,刚开始遇到了很多问题,比如元件封装的缺失,连线有问题等等,通过自己查找资料,请教别人,都解决了,感觉自己还是有很大的提高。对Altium Designer的使用熟练程度也得到了提高。

其中,硬件电路图的设计也是费了一番功夫的,也需要参考查阅书本以及资料才能确定其正确性,还要加上自己的理解。但在这个过程中,也进一步巩固了专业知识技能,将这学期所学的单片机知识进行了归纳总结、真正的做到将理论与实践相结合。

7

单片机实习报告

实 习 日 记 2012 年 12月19日

前两天的硬件电路已经确定了,接下来就是软件设计部分了,即程序的编写。因为这次实现的功能模块也不少,因此程序相对来说较为复杂。由于我对程序运用并不熟练,因此需要花费更多的精力在程序上。

编写程序之初,我准备分模块编写。将程序分为显示模块、键盘模块、温度采集部分,DS18B20模块、以及串口部分等。为了能使自己对编程步骤更加熟悉一下,我先翻阅了这学期所学的课本,进一步熟悉了程序的编写步骤,然后开始着手编写,编写中也遇到了很多难题,有时候会不知道如何下手去写,后来通过自己慢慢的摸索总结以及向他人请教,及时解决了问题,在别人的讲解过程中,也逐渐了解到自己的缺点,在哪些方面还需要加强,获益颇丰。

8

单片机实习报告

实 习 日 记 2012 年 12月20日

今天我主要完成了DS18B20温度传感器的底层函数代码的编写工作,从德州仪器的官方网站上我找到了DS18B20温度传感器的数据手册,全英文的,我一边查词典一边翻译,一字一句得弄懂了DS18B20的 操作方法,其中最关键的也是最难懂的是DS18B20操作时序图即和单片机的通信协议,我通过51单片机的IO口控制时序,给高电平和低电平,模拟数据手册上的操作时序,底层驱动函数还有嘴重要的一部分就是对单片机读来的温度数据进行处理,将数据转换成以摄氏度为单位的数据,然后将数据分割成十位、各位、十分位,供数码管显示的函数调用,显示温度。

在实际的代码编写过程中遇到了很多问题,开始一直是读不到DS18B20的数据,通过分析发现是时序的问题,我通过网络查找了别人写好的DS18B20的操作函数,改进了自己的程序,最终调试成功。

9

单片机实习报告

实 习 日 记 2012 年 12月21日

软件的设计部分已经快接近尾声了,几个模块的程序也差不多都完成了。便开始了各个模块的程序的调试。首先调试的是键盘显示部分,在键盘部分调试的过程中,也出现了各种问题,刚开始也没有加上消抖部分,经过几番调试后,终于调试成功了。后来进行了数码管部分的调试工作,还是比较顺利的。调试完数码管、按键部分,在接下里的数字温度计的温度测量部分DS18B20的调试,虽然在这中间出现了各种各样的问题,但是最终还是都一一解决了。我还是感到很兴奋的,因为这毕竟是自己第一次写这么多模块的程序。不仅锻炼的了自己的能力,也磨练了自己的态度。

10

单片机实习报告

实 习 日 记 2012 年 12月22日

经过几天的调试,软件部分的工作已经完成了。接下来就是系统的仿真问题了,仿真要用到的软件是proteus仿真软件,在进行仿真前,我先去查阅了关于此仿真软件的使用说明以及观看的视频教程,想先熟悉一下仿真软件的使用。通过一系列的准备工作,熟悉了工具栏的使用,怎么样去查找元件,放置连接点等基本的技能。

熟悉了使用方法后,便开始进行仿真图的绘制,在绘图的过程中,元件的查找基本没有问题。下一步就是连线了,连线过程中放置节点、连接总线过程中也遇到了不少问题。不过最终都能得以解决。最终的仿真图在一天之内也完成了。

实习已经过去近一个星期了,收获还是很多的,从一开始的方案设计、硬件电路的设计到后来的软件设计,程序的调试,以及今天的仿真图的绘制,我也熟悉了整个系统设计的流程、也参与了各方面的工作,收获还是很大的。既熟悉了各种软件的使用,也明白了如何去进行方案的比较和选择。使我对整个的专业知识的应用也有了更进一步的认识,总的来说,真的是受益匪浅。在接下来的后续工作中,我也会继续认认真真的完成,不懂的问题也会及时请教他人,努力做到最好。

11

单片机实习报告

实 习 日 记 2012 年 12月23日

本来打算怀着愉悦的心情踏上今天的仿真之旅的,可是刚开始就遭到了一个晴天霹雳。我把昨天好不容易编译好后生成的hex文件放入主机和从机,发现不能通过仿真,真是六神无主了。于是经过高手指教之后,才发现一直以来我都忽略了双机通信的模块。看来做一个编程者,必须要看清全局,把各种可能的冲突不兼容都给消灭掉,看来真的最厉害的编程不是越复杂的编程,而是可以和各种终端兼容的编程。只能继续研究程序,更改程序了。不过接口问题让我发现,这是一个比我想象中更麻烦的事情,如何利用好三个P口,而且使他们都不发生冲突真的棘手。不过开心的事情是时钟模块已经部分可以调节出来了,这么多按键如何分配也是一个大问题呢,明天继续仿真,加油加油!!!

12

单片机实习报告

实 习 日 记 2012 年 12月24日

系统的仿真基本完成后,便开始制作实物,首先要列元件清单,清楚电路所需的各种元件。拿到元件后,准备好焊接需要的工具,就开始焊接实物。

先焊接的是单片机最小系统,包括时钟电路、复位电路。由于考虑到串口通信部分,时钟电路选用11.0592MHz的晶振。最小系统完成后,开始键盘和数码管的焊接。焊接中同样也出现了一些问题,影响电路板的美观性。对照电路原理图将DS18B20温度测量部分焊接上去,并将其与单片机的引脚相连,这个过程是需要耐心的细致的,因为引脚部分如果连错的话,就会导致工作不正常的情况。

陆陆续续的将各个元件焊接上去后,硬件制作部分就完成了,电路总体来说还是比较简单的,并不复杂。由于自己平时焊接工作做的比较少,因此还缺少一定的熟练程度,以后的学习中要加强练习,增强自己的动手能力。

13

单片机实习报告

实 习 日 记 2012 年 12月25日

今天打算休息一下大脑,跳出调程序的思路,所以我打算今天去焊接电路。恰好今天天气也不错,真是天公作美呀,早上打点好元件清单,便火速火燎的骑车去了广埠屯,然后买到了所需要的元件,不贵。下午在实验室焊电路。其实从我画的硬件电路上来看,需要附加焊接的电路并不复杂,只不过该如何漂亮布局,合理排版,并且正确无误的将电路焊出来,也不是一件容易的事情。而且焊板子也得有耐心,重复着重复着重复着同一件事,还得无视那烟味和可能会出现的意外伤害。真心觉得做一个IT男真不容易啊。

14

单片机实习报告

实 习 日 记 2012 年 12月26日

实物焊接工作、系统软件调试工作等各部分的准备工作已经完成了,下面就将进行系统的调试。首先应用stc-isp下载软件将所编写的单片机程序下载到单片机里。在网上查阅了一些资料以后,知道STC-ISP 是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机。它的使用方法也比较简单,因此,程序下载工作很快就完成了。将下载好程序程序的单片机安装好后,给电路板提供电源,电源供电选用的是5V的USB接口供电。上电以后,数码管上显示时间温度,说明温度计是可以工作的。然后再按下按键,按位调整,这个功能也是可以实现的。

其他部分的调试工作将在后几天进行。

15

单片机实习报告

实 习 日 记 2012 年 12月27日

继续昨天的系统调试工作。心情还是很激动的,看着自己亲手制作的电路板,能够达到预期效果,证明自己的努力还没有白费。

紧接着调试数字温度计部分,按下温度测试按键,数字钟上显示29.38的数字,然后用手给DS18B20加温,会看到示数在不断的上升,温度测量部分的功能也是可以实现的。由于数字温度计部分,还要求串口通信,即两块单片机之间实现温度数据的传输,将串口程序下载到第二块有单片机最小系统、数码管显示部分的电路板的单片机里。两块单片机之间通过P3.0与P3.1相连,实现串行通信。结果发现主机部分温度显示正常,但是从机数码管的显示不正确,检查连线没有出错,后再改写程序,试验几次后,仍有问题。

由于时间关系,今天的调试就结束了,对于出现的问题,我也开始查阅资料,咨询他人,希望在最后一天能都得到解决。

16

单片机实习报告

实 习 日 记 2012 年 12月28日

昨天焊接好了电路板,现在心情很轻松,感觉整个人都被更新系统了一样,神

清气爽的。怀着好心情,我开始新的一轮仿真,这一次的仿真比以往课设花的时间更久,难度更大。不过可能是休息了一天大脑,所以重启的更机敏了,故在和同学请假了一段时间之后,再几次失败之后,终于稳定了,不过在这个时候真是一剂强心剂呀。最后的火候就是硬件调试了,将程序下在单片机里面,不过又出现了意想不到的插曲了,比如按键失灵等,可是要找到问题也是件很麻烦的事情,因为不知道是哪个环节的问题。到底是芯片问题呢,还是跳线问题呢,还是程序的问题呢。在同学的帮助下一一排除了问题的所在,终于可以通过按键出来了所有模块的结果,不过就是数码管显示的方式有点问题,从机和主机没法兼容,这个问题就留着明天去解决好了。

17

单片机实习报告

实 习 日 记 2012 年 12月29日

今天是倒数第二天,答辩前的最后一天了,对于终审答辩,我的内心却没有以往的忐忑,而是非常的平静。今天应该做的事情就是争取调好我的单片机,让所以的努力都在单片机上展现。我终于领悟到调试的重要性,纸上得来终觉浅,绝知此事要躬行,只有调试过程中遇到那些意外的事情才知道程序的不足性和要改进的方向。今天只用把双击通信的部分弄好就大功告成了,对于主机和从机的相接,还是主要是对接口的把握,如何使各个部分不相冲突。在改程序无果后,请教了同学,才得以解决,还是自身学的东西不够硬呀,不过将按键一到十二按下后,数码管显示都一一实现了功能。心里挺开心的,不管怎么样,对于明天的答辩有了更多的信心。万事俱备只欠东风,睡个好觉,明天加油加油加油!!!

18

单片机实习报告

实 习 日 记 2012 年 12月30日

对于昨天遗留的问题,今天便着手开始检查问题所在。首先用示波器检测主机p3.0口是否有数据输出,从示波器观察结果来看,确实有波形,即说明是有数据输出的,接着检测从机部分的p3.0口,结果没有观察到波形,也就说明主机有数据的输出,但是从机并无接受。两片单片机的晶振都使用的是11.0592的,也没有问题。后发现从机的电平转换MAX232有问题,将其撤除后,再两机之间串行通信,结果从机也能显示温度了,实现了功能。温度计部分的调试也已完成,都达到了预期效果。

通过几天的系统调试,几大功能模块的功能都得到了实现,但是还是存在有一些小的瑕疵,数码管的亮度不够,加了电阻,增大驱动电流以后,数码管的亮度有所提高,但是仍旧不是很理想。但是不影响使用。

实习即将要结束了,经过这段时间的实习,自己也学到了很多知识、培养了自己的动手能力。也将书本知识运用到实际,将理论与实践相结合。总的来说,此次单片机实习确实让我获益良多,对我以后的专业学习有很大的帮助。

19

单片机实习报告

目 录

摘 要 ......................................................................................................... 22 Abstract ..................................................................................................... 23 1、基本原理............................................................................................. 24

1.1 单片机引脚介绍 ....................................................................... 24 1.2 单片机时钟电路 ....................................................................... 25 1.3 复位电路 ................................................................................... 25 1.4 数字温度计的设计 ................................................................... 26 2、方案设计............................................................................................. 27

2.1模块的设计方案 ........................................................................ 27

2.1.1 显示电路设计方案 ........................................................ 27 2.1.2 温度测量模块方案 ........................................................ 27 2.2 实际设计中的改进方案 ........................................................... 27

2.2.1 数码管的设计方案 ........................................................ 27 2.2.2 最小系统的设计方案 .................................................... 28

3、硬件电路设计 .................................................................................... 30

3.1 单片机最小系统设计 ............................................................... 30 3.2 数码管显示部分设计 ............................................................... 30 3.3 键盘部分设计 ........................................................................... 31 3.4 温度采集部分设计 ................................................................... 31 3.5 串口通信部分设计 ................................................................... 32 3.5 供电电路部分设计 ................................................................... 32 3.6 电路PCB布置设计 .................................................................. 33 4、软件设计............................................................................................. 34

4.1 系统流程图 ............................................................................... 34 4.2 温度计流程图 ........................................................................... 34 5、仿真电路............................................................................................. 35 6、实物照片............................................................................................. 36

6.1 温度计........................................................................................ 36

20

单片机实习报告

6.2 数据输入 ................................................................................... 36 6.3 数据通信 ................................................................................... 36 6.4 最小系统实物图 ....................................................................... 37 6.5 整体实物图 ............................................................................... 38 6.6 部分电路图 ............................................................................... 38 7、总结 ..................................................................................................... 39 8、参考文献............................................................................................. 40 9、附录 ..................................................................................................... 41 本科生课程设计成绩评定表 .................................................................. 53

21

单片机实习报告

摘 要

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统.

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。

本文主要是在单片机最小系统的基础上设计一个矩阵按键,一个数字温度计和一个数据通信设计,并能用按键进行功能切换显示。

关键词:单片机、最小系统、数字温度计、双机通信、矩阵键盘

22

单片机实习报告

Abstract

SCM is A kind of integrated circuit chips, is to use very large scale integrated

circuit technology has the ability to handle data CPU, RAM and ROM, RAM read only memory of I/O mouth and interrupt system, timer/timer function (may include display driver circuit, pulse width modulation circuit, simulation way more converter, A/D converter circuits, etc) integrated into one of these forms of A small and perfect miniature computer system

Single chip microcomputer with small size, low power consumption, control function is strong, flexible, miniaturization and expand convenient use and so on, widely used in instrumentation, combined with different kinds of sensors, which can realize such as voltage, current, power, frequency, humidity, temperature and flow rate, speed, thickness, Angle, length, hardness, elements, such as the physical pressure measurement. By single chip microcomputer control makes instruments digital, intelligent, miniaturization, and function by electronic or than digital circuit more powerful.

Of this paper is to design a digital clock on the basis of the smallest single-chip system, a digital thermometer , and use the button to switch the display.

Keywords:SCM 、digital clock、digital thermometer 、data communication

23

单片机实习报告

1、基本原理

1.1 单片机引脚介绍

89C52单片机是一种高性能、低功效的采用CMOS工艺制造的8位微控制器。它提供以下标准特征:4K字节的程序存储器、128字节的RAM、32条I/O线、2个16位定时/计数器、一个5中断源两级中断优先级、一个双工的串行口、片上振荡器和时钟电路。AT89C52引脚图如图1所示:

图1

各引脚功能分别为: VCC:供电电压;GND:接地 P0—P3:为输入/输出口线;

RST:复位输入,当振荡器复位器件时,保持RST脚两个机器周期的高电平时间 ALE/PROG: 地址锁存允许/片内EPROM编程脉冲 /PSEN:外部程序存储器的选通信号;

/EA/VPP:外部访问允许,为了使单片机能够有效的传送外部数据存储器从0000H到0FFFH单元的指令。/EA必须接地;当执行内部指令时,应接VCC端。 XTAL1:振荡器反相放大器以及内部时钟电路的输入端 XTAL2:振荡器反相放大器的输出端

24

单片机实习报告

1.2 单片机时钟电路

89C52时钟有两种方式产生,即内部方式和外部方式。89C52内部有一个构成内部振荡器的高增益的放大器,引脚XTAL1,XTAL2分别是该放大器的输入端和输出端。在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如图2所示。

图中,电容器C1,C2起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。晶振频率的典型值为12MHz,采用6MHz的情况也比较多。内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。

图2

1.3 复位电路

单片机系统的复位电路采用的是上电+按钮复位电路形式.当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。 根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。常用的上电或开关复位电路如图3所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键

25

单片机实习报告

后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。

图3

1.4 数字温度计的设计

基于AT89C52单片机和DS18B20的数字温度计。

采用数字温度芯片DS18B20 测量温度,输出信号全数字化。采用了单总线的数据传输,由数字温度计DS18B20和AT89C52单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。

测温范围 -55℃~+125℃,固有测温分辨率0.5℃。DS18B20 实物图如图4所示。

图4

26

单片机实习报告

2、方案设计

2.1模块的设计方案 2.1.1 显示电路设计方案

数码管有共阴、共阳两种

方案一:选用共阳数码管,51单片机I/O口不需要提供电流,只需一片74LS04/74HC04反相器就可以驱动六个数码管显示。

方案二:数码管有共阴、共阳数码管两种;若选用共阴数码管,51单片机I/O不能直接驱动数码管显示,因为电流太小,需要加74LS04/74HC04反相器,提供驱动电流,需要2片芯片控制6个数码管。

原则上应选择方案一,但市场上购买时,只买到了共阴数码管,所以最终选择方案二。

2.1.2 温度测量模块方案

方案一:利用DS18B20可编程1-Wire数字温度传感器芯片,集成度高,单总线模式与其他相比系统电路相对简单。内含寄生电源。数字温度传感器DS18B20的数字温度计提供9至12位的摄氏温度测量,测温范围为-55℃-+125℃,测量分辨率为0.0625℃,DS18B20可以从数据线直接供电(“寄生电源”),从而消除了供应需要一个外部电源。

方案二:利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号,可以满足设计要求。其中AD590是美国ANALOG DEVICES公司的单片集成两端感温电流源,其输出电流与绝对温度成比例。在4 V至30 V电源电压范围内,该器件可充当一个高阻抗、恒流调节器,调节系数为1µA/K。但相较于方案一,系统电路更加复杂。

综上所述,选择方案一。

2.2 实际设计中的改进方案 2.2.1 数码管的设计方案

27

单片机实习报告

在数码管的摆放问题上,由于在电子市场上没有所需的6位一体的数码管,所以采取4位加2位并列摆放实现6位并列显示。经过实际测试,发现数码管引脚分布复杂,最终选择排针引出,由杜邦线进行错位连接,而不是直接进行错综

复杂的走线。实际效果如图5所示。

图5

2.2.2 最小系统的设计方案

在最小系统的设计中,考虑到芯片放置在底座上,内部用足够的空间放置一些类似电阻电容的小型元器件,而且芯片引脚包含VCC与GND,在实际PCB设计时,将整个晶振电路与复位电路的10K电阻和10uF电容放置在内部,节省了部分空间,同时也可以保护部分元器件。实际效果如图6所示。

28

单片机实习报告

图6

29

单片机实习报告

3、硬件电路设计

3.1 单片机最小系统设计

单片机最小系统包含芯片,晶振电路,复位电路等,其中P0口需接10K上拉电阻接电源。电路如图7所示,

图7

3.2 数码管显示部分设计

数码管显示在理论上可以直接接在单片机的I/O口上,但是在实际应用中,数码管内部存在电阻,直接接在单片机上的实际电压仅为2.8V左右,驱动不了数码管。所以在实际设计中采用74HC04非门驱动,由于在软件设计部分采用动态显示,所以不需要锁存的功能,实际电路图如图8所示。

30

单片机实习报告

图8

3.3 键盘部分设计

矩阵键盘采用4X4键盘设计,其中10个用于0~9的数字按键输入,另外3个用于功能选择按键,剩余3个按键缺省。矩阵按键需8个I/O口控制,设计时选用P2口控制。电路图如图9所示。

图9

3.4 温度采集部分设计

温度采集部分采用DS18B20进行设计,元件引脚分布较为简单,

31

单片机实习报告

只需选用一个I/O口进行数据接收即可。电路图如图10所示。

图10

3.5 串口通信部分设计

串口通信部分采用9孔串口转接电平转换芯片MAX232与单片机的XTAL1(P3.1)与XTAL2(P3.2)进行数据通信。电路图如图11所示。

图11

3.5 供电电路部分设计

单片机所需电源为+5V供电,可采用多种方式完成供电,本次设计采用USB供电。在应用中,采用六脚自锁按键开关进行开关控制,同时采用LED提示电源接通与否。电路图如图12所示。

32

单片机实习报告

图12

3.6 电路PCB布置设计

最小系统电路与扩展电路PCB布局如图13所示。

图13

33

单片机实习报告

4、软件设计

4.1 系统流程图

系统初始化功能选择键按下Y温度模式Y数字按键模式Y通信模式温度转化按键按下主机发送数据温度读取读取按键数值从机接收并读取数据温度显示数字显示数据显示图14

4.2 温度计流程图

DS18B20初始化发跳过ROM指令发温度转化指令发温度读取指令数码管显示温度图15

34

单片机实习报告

5、仿真电路

仿真电路使用Proteus软件搭建,经测试,能顺利完成任务指标,在前期调试时,为了在后期实际设计时节省时间,各个模块的调试基本上在51开发板上完成了软件调试,所以没有过多的依赖仿真调试。电路图如图16所示。

图16

35

单片机实习报告

6、实物照片

6.1 温度计

图17

6.2 数据输入

图18

6.3 数据通信

36

单片机实习报告

图19

6.4 最小系统实物图

图20

37

单片机实习报告

6.5 整体实物图

图21

6.6 部分电路图

图22

38

单片机实习报告

7、总结

在这次的课程设计中不仅检验了我所学习的理论知识,锻炼了自己的动手实践能力,也培养了我在短时间内完成任务的能力。在设计过程中,和同学们相互探讨,相互学习,相互监督,更加学会了合作.

通过这次单片机电路设计,我加深了对单片机的理解和认识,能够将书本所学知识运用到实际。最开始接手这个题目的时候,有点茫然和不知所措,而这个设计需要的理论知识我们都已经全部学习完,这让我认识到自己的理论和实际应用的统一和对于器件在实际中的使用还有很大的不足,在做的过程中也提升了我的动手能力,实践能力得到了一定的锻炼,从开始的朦胧到后面得到的结果,也锻炼了自己,提高了自己。

我制作前在网上找了一些数字温度计等电路图以后,开始只是盲目的效仿,但是得出的结果都不理想,有的根本就得不出结果,后来慢慢的学会结合自己的理论知识,对电路进行了自己的设计并不断尝试和修改,最终确定电路图。对于程序的理解掌握也在这次单片机实习中得到了较大程度的提高。

在整个课设的进行过程中,用到了大量的专业性软件,Altium Designer、Proteus、Keil uVision4、STC_ISP等。在设计中碰到的大量的问题通过上网查找资料,与同学探讨或是咨询老师、学长等途径解决了问题。在焊接电路板时,容易出现短路,断路,元器件极性接反等问题,所以在平时的学习中应该多加注意时刻修正电路,尽量将错误率降到最低。

39

单片机实习报告

8、参考文献

[1] 谢自美. 电子线路设计·实验·测试(第三版).武汉:华中科技大学出版社 [2] 李哲英,电子技术及其应用基础,高等教育出版社,2003

[2] 李群芳. 单片微型计算机与接口技术(第3版).电子工业出版社,2008 [4] 康华光. 电子技术基础 数字部分.高等教育出版社,2005

[5] 郭天祥. 新概念51单片机C语言教程.北京:电子工业出版社,2009. [6] 张东亮. 单片机原理与应用.人民邮电出版社,2009

40

单片机实习报告

9、附录

程序如下(C语言):

#include #include #include <18b20.h>

unsigned char code table[]={ //共阴数码管常用段码

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71, //0-f [0-15]

code unsigned char key_tab[17]={0xed,0x7e,0x7d,0x7b,

0xbe,0xbd,0xbb,0xde,

0xdd,0xdb,0x77,0xb7,

0xee,0xd7,0xeb,0xe7,0xff};

//========================此数组为键盘编码,

unsigned char l_tmpdate[6]={32,32,32,32,32,32};//定义数组变量 unsigned char l_tmpdateold[6]={1,2,3,4,32,32};//定义数组变量 unsigned char l_key=0xff;

//定义变量,存放键值

unsigned char l_keyold=0xFF; //做为按键松开否的凭 int func3_flag = 0; int temp; int uartbit = 0;

void delayms(unsigned char t);

void display(unsigned char *lp,unsigned char lc);//显示 void ReadKey(void) void func1(void); void func2(); void com_init(void);

41

;

单片机实习报告

void main() {

com_init();//串口初始化 }

void display(unsigned char *lp,unsigned char lc)//数码管显示函数 {

unsigned char i,j=0X01; P0 = 0x00; P1=j;

//定义变量

while(1){ ReadKey(); }

switch(l_key) {

case 0x0a:func1();break; case 0x0b:func2();break; default : break; }

for(i=0;i//循环显示

//查表法得到要显示数字的数码段

//延时5个空指令

//清0端口,准备显示下位

P0=table[lp[i]]; delayms(2); P0=0x00;

P1=_irol_(P1,1); } }

void delayms(unsigned char t) //延时函数

{ unsigned char j;

42

单片机实习报告

unsigned char i; do { j=4; do { i=1000; do { --i; } while(i!=0); --j;

} while(j!=0); --t; } while(t!=0); }

void ReadKey(void) //键盘扫描函数 {

unsigned char i,j,key; //分三个部份来理解,第一部份,用扫描来读取键盘, j=0xfe; key=0xff;

//设定初值

//P2口低4位循环输出0,扫描键盘

for (i=0;i<4;i++){ }

P2=j;

//leday();

if ((P2&0xf0)!=0xf0){ //如果有键按下,P2口高4位不会全为1, }

j=_crol_(j,1);

//此函数功能为左循环移位

key=P2; break;

//读取P2口,退出循环,否则循环下次

//第二部份,检测是否干扰或按键放开 if (key==0xff){

//如果读取不到P2口的值,比如是干扰或是键盘又

松开,我们做相应复位,返回

l_keyold=0xff; return;

43

单片机实习报告

}

//第三部份,检测是新按键按下,获取新的键盘编码值 if(l_keyold!=key){

//检测按键放开否,如果一样表明没放开,不做处理,不一样

表时另一个键按下做编码转换

}

//程序运行到这里,就表明有键值被读取存放于l_key变量中,主程序就可l_keyold=key;

//获取键码做为放开下次的凭证

//查表获得相应的16进制值存放l_key变量中

for(i=0;i<17;i++){ }

if (key==key_tab[i]){ }

l_key=i; break;

以检测此变量做相应外理 }

void func1(void) / /功能1函数,移位显示键盘按键值 {

unsigned char i=0,j=0,k,m,equ ;

func3_flag = 0;

while(1)

{

ReadKey();

//调用键盘扫描

if((l_key!=0xff)&&(l_key<10))

{

//扫描到的数值是0-9才做处理

if(j==6)j=5;

if(j<6)

//我们用J来表示按下的个数,最

多不超过6个

j++;

for(i=j-1;i>0;i--)

44

单片机实习报告

{ }

//移完数据,尾补上输入的数据

//循环移数据

l_tmpdate[i]=l_tmpdate[i-1];

l_tmpdate[0]=l_key; l_key=0xff;

if(func3_flag == 1) {

for(k=0;k<6;k++) { }

if(equ ==0 ) {

}

if(l_tmpdate[k]!=l_tmpdateold[k]) {equ = 0;break;} equ = 1;

for(k=0;k<6;k++)//将数据通过串口发送给从机,当串

口打开时可以发送

}

{ }

SBUF=l_tmpdate[k];//发送串行数据 while(TI==0);//等待发送完成 TI=0;

}

for(m=0;m<6;m++)

{

l_tmpdateold[m]=l_tmpdate[m];

}

display(l_tmpdate,j);

//输出显示获取的键值码

45

单片机实习报告

//

else break;

if(l_key==0x0b)break;

if(l_key==0x0d)func3_flag = 1;//使能串口通信,向副机发送数据 }

void func2(void)//功能2函数 显示温度 {

int i,k,equ; func3_flag = 0;

while(1) {

ReadKey(); displaytemp();

if(l_key==0x0d)func3_flag = 1;//使能串口通信,向副机发送数? if(func3_flag == 1)

{

for(k=0;k<6;k++) { }

if(equ ==0 ) {

for(k=0;k<6;k++)//将数据通过串口发送给从机,当串

if(l_tmpdate[k]!=l_tmpdateold[k]) {equ = 0;break;} equ = 1;

}

口打开时可以发送

{

SBUF=l_tmpdate[k];//发送串行数据 while(TI==0);//等待发送完成

46

单片机实习报告

}

}

TI=0;

} }

void com_init(void)//串口初始化程序 {

EA=1;

//开启总中断

}

for(k=0;k<6;k++) { }

if(l_key==0x0a)break;

l_tmpdateold[k]=l_tmpdate[k];

//下面是产生9600波特率的初值,你们可以用工式计算下:16位计数

为65536-12000000/32/9600 }

DS18B20.C

#include \"18b20.h\" #include \"main.h\"

extern unsigned char l_tmpdate[6]; extern int temp;

47

RCAP2L = 0xD8; RCAP2H = 0xFF; TL2=0XD8; TH2=0XFF; T2CON=0X34; SCON=0X50; ES=1;

//此寄存器为设置定时器2做波特率发生器 //串口的工作方式,设置为方式1

//打开串口中断

单片机实习报告

extern char func3_flag; void displaytemp(void) {

int l_tmp,i;

tmpchange(); //温度转换 // // // // //

l_tmp=tmp(); //读取温度值 //if(l_tmp<0)

//l_tmpdate[0]=57; //判断温度为负温度,前面加\"-\" //else {

l_tmpdate[0]=l_tmp/1000; //显示百位,这里用1000,是因为我们之前乖以10了 if(l_tmpdate[0]==0) }

l_tmp=l_tmp%1000;

l_tmpdate[0]=l_tmp/100;//获取十位 l_tmp=l_tmp%100;

l_tmpdate[1]=l_tmp/10;//获取个位再

l_tmpdate[1]+=16;//加入小数点,查表可得出有小数点的排在后10位,所以加10 l_tmpdate[2]=l_tmp%10;//获取小数第一位 l_tmpdate[3]=12;

l_tmpdate[0]=32;//判断温度为正温度且没有上百,前面不显示,查表第 是空

if(func3_flag==1) {

for(i=0;i<6;i++)//将数据通过串口发送给从机,当串口打开时可以发送

{

SBUF=l_tmpdate[i];//发送串行数据 while(TI==0);//等待发送完成 TI=0;

48

单片机实习报告

}

void delayb(unsigned int count) //delay {

unsigned int i; while(count) { i=200; while(i>0) i--; count--; } }

void dsreset(void) //DS18B20初始化 {

unsigned int i; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; }

bit tmpreadbit(void) // 读一位 {

49

}

}

for(i=0;i<10;i++){ }

//循环输出10次,提高亮度

display(l_tmpdate,4);

单片机实习报告

unsigned int i; bit dat;

DS=0;i++; //小延时一下 DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); }

unsigned char tmpread(void) //读一个字节 {

unsigned char i,j,dat; dat=0;

for(i=1;i<=8;i++) {

j=tmpreadbit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好//一个字节在DAT里 }

return(dat); //将一个字节数据返回 }

void tmpwritebyte(unsigned char dat)

{ //写一个字节到DS18B20里 unsigned int i; unsigned char j; bit testb; for(j=1;j<=8;j++) {

testb=dat&0x01; dat=dat>>1;

if(testb) // 写1部分

50

单片机实习报告

{ DS=0; i++;i++; DS=1;

i=8;while(i>0)i--; } else {

DS=0; //写0部分 i=8;while(i>0)i--; DS=1; i++;i++; } } }

void tmpchange(void) //发送温度转换命令 {

dsreset(); //初始化DS18B20 delayb(1); //延时

tmpwritebyte(0xcc); // 跳过序列号命令 tmpwritebyte(0x44); //发送温度转换命令 }

int tmp() //获得温度 { float tt;

unsigned char a,b; dsreset(); delayb(1);

tmpwritebyte(0xcc);

51

单片机实习报告

tmpwritebyte(0xbe); //发送读取数据命令 a=tmpread(); //连续读两个字节数据 b=tmpread(); temp=b;

temp<<=8;

temp=temp|a; //两字节合成一个整型变量。

tt=temp*0.0625; //得到真实十进制温度值,因为DS18B20 //可以精确到0.0625度,所以读回数据的最低位代表的是 //0.0625度。

temp=tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位 //也转换为可显示数字,同时进行一个四舍五入操作。 return temp; //返回温度值 }

void readrom() //read the serial 读取温度传感器的序列号 { //本程序中没有用到此函数 unsigned char sn1,sn2; dsreset(); delayb(1);

tmpwritebyte(0x33); sn1=tmpread(); sn2=tmpread(); }

void delay10ms() {

unsigned char a,b; for(a=10;a>0;a--)

for(b=60;b>0;b--); }

52

单片机实习报告

本科生课程设计成绩评定表

姓 名 专业、班级 性 别 课程设计题目:MATLAB的绘图 课程设计答辩或质疑记录: 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:

年 月 日

53

因篇幅问题不能全部显示,请点此查看更多更全内容