基于单片机9999秒倒计时器设计_第1页
基于单片机9999秒倒计时器设计_第2页
基于单片机9999秒倒计时器设计_第3页
基于单片机9999秒倒计时器设计_第4页
基于单片机9999秒倒计时器设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、海 南 师 范 大 学本 科 生 毕 业 论 文题目:基于stc单片机9999秒倒计时器的设计姓 名:学 号:专 业: 自动化 年 级: 2009级 系 别:完成日期:2012年5月 指导教师:目录1.引言12.系统方案论证及设计22.1系统方案论证22.2系统方案设计23.系统硬件电路设计43.1单片机最小系统电路设计43.2单片机内部定时器53.3单片机与数码管的连接电路设计63.3.1 LED 数码显示器的结构63.3.2 LED 数码管显示方式83.4按键调整电路设计84.系统软件设计94.1主程序流程图94.2子程序流程图12键盘扫描程序设计124.2.2 倒计时模块子程序设计135

2、.实物调试165.1 软件仿真165.2 调试17系统调试工具Keil uVision317调试的主要方法186.总结及致谢20参考文献(references):21附录程序21基于stc单片机9999秒倒计时器的设计作者: 指导教师:(海南师范大学电子系,海口,571158)摘 要:本论文针对倒计时系统的设计的需求,介绍了stc单片机的部分基本原理,如stc单片机的接口功能、中断、定时器等等。倒计时系统需要用到锁存器、LED数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。对于倒计时器中的LED数码显示器来说,采用以软件为主的接口方法,即采用Keil uVision

3、3软件程序进行译码。关键词:stc单片机;倒计时器;设计Based stc SCM 9999 seconds countdown DesignAuthor:Professor:(Department of Electronics, Hainan normal university,Haikou, 571158)Abstract: This thesis focuses on the needs of the countdown system design introduced stc SCM some of the basic principles, such as stc SCM inter

4、face functions, interrupts, timers, etc. Need to use latches countdown system, LED digital display and other major module, through the interaction between the different modules, complete hardware configuration of the initial countdown. For the countdown in LED digital display, the use of software-ba

5、sed interface method, which uses a software program to decode Keil uVision3.Keywords: stc SCM; Countdown; Design1.引言研究并制造一个倒计时器,利用倒计时可以显示记录时间。可用于很多方面,工业机器的工作时间显示,家用电器的使用时间,体育中跑步成绩等。在研究倒计时器时需要研究怎样产生脉冲及其脉冲周期。一般的倒计时器的脉冲周期都在一秒。计数器的置数,及计数位数。本课题主要解决的问题是怎么使计数器实现任意置数。利用各个芯片的特性实现我们所需要的功能。倒计时器作为一种电子产品在实际运用方面十

6、分广泛,在交通等各个类型需要计时比赛中都有很广泛的运用。2.系统方案论证及设计2.1系统方案论证倒计时器以AT89C52单片机为核心,起着控制作用。系统包括四位数码管显示电路、按键电路、复位电路、时钟电路。倒计时的总体设计思路分为五个模块:按键电路模块、复位电路、晶振电路模块、AT89C52、数码管显示电路模块。秒脉冲发生器控制电路译码显示计数器外部开关555定时器用来产生周期为1秒的脉冲信号,供计数器进行倒计数,以便将计数器输出的数据传送给译码器,译码器再译码驱动七段数码管显示输出,控制电路实现倒计时器的暂停/继续工作,清零复位,置数/工作;如图1-1所示。它包括秒脉冲发生器、计数器、译码显

7、示电路、和控制电路等四个模块组成。其中计数器和控制电路是系统的主要模块。图1-12.2系统方案设计555为一8脚封装的器件,其各引脚的名称和作用如下:1脚GND,接地脚2脚TL,低电平触发端3脚Q,电路的输出端4脚/RD,复位端,低电平有效5脚V_C,电压控制端6脚TH,阈值输入端7脚DIS,放电端8脚VCC,电源电压端,其电压范围为:318V图1-2由上图可看出,当Vo等于低电平时T1处于导通状态,如果将TL端经过一个电阻接到电源正端,而且电阻的阻值足够大,那么TL也一定是低电平。反之,当Q等于高电平时T1截止,TL也是高电平。因此,Q和TL的高低电平是想相同的。元件清单如下:表1 元件清单

8、列表元件型号元件数量总计9cm*15cm万用板1片四位一体共阴数码管1只蜂鸣器1只4.7K电阻1只s8550 三极管1只单片机1片40脚IC座1只101排阻1只12M晶振1只22P电容2只10uF电容1只10K电阻1只按键6只自锁开关1只USB电源线1条导线若干3.系统硬件电路设计3.1单片机最小系统电路设计80C52 芯片内部集成了CPU、RAM、ROM、定时/计数器和I/O口等各功能部件,并由内部总线把这些部件连接在一起。80C52单片机内部包含以下一些功能部件:一个8位CPU;一个片内振荡器和时钟电路;4KB ROM(80C51有4KB掩膜ROM,87C51有4KB EPROM,80C3

9、1片内有无ROM);128B内RAM;可寻址64KB的外ROM和外RAM控制电路;两个16位定时/计数器;21个特许功能寄存器;4个8位并行I/O口,共32条可编程I/O端线;振荡器及时序 OSC8051CPU程序存储器4KB ROM数据存储器256B2个16位定时器/计数器64K总线扩展控制器可编程I/O可编程全双工串行口一个可编程全双工串行口;5个中断源,可设置成2个优先级。图3-13.2单片机内部定时器时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准有条不紊地一拍一拍地工作的。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统得稳定性。常用的时钟电路有两

10、种方式:一种是内部时钟方式,另一种是外部时钟方式。单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。图 3-2本系统使用的是内部时钟方式。一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。3.3单片机与数码管的连接电路设计通常在显示上采用的方法一般包括两种:一种是静态显示,另一种是动态显示。其中静态显示的特点是显示

11、稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中,为了减少端口资源,降低电能消耗,采用的是动态显示方法。本系统的倒计时时间的最大范围是9999秒,要求精确到秒,显示格式是9999/999/99/9。从格式可知数码管显示电路要用到4位数码管。考虑到数码管的段和位比较多,本系统选了两个4位一体的共阳数码管和一个一位的共阳数码管。数码管有段选和位选控制,在此电路中有8个位选,8个段选,分别用单片机的P0口和P1进行8个位的控制。 LED 数码显示器的结构LED数码显示器是一种有LED发光二极管

12、组合显示字符的显示器件。它使用了 8 个 LED 发光二极管,其中 7 个用于显示字符,剩下的一个用于显示小数点,故通常称之为 7 段发光二极管数码器。在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。如图3-3所示。图3-3 (a)为a到g在数码管的编排,(b)分别为共阴极、共阳极电路当发光二极管导通时,它就会发光。每个二极管就是一个笔画,若干个二极管发光时,就构成了一个显示字符。若将单片机的I/O口与数码管的ag及h相连,高电平的位对应的发光二极管亮,即I/O输出不同的代码,就可以控制数码管显示不同的字符。例如:当I/O输出得代码为0011

13、 1111时,数码管显示的字符为0。这样形成的显示字符的代码称为显示代码或者段选码。本次设计的实验板用的共阴LED显示器,根据电路连接图16进制数字的显示代码如表3.1所示2。表3.1 16进制数字的显示代码16进制hgfedcba显示代码0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FHA0111011177HB011111007CHC0011100139HD010111105EHE0111100179H

14、F0111000171H.1000000080H图 3-43.3.2 LED 数码管显示方式LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。本次设计采用的是动态显示方式。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作

15、用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 3.4按键调整电路设计复位是单片机的初始化操作,只需给AT89C52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位.复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。除了进入系统的正常初始化之外,由于程序运行出错或操作错误而使系统处于死锁状态。为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。图 3-5在系统中,有时会出现显示不正常。为了调试方便,需要设计一个复位电路。AT89C52单片机复位电路共有

16、上电复位、按键电平复位和按键脉冲复位。本系统的复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的RC电路构成,也可使用其它的相对复杂,但功能更完善的电路。本系统采用的电路工作原理是:上电瞬间,RC电路充电,RESET引脚端出现正脉冲,只要RESET保持10ms以上高电平,就能使单片机有效的复位。当时钟频率选用12MHz时,C取10uF,R取10K,上电自动复位电路由上电瞬间C与R构成充电电路,RESET端的电位与电源Vcc相同,随着充电电流的减少,RESET的电位逐渐下降。RC时间常数越大,上电时RESET端保持高电平的时间越长,这组参数足以保证复位操作。若复位

17、电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运行。按键S5的功能是按键复位,按下S5键时RST为高电平,只要保持10ms以上的高电平,就可以使单片机复位。按键复位用在系统运行时的复位,使系统重新运行。4.系统软件设计4.1主程序流程图倒计时器的设计时可采用模块化程序设计的方法,模块化程序设计时应注意以下事项:首先,每个模块应具有独立的功能,能产生一个明确的结果;其次,模块之间的控制参数应尽量简单,数据参数应该尽量少。控制参数是指模块进入和退出的条件和方式,数据参数是指模块间的信息交换方式、交换量的多少及交换的频繁程度。最后,模块长度适中。模块语句长度通常在 20100 条适合

18、。如果模块太长时,分析和调试比较困难,失去了模块化程序的功能性;如果模块太短则信息交换太频繁,也不合适。由以上原则,本次设计的倒计时软件系统如下图4-1所示:图 4-1 倒计时软件设计框图由上述硬件电路分析可知,本次设计采用的是定时器 0、工作方式 1,MAXTIME 为 9999秒的倒计时计数器。其中最重要的就是主程序的设计,因为无论多少个子程序模块,如果主程序没有能够合理正确的调用子程序的话,那么子程序就如同虚设。主程序的设计分为:主程序的初始化内容。所谓初始化,就是对用到的单片机内部部件或者扩展芯片进行工作状态设定,本设计调用了一个初始化的子程序 init()。引入键盘扫描程序,对按键

19、key 进行判断,判断哪个按键被按下,本系统设计调用的键盘扫描程序是 keyscan()。然后对返回值进行判断:若 key=0x18,则表示按下的键是 KC(设置初值键)。然后关定时器 0,等待初值并与最大值相比进行判断,引入初值设置子程序 set-func()。若 key=0x88,则表示按下的键是 KF,开始计数。调用显示子程序 display()对以上操作和后面的倒计时进行显示。display()对倒计时在数码管上显示出来,引入中断子程序,根据中断子程序和主程序的语句开始进行倒计时。最后,根据主程序语句判断倒计时是否自减到 0,并进行相应的操作。主程序流程图如图4-2所示。图 4-2 主

20、程序流程图4.2子程序流程图键盘扫描程序设计矩阵键盘的扫描程序 keyscan()设计:if(P0&0x0f)!=0x0f) /判断是否有有键按下delay(1);if(P0&0x0f)!=0x0f)/再次判断列中是否是干扰信号,不是则向下执行sccode = 0xfe; /逐行扫描初值(即先扫描第 1 行)while(sccode&0x10)!=0) /行扫描完成时(即 4行已经全部扫描完成)sccode为 1110 1111 停止 while首先,根据列判断是否有键按下,没有返回则为 0。若有值返回,则逐行扫描以确定按键所在的行,再确定按键所在列,从而最终确定该按键

21、。其次,若有键按下,则延时去建抖动(delay(1);),然后进行扫描,找到闭合键并计算键值。最后,返回键值,并进行判断,建立有效标志,以对主程序的进行。流程图见图 4-3所示。图 4-3 键盘扫描程序4.2.2 倒计时模块子程序设计中断程序:void timer0() interrupt 1TH0 = (65536-TIME)/256; /50ms 产生一次中断TL0 = (65536-TIME)%256;count+;倒计时程序模块:if(count = 20)count = 0;data_set-;if(data_set = 0) stop_timer0(); 倒计时模块设计:首先,初值

22、设置。对计数值 count 赋初值 0,对定时器 0 的高八位 TH0和低八位 TL0 设置初值,然后开中断。其次,根据中断子程序及初值,50ms 产生一次中断,计数器则加 1,当计数器 count 加到 20 的时候,倒计时器减 1,并且 count 清 0 依次循环程序。判断值是否为 0,如果不为 0,继续倒计时;如果为 0,则关中断程序 stop-timer0(),倒计时结束。倒计时模块设计流程图如图 4-4 所示。图 4-4 倒计时流程图5.实物调试5.1 软件仿真图5-1 仿真电路图图 5-2 PCB图5.2 调试5.2.1系统调试工具Keil uVision3Keil uVisio

23、n3 仿真器是一款利用其 IDE 集成开发环境作为仿真环境的廉价仿真器,是利用 SST 公司具有 IAP 功能的单片机 SST89C58 制作而成,主要是利用了 SST89C58 的 IAP功能,所谓 IAP 功能是 In application program 的英文缩写,是在应用编程的意思,通俗一点讲就是:它可以通过串口将用户的程序下载到单片机中,可以通过串口对单片机进行编程。它之所以具有这种功能,实际上它有两块程序 flash 区,其中一块 flash 中运行的程序可以更改另外的一块程序 flash 区中的程序,正是利用这一特性才用它作成了仿真器,我们把仿真器的监控程序事先烧入 SST8

24、9C58,监控程序通过 SST89C58 的串口和 PC 通讯,当使用 KEIL UVISION3 的 IDE 环境仿真时,用户的程序通过串口被监控程序写入 flash 程序区中,当用户设置断点等操作仿真程序时,flash 程序中的用户程序也在相应的更改,从而实现了仿真功能 。5.2.2调试的主要方法启动 Keil uVision3。新建一个工程。Project 菜单New project ,选择好我们要保存的文件夹后,键入 djs 保存。接着弹出 CPU 类型选择框,选择最常用的 AtmelAT89C51,按确定。在工程中加入文件。新建一个文件,文件菜单 FileNew,我们再点击 save

25、theactive document 按钮,(另存为)弹出对话框后,我们文件名框中键入 djs.c(注意文件后缀名是.c)保存,这个时候 C 语言文件创建完毕。现在可以把文件加入到工程中去。点击 Target1 前面的+号,右键单击 Source Group1选择 Add Files to GroupSource Group 1,在弹出的对话框中选择一创建好的 djs.c文件,选择添加 Add,然后关闭此对话框。此时工程建成,可以写入程序了。在写入程序的时候,通过软件设计模块,先写好主程序的框架,然后在需要调用子程序的时候,一个子程序一个子程序进行编写、调试。当程序完成之后,点击 Rebuil

26、d all target files 按钮 (重新编译所有目标文件)进行程序调试、查错,在程序下面的提示框 Output window 中点击出错的提示,进行程序改错,当程序没有错误的时候,出现如下图 5-3的对话框。图 5-3 正确编译时对话框点击 Build target 按钮 ,此时选择 Options for Target 按钮 ,出现如图 5-4所示。选择 Dubug 按钮,选择 Use(Keil Monitor-51 Driver),点击确定。图 5-4 Options for Target窗口点击 Start/Stop Debug Session 按钮,进入调试状态。第一次将会出

27、现下图 5-5提示窗口,则需要点击 Settings,在下面弹出窗口如图5-6中,设置相应端口号。在设置端口号的时候,先通过右键电脑属性,查看端口号后修改正确的端口号,然后点击 OK确定,然后再点击 TryAgain,继续进行程序下载。图 5-5 提示选择窗口图 16 点击 Run 按钮 ,在试验版上即可以看到程序效果(显示默认初值 9999 并开始以秒为单位倒计时),接下来在实验板上进行操作。先按下 KC 键,等待设置初值;然后任意按下 K0K9 设置初值,完成后按下 KF 键开始倒计时。 当演示完成后,按 RESET 开关键复位,然后点击。在系统调试的过程中,出现了很多问题,特别是在编写程

28、序的时候。因为只要程序语句没有语法错误,软件就不能检测出错误的地方,必须一个模块一个模块仔细编写。本次设计同时也让我学会了 Keil uVision3 的基本用法,但是本设计是用的 C 语言编程,所以了解的大部分用法都是与 C 语言有关的,以后需要继续学习。6.总结及致谢通过对 MCS-51 单片机原理和接口技术的初步了解,结合自己的专业知识和对 C 语言的基本认识,在导师的帮助指导下完成了基于单片机控制的 9999 秒倒计时系统的设计和这篇论文,本论文完成了以下几个方面的工作:介绍了本次倒计时系统的设计目的、设计方案和开发意义。对 MCS-51 单片机的部分基本原理和接口技术进行了阐述,其中

29、大部分都是本次设计需要用到,比如中断原理、定时器等;首先介绍了本次倒计时系统设计的硬件电路设计,包括中央处理模块、LED 数码显示器模块、锁存器模块、矩阵键盘模块的设计;其次是软件程序设计,包括主程序设计和各个模块的子程序设计;最后是 Keil uVision3 软件系统调试的步骤和方法,以完成系统设计。系统功能:一切就绪后,通过 KC 键等待初值设置,其次通过矩阵键盘设定任何小于9999 的初值,然后通过 KF 键开始倒计时,同时设置有复位键,以达到可以重新设置初值的目的。通过本次设计,使我在对单片机一无所知的情况下了解了单片机的部分原理和一些简单的设计,同时,也增强了对单片机的兴趣。但是由

30、于本次设计我对单片机是从头开始学,对知识了解的局限性,使得这个倒计时系统在功能上不完善,对开发有一定的影响,恳请各位老师原谅!时光飞逝,毕业设计完成了,在这个过程中我学到了很多东西。首先我要感谢我的导师XXX老师,他在我完成论文的过程中,给予了我很大的帮助。他在日常繁忙的工作中,多次询问我的论文进程,并为我指点迷津。我非常感谢XXX老师的指导。感谢大学四年所有的授课老师,是他们让我了解专业知识,并让我学会如何学习专业知识,这是一笔宝贵的财富,我将受用终身。感谢他们的无私奉献!感谢我的家人,是他们给我的鼓励和支持,是我前进的动力,让我不断进取、完成学业。最后,我要感谢所有关心、帮助过我的朋友们!

31、祝愿他们在未来的日子里,生活愉快,工作顺利!参考文献(references):1谭浩强,C程序设计(第三版),清华大学出版社,2005.72郭天祥,新概念51单片机C语言教程 电子工业出版社,20093张洪润,廖勇明,王德超,模拟电路与数字电路 北京:清华大学出版社,20094王化祥,感器原理及应用(第三版)天津大学出版社,2007附录程序#include<reg51.h>#define LEDData P0/定时数码管的段值从P0口输出unsigned char code LEDCode=0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0

32、xD7;/数码管0-9的编码unsigned char minit,second,count,count1; /分,秒,计数器unsigned char set_minit=99,set_second=99;sbit add1=P13;/每按一次加时间sbit dec1=P14;/每按一次减时间sbit add2=P33;/每按一次加时间sbit dec2=P34;/每按一次减时间sbit secondpoint=P05;/秒闪动点/-数码管的位选控制脚,共有11位数码管-sbit led1=P23;sbit led2=P24;sbit led3=P25;sbit led4=P26;dabit

33、 playon=0;/比赛进行标志位,为1时表示比赛开始,计时开启bit timeover=0;/比赛结束标志位,为1时表示时间已经完bit halfsecond=0;/半秒标志位/=延时=void Delay5ms(void)unsigned int i;for(i=100;i>0;i-);void display(void)/-显示时间分-LEDData=LEDCodeminit/10;/显示第一位 9led1=0;Delay5ms();led1=1;LEDData=LEDCodeminit%10;/显示第二位 9led2=0;Delay5ms();led2=1;/-秒点闪动-if(

34、halfsecond=1)secondpoint=1;elsesecondpoint=0;led2=0;Delay5ms();led2=1;secondpoint=0;/-显示时间秒-LEDData=LEDCodesecond/10;/显示第三位 9led3=0;Delay5ms();led3=1;LEDData=LEDCodesecond%10;/显示第四位 9led4=0;Delay5ms();led4=1; /=按键检测程序=void keyscan(void)if(playon=0)/在比赛未开始的状态下if(add1=0)/当add1按键按下时display();/调用显示,同时作为延时消抖if(add1=0);/延时消抖后,依然检查到按键按下if(minit<99)/当分钟小于9时,分钟加1minit+;elseminit=99;/否则,分钟仍然为9,最在调整为9分钟do/当按键未松开时,一直调用显示,防止数码管闪动,display();while(a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论