51单片机的秒表设计报告

课程名称:           微机原理课程设计         

题    目:       基于51单片机的秒表设计      


摘要

随着社会的发展,单片机已经渗透到我们生活中的各个领域,广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等。本设计就是由单片机STC89C52RC芯片和1602液晶为核心,辅以必要的电路,构成了一个单片机电子秒表。秒表是一种常用的测试仪器,它可以用在百米赛跑等需要精确计时的地方,为人们的生活提供了很大的方便。该单片机电子秒表布置合理,全部器件分布在7*10cm覆铜板上,看起来小巧精简。采用的是单片机内部定时/计数器计时,走时非常精确而且不易出错。1602液晶经蓝白滑动变阻器调节亮度,,可以直观地显示时间。一个控制按键就可以控制秒表的计数与停止,按一下控制键,秒表工作状态就由计时变为计时变为停止或停止变为计时,按一下清零键就可以清零,操作非常简单。液晶显示屏第一行显示2013.7.11字样的秒表制作完成时间,第二行显示计时时间。它的计时周期为100秒,显示满刻度为99:99秒,从左往右数共四位,前两位显示整数部分,后两位显示小数部分。

关键词:秒表,51单片机,C语言,1602液晶


目录

一、设计任务、要求... 8

1.1 设计任务:... 8

1.2 设计要求:... 8

二、方案总体设计... 9

2.1 方案一:... 9

2.2 方案二:... 9

2.3系统采用方案... 9

三、硬件设计... 11

3.1 单片机最小系统... 11

3.2 液晶显示模块... 11

3.3 系统电源... 12

3.4 整体电路... 12

3.5 PCB整体电路... 13

四、软件设计... 14

4.1 keil软件介绍... 14

4.2程序流程图... 15

五、仿真... 17

5.1 proteus软件介绍... 17

5.2 仿真过程... 17

六、总结... 19

6.1设计总结:... 19

6.2经验总结:... 0

七、参考文献... 1


一、设计任务、要求

1.1 设计任务:

1).对更多小器件的了解

2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用

3).掌握仿真软件的运用和原理图的绘制

4).加深焊接的技巧,提高焊接的能力

5).熟悉调试方法和技巧,提高解决实际问题的能力

6).熟悉设计报告的编写过程

7).熟悉PCB的制作

1.2 设计要求:

1).清零键进行清零

2).一个独立按键进行停止与运行的操作

3).蓝白滑动变阻器可以调节液晶亮度


二、方案总体设计

设计一个基于51单片机的秒表。液晶屏幕第一行显示秒表制作完成日期,第二行显示计时时间;利用单片机内部精确到微妙的定时计数器来实现计时功能;利用引脚的电平变换来实现一个独立按键按控制秒表的运行与停止;利用清零键功能来实现按键的清零操作。调节蓝白滑动变阻器来调节液晶亮度。

2.1 方案一:

51单片机的定时/计数器工作在模式2时是一个可以自动重装载的8位定时/计数器。工作时高八位和低八位装入相同的初值,当低八位装满时,高八位的值自动装入到第八位中,从而可以省去用户软件中重装初值常数的语句,可产生相当精确的定时时间。由于只有八位参与计数,所以其计数周期最大为256微妙。秒表精确到0.01秒,所以采用初值装入0x38,计数50次秒表最低位加1 。低位的累加进而向高位的进位,从而实现1602液晶的秒表显示。设置液晶屏幕第一行显示秒表制作完成日期,第二行显示计时时间。同样检测TR0的值,如果TR0为0,则说明暂停。外部中断具有实时处理的功能,所以可以利用外部中断来进行控制运行与停止的操作。外部中断有两种触发中断的方式:定电平触发,跳变沿触发。如果用低电平触发的话,由于按键每按一次,导通的时间大约为20毫秒,在这个时间段足够触发好多次中断,所以不用低电平触发,采用跳变沿触发中断。每按一次按键触发一次中断,在中断程序中对TR0进行设置,从而实现控制运行与停止。清零键每按一次就清零一次,程序就回到初始位置,液晶屏幕第二行也就显示初始的00:00状态。

2.2 方案二:

51单片机的定时/计数器工作在模式0时是一个16位位定时/计数器。工作时高八位和低八位各装入初值,当低八位装满时,高八位加1。由于是16位参与计数,所以其计数周期最大为65536微妙。秒表精确到0.01秒,所以采用高八位初值装入(65536-10000)/256,低八位装入(65536-10000)%256,计数1次秒表最低位加1 。低位的累加进而向高位的进位,从而实现1602液晶的秒表显示。设置让液晶屏幕第一行显示秒表制作完成日期,第二行显示计时时间。同样检测TR0的值,如果TR0为0,则说明暂停。按键可以改变引脚的电平,所以可以检测P口的变化,根据P口的电平情况来在程序中对TR0进行设置,从而实现控制运行与停止。清零键每按一次就清零一次,液晶屏幕的第二行也就显示初始的00:00状态。

2.3系统采用方案

1)总体设计:

系统总体框架图如图所示 :

1 系统总体框架

2)总体方案工作原理

由于定时器工作模式2是八位计数,可装入的值太小,秒表最低位每加一次需要进入50次定时器中断,由于进入中断的次数太多,所以很容易出现在低八位装满本应触发而程序还在中断子程序中运行,而无法触发中断的情况,所以不适宜采用工作模式2。工作模式0只需要进入定时中断一次就可以让秒表最低位加1次,需要进入中断的次数相对来说少很多。所以选择功能模式0是更加合理的。由于外部中断跳变沿方式每一次下降沿都会触发中断,而按键按下的时候,会出现抖动的情况,并且采用外部中断不易进行消抖,很不稳定,很可能按一次出现几次中断,所以不采用外部中断方式。用P口检测的话,比较容易消抖,还可以进行松手检测,并且也可以实时监测,所以用P口检测的方法进行控制。根据这些对比,最终选择选择方案二。


三、硬件设计

3.1 单片机最小系统

单片机要正常工作,首先要产生片内时钟信号。在单片机内部的振荡器的输入端XTAL1和输出端XTAL2之间接一个石英晶振就可以够成一个自激振荡器。再在两端之间串联接个电容并且在两个电容之间接地以便于稳定频率还对振荡频率有微调作用。电容通常选30uF左右,振荡脉冲频率范围为0~24MHZ。该电路中选用12MHZ晶振。时钟电路图如下:

图2 时钟电路图

单片机在启动时与其他微处理器一样,要让CPU及系统各部件处于确定的初始状态,并从初始开始工作。这就需要复位操作。复位电路有两种方式:上电自动复位和按键自动复位。上电自动复位只是在开始接通电源瞬间复位,接下来想要再次复位就需要断电重启,不方便。按键自动复位不仅可以在开始接通电源瞬间复位还可以通过按下按键复位随时复位。所以选择按键复位方式。复位电路如下:

图3 复位电路图

3.2 液晶显示模块

该秒表计时周期为100秒,采用1602液晶显示。控制1602液晶亮度的是蓝白滑动变阻器。1602液晶有16个管脚。编号为1,2管脚为电源正负极管脚,15,16为背光源正负极管脚;7~14为dataI/O管脚与单片机的P0口相连,负责液晶与芯片之间的信息传送;4,5,6分别为数据/命令选择端、读/写选择端、使能端,与单片机的, P2^0、P2^1、P2^2相连,负责控制液晶与芯片之间数据命令的读写操作;3为液晶显示偏压信号端,用于调整液晶显示对比度。1602液晶显示原理图如下:

图4 液晶显示系统图

3.3 系统电源

为了方便控制系统的上电与断电,系统电源中连接了一个8*8的蓝白自锁开关。此开关两边各有三个引脚,不同的连接方式,开关的控制方法就不同。带有字母的那面为正面,从正面观看,该秒表的电源的正极接在蓝白自锁开关的左边,负极则接在蓝白自锁开关的右边。为了方便观察电源是否接上,在电路中的VCC与GND之间接一个发光二极管并且加一个1K的限流电阻防止发光二极管烧坏,电源通电时发光二极管亮,断电时,则暗。再接四个排针,靠两边的两个排针用于外部电源给系统上电,中间的两个排针是用于单片机烧录程序。如图所示:

图5 系统电源图

3.4 整体电路

这是采用网络标号的画出的以一张整体电路图。它将整张秒表的电路原理图分为七个部分:电源模块,P0口上拉电阻,1602液晶显示模块,51单片机,复位晶振电路,控制按键,清零按键。整张原理看起来美观,并且根据标号很容易找到与之对应的引脚。

在看原理图的时候,看到提供了两种液晶显示系统的模板,我就分析了一下电路原图,认为两种版本的原理图连接方式都是正确的,并且第一种版本的还和上次做数码管显示的秒表更相似,焊接的时候可能更容易上手。我就选择做第一版本的原理图去做液晶显示的秒表。在焊接的时候,我突然想到为什么要提供两个版本的原理图给我们。我就去问了一下同学,结果得知,老师要求按照第二版本的原理图来做。但是已经有几个元器件焊到板子上去了,无法更改只能照着第一版本的原理图继续做下去。而事实是第一版本的设计不合理,是要反方向安插液晶的。

这次错误给了我一个深刻地教训,在我刚看到有两个版本的原理图时,我就应该问自己一下,为什么要提供两个版本的原理图,这两个版本的原理图对比起来有什么不同,我应该选择哪个版本的。最后为了确定我的选择是否正确,我还应该问一下知道的同学。

图6 整体电路图

3.5 PCB整体电路

这是一张PCB整体电路图。设计PCB一般分为八个步骤:设计原理图,创建PCB文档,规划电路板,装在封装库,布局,设置规划线,布线以及生成报表打印输出。规划PCB有两种方法:一是利用Altium Designer 提供的向导工具生成,二是手动设计规划电路板。该PCB电路板图是采用手工设计规划电路板的方法设计完成的。设计时在提供的显示模块的基础上,再从封装库中找出秒表所需的外围器件的封装,添加到已有的显示模块上,设置

管脚的网络标号,再连好线就完成了。

图7 PCB电路

四、软件设计

4.1 keil软件介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN20##、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。


4.2程序流程图

8 主程序流程图

9 定时器中断程序流程图


五、仿真

5.1 proteus软件介绍

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,20##年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持KEIL,IAR和MPLAB等多种编译器。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus有较高的推广利用价值。

5.2 仿真过程                                                                                             

图10为使用keil软件编写程序时的调试过程图。我用的是C语言来编写。第一次编写完程序后,然后编译一下,出现的对话框中显示有几个错误,点击错误提示,主程序会出现光标只向错误的地方,根据这个错误提示,然后进行更改,再编译一下,程序还是显示有错误,再重复上次的操作,进过了几次修改后,就如图所示没有错误提示了。编写程序就是这样,需要不断修改,程序才能准确。程序编写好,还要编译成HEX文件。只有HEX文件才能烧录到到单片机上。

10 keil软件仿真图

图11为proteus仿真原理图。在proteus界面连接好电路图后,箭头放在单片机上单击右键,会出现一个对话框,可以通过这个对话框中的选项,加载程序到仿真图的单片机中,也进行元器件的放置方向进行调整,也可以删除元器件,还用很多功能选择项,不过在画这张原理图时暂时还没用到。在出现的对话框中点击EDIT PROPOTES再在出现的对话框中点击program file那行的那个文件图标,从里面找出先前已经在KEIL软件中编译的HEX文件,。点击文件后,然后在单击edit component对话框的右上角的OK选项。然后点击Proteus的首界面的左下角形状是黑色三角型的play键,仿真图上的显示系统就出现了初始状态,单击控制开关,秒表开始计数,再单击一下控制开关后,计时停止。也可以点击play键右边那个step键,让程序一步一步执行step键右边是pause键,按一下这个键程序就暂停运行,再按一下程序就又开始运行。仿真完后按一下stop键结束仿真。当看到仿真电路上出现现象和操作时所达到的效果和我在编程时所预想的情况一样后,再保存所画的电路图,单击左上角的file中,再在出现的选项中单击save,可以选择自己想要保存的地方。下次打开proteus时可以单击file,再在出现的选项中单击open design的选项,可以从保存的地方直接选择所画的电路图打开,并且可以直接仿真。

在要用proteus仿真软件的时候,刚开始不会使用,因为我电脑里有学习这款软件的视频,然后我就看视频学习。老师看到我在看视频学习时,就要我不要通过看视频学习,直接看文档,先简单的学一些,够现在用就行,以后边用边学。确实通过看文档,边看边操作,再问一下同学,没花多少时间我就可以使用了。要不是老师指导一下,我可能要花上好多时间在学习proteus软件上面。在以后学习中,我尽量多看书,看视频虽说细致但太费时间,看书实在看不懂再去看看详细讲解的视频,特别是学习软件,看视频不单费时间,看了还容易忘,看文档边看边操作,花的时间少还记得牢。

图11 proteus仿真图


六、总结

6.1设计总结:

我的课题是基于51单片机秒表的设计。当我选择了这个课题的时候,我就先开始想在平常生活中秒表的功能是怎样的,需要一些什么器件来实现这些功能。在确定了自己要设计一个怎样的秒表之后就开始列出做这个秒表所需要的元器件。这个秒表是基于给定的显示系统上设计的,所以在设计电路原理图之前,我先要掌握给定的显示系统原理图的连接方式和连接原理。这一些都弄明白之后,我再考虑如何在现有的基础上进行外围设计使之达到预想的功能。经过一番斟酌,确定我的外围硬件只需添加一个独立按键就可以实现秒表的功能。由于我的秒表元器件是焊接在一个70×90大小的洞洞板上,所以为了以后方便焊接,减少焊接错误,需要在洞洞板软件中的一个70×90大小的洞洞板底图上画出洞洞板图,设计线路的时候要尽量减少飞线的使用,画完之后和给出的图进行对照,确定我没有连接错误之后,修正洞洞板图,使线路没有断路并且更加笔直,接点处没有连线出头,修正完后保存洞洞板图。硬件设想好了,接下来,我就要给我所要设计的秒表进行软件设计,使之实现智能化。进过了几次调试之后,在keil软件中我的程序显示0 error。没有错误的程序,不代表它就能实现我预期的功能。为了初步验证我的编写的程序所达到的效果,就需要用仿真软件在电脑进行仿真。而在前面已经介绍过了,在仿真软件当中,proteus软件是一款非常适合我们的软件,所以我们一般选择使用proteus软件进行仿真。在proteus软件界面画好电路图之后,检查一下,确定连接符合洞洞板原理图后,再加载之前在keil软件中编译好的HEX文件,,单击play键开始程序运行,观察液晶显示的初始状态,操作秒表的原理图上的控制按键,观察运行过程中数码管显示出的状态,以及蓝色和红色小方点所显示的电平变化。根据现象进行调试,直到仿真软件上的秒表和预想的一致。仿真的步骤完成后,就开始画DXP原理图,采用网络标号的形式更加方便,只需要把系统分成各个小模块,在元器件的接口上标明该接口所连接单片机的对应的引脚,再分区放置标明模块。图的大体结构画完之后再和给出的图进行对照,确定我没有连接错误之后,修正DXP原理图,使线路没有断路并且更加笔直。DXP原理图画完后,整个电路设计就算完成了。我的设计过程与思路大体就是这样子。


6.2经验总结:

我觉得一个课题设计中的心得体会是非常重要的一部分,这是一个经验的积累与总结。在刚开始设计这个秒表时,我只是自己根据生活经验来设想这个秒表的功能,而自己所想到的却只是比较接触多的,所想到的会比较单一,有些功能根本没有想到,以至于所做的系统功能太少,太简单。我设计秒表的时候就只想到控制它的运行与停止,清零以及记录时刻。由于是四位数码管显示无法记录,所以这个功能省去。但做到后面我才想到其实还可以加一个倒计时以及倒计时完报警的功能。但板子已经做好了,就没有去改了。所以在设计的时候一定要想的周全,多查资料,设计一个在自己能力范围之内功能又合理的东西。通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。们安排了这次单片机课程设计,给了我们学以致用的做好的实践。 对于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。此次的设计,其实也是我们所学知识的一次综合运用,让我深深的认识到了学习单片机要有一定的基础,要有电子技术方面的数字电路和模拟电路等方面的理论基础,特别是数字电路;也要有编程语言的汇编语言或C语言。要想成为单片机高手,我们首先要学好汇编语言,然后转入C语言学习,所以我们不能学到后面就忘了前面的知识,更应该将所学的知识紧紧的结合在一起,综合运用,所谓设计,就是要求创新,只有将知识综合运用起来才能真正的设计好。


七、参考文献

[1] 杨长兴、刘卫国.C++程序设计:中国铁道部出版社

[2] 李朝青.单片机原理及接口技术(第三版):北京航空航天大学出版社

[3] 康华光.电子技术基础(第五版):高等教育出版社

[4] 刘坤、赵红波、张宪栋.51单片机C语言运用(第二版):人民邮电出版社

[5] 阎石 数字电子计数基础(第五版):高等教育出版社

相关推荐