三位倒计时器PIC单片机课程设计(含全部汇编程序清单)资料
- 格式:doc
- 大小:4.04 MB
- 文档页数:45
课程设计报告课程名称:单片机原理与接口技术课程设计设计题目:三位倒计时器院系:机电工程学院班级:2012级电气工程及其自动化专业姓名:XXX学号:2012XXXX指导教师:XXXX设计时间:2014年X月X日出勤实物报告总分目录前言 (1)第一章设计方案 (1)1.1 设计内容及要求 (1)1.1.1 设计内容 (1)1.1.2设计要求 (1)1.1.3功能设计 (2)1.2硬件设计 (2)1.2.1 矩阵键盘电路设计 (2)1.2.2数码管电路设计 (3)1.2.3 LED及蜂鸣器电路设计 (4)1.2.4单片机主电路设计 (4)1.2.5上电电路的设计 (5)1.2.6总电路图 (5)1.3总体方案 (6)第二章软件设计 (7)2.1 倒计时部分 (7)2.1.1 键盘扫描子程序 (8)2.1.2 0到9按键功能子程序和键盘显示子程序 (9)2.1.3 一位转多位十进制子程序 (12)2.1.4 TMR0中断服务子程序 (13)2.1.5 倒计时显示子程序 (15)2.2 附加功能部分 (15)2.2.1 暂停和继续 (16)2.2.2 计数功能 (17)2.2.3 复位和归零 (17)2.3 结束提示部分 (18)2.4 程序部分总结 (18)第三章实物照片 (19)3.1 实验板照片 (19)3.2 脱机运行照片 (19)第四章问题与体会 (21)结论 (22)参考文献 (23)附录:程序清单 (24)前言此次课程设计的内容为三位数的倒计时器的设计。
目前倒计时器的发展已经相当先进,我做这次设计的主要目的是想更进一步了解基本电路的设计流程,以提高自己的设计理念,使自己的动手动脑能力有更进一步提高。
通过解决现实生活中的问题,巩固和加深单片机课程中所学的理论知识和实验能力,加深对单片机软硬件知识的理解,以获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,能够提高自己的动手能力和设计能力,以培养自己的创新能力,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式有了更深层次的了解。
另外,倒计时器在生活中应用广泛,因此它的功能灵活性和精度的要求就更加显得重要。
通过此次练习,我为自己设下了很多要求,力求此倒计时器的功能完美性和精度精细性,以加深自己对电子产品设计的认知。
第一章设计方案1.1 设计内容及要求1.1.1 设计内容本次设计的倒计时器需要由4*4矩阵键盘、3位数码管、LED小灯和蜂鸣器等有关输入输出器件组成,要求倒计时的初始值和控制按键均由键盘输入,数码管显示倒计时的时间,小灯和蜂鸣器负责终止提示。
因此,本次的设计内容包括硬件设计,流程框图及软件的编写与调试。
1.1.2设计要求根据以上设计内容的介绍及我们的设计目的,总结出以下的设计要求:1.能够实现255以内数的倒计时;2.倒计时结束,报警提示;3.通过按键设置倒计时的初始值;4.精度为微秒级的计时;5.具有“开始”、“暂停”、“继续”、“加一”、“减一”、“复位”等功能键;6.计时结束具有重新开始的功能。
1.1.3功能设计为实现使用的灵活性和计数的精准性,我们采用TMR0定时器计时,功能键包括计时开始、暂停、继续、加一、减一和复位。
实现过程如下:当从键盘输入任意三位以内包括三位数,数码管显示输入数值,按下键A倒计时开始,按下键B倒计时暂停,按下键C倒计时继续;当发现计时过程中需要调整计时时,可以在暂停或非暂停情况下按下键D或键E实现计数加一和减一的功能。
键F的主要功能为当计时需要停止和重新再来时,按下它,计时器重新工作。
当倒计时到0时,小灯立即闪烁,同时蜂鸣器鸣叫,小灯闪烁3次以后,倒计时器恢复初始状态,无需复位可以重新使用。
按键过程中为确保使用人员知道键是否按下,按下时蜂鸣器应该响起以示提醒。
1.2硬件设计我们设计的倒计时器需要由键盘任意输入255以内三位数,并显示于数码管上,计时按钮及相关功能均由键盘键入,同时为保证键盘按下的准确性,加入按下蜂鸣器提示功能,计时结束需有小灯和蜂鸣器提醒。
因此,设计电路图时必须涉及到键盘,4位数码管,蜂鸣器,LED小灯,同时上电电路和单片机控制电路为必须加入的。
1.2.1 矩阵键盘电路设计一般键盘控制有4*4、5*5等类型方式,考虑到功能所需和单片机引脚的限制,我们采用4*4矩阵键盘。
该键盘有4个输入端,4个输出端,我们习惯于把它连接在单片机的RC端口。
因此,我们将RC的低四位与键盘的输入相连,高四位与输出相连,以实现键盘的正确扫描。
图1-1 键盘设计电路图1.2.2数码管电路设计数码管显示需送入位选和段选,我们所需为3位显示,采用4个数码管,因此需要将4个位选联入单片机中,同时还将有8条段选联入其中。
习惯上,我们将段选接入RD的8个端口,4个位选接入RB的1到4位。
图1-2 数码管设计电路图1.2.3 LED及蜂鸣器电路设计蜂鸣器的设计就简单许多,只需将其一端接入高电平,另一端接入单片机,为保证其正常工作,接入100欧姆的电阻。
接入单片机的一端我们可以设为RE5。
小灯同蜂鸣器相似,只需考虑接入的引脚,实验中我们接入3种颜色的小灯,其引脚分别连至单片机的RE端口的0、1、2位。
图1-3 LED及蜂鸣器电路连接图1.2.4单片机主电路设计本次设计采用的单片机为PIC16F887,其功能强大,应用灵活。
在使用它进行工作的前提是对其基本的引脚进行分配,这里我们只考虑VCC和GND以及晶振的接入,晶振选择4MHz的晶振。
其具体电路图如下:图1-4 单片机接线图1.2.5上电电路的设计上电电路采用已有的设计好的电路,由USB接口供电,其电路图如下:图1-5 上电电路1.2.6总电路图总电路图如下图1-6:图1-6 总电路图1.3总体方案由以上设计可知,系统的硬件原理图如下所示:图1-7 硬件原理图设计时可采用模块化程序设计方法。
模块划分时应遵循下述原则:1.每个模块应具有独立的功能,能产生一个明确的结果;2.模块之间的控制参数应尽量简单,数据参数应尽量少;3.根据模块的划分原则,将该程序划分成6个模块,如图1-8所示。
图1-8 程序模块主程序键盘扫描模块 键盘显示模块 TMR0定时模块 动态显示模块 倒计时结束提示模块 附加功能模块第二章软件设计基于硬件工作的软件部分的编写是通过汇编语言实现的。
由以上分析可知,该部分大致包括键盘扫描,键盘显示,TMR0定时器,动态显示,结束提示和其他功能模块等六大部分,其中每大部分又包括不等的若干小部分,下面通过总体到局部的过程介绍它的工作原理。
2.1 倒计时部分该软件由键入到倒计时的工作过程可由下面框图表示,此处省略了附加功能部分,只体现出其一般工作状态。
图2-1 倒计时器工作流程图该流程图表示了软件工作的大体过程,具体的过程如下子章节。
2.1.1 键盘扫描子程序键盘连接有4个输入端和4个输出端,输入端连在RC低四位,输出端连在RC高四位,先让低四位赋值低电平,若有键按下,高四位必有低电平出现,之后继续判断具体哪个键被按下。
以RC0为0为例,若令RC0=0,即判断第一行是否有键按下,依次判断高四位是否为低电平,若为低电平,则该键被按下,转入相应功能子程序。
以RC0=0为例,框图如下:图2-2 键盘扫描流程图程序及注释如下:JIANPAN MOVLW 00H ;RC口低四位输出低电平MOVWF PORTCMOVLW 0F0HANDWF PORTC,W ;屏蔽低四位SUBLW 0F0HBTFSC STATUS,Z ;判断高四位是否为全1RETURN ;是,无键输入,返回继续判断CALL DELAY10MS ;否,有可能有键输入,延时20毫秒CALL DELAY10MSMOVLW 0F0H ;再判断一次是否键入ANDWF PORTC,WSUBLW 0F0HBTFSC STATUS,ZRETURN ;虚假输入,返回BCF PORTB,5 ;确实有键输入,蜂鸣器鸣叫MOVLW 0FEH ;逐行判断哪个键输入,首先RC0=0MOVWF PORTCBTFSS PORTC,4 ;判断键0GOTO JIAN0 ;是,跳至键0功能子程序BTFSS PORTC,5 ;判断键1GOTO JIAN1 ;是,跳至键1功能子程序BTFSS PORTC,6 ;判断键2GOTO JIAN2 ;是,跳至键2功能子程序BTFSS PORTC,7 ;判断键3GOTO JIAN3 ;是,跳至键3功能子程序2.1.2 0到9按键功能子程序和键盘显示子程序0到9按键的主要作用是输入我们倒计时的初值,当这些按键按下时,会调用键盘显示子程序,将键入的数字通过数码管显示出来。
为了判断按下的次数,设置变量KEFLAG,每调用一次键子程序变量左移一位,当需要显示时,只需判断KEFLAG的第几位为1,就可判断该键入的数字在数码管的哪一个位上显示。
同时,键入的位数不同会调用不同的键盘显示子程序,我们设计的三位倒计时器有三个键盘显示子程序,当按下一个数时,调用XIANSHI1,为静态显示;当按下第二个数时,数码管动态扫描,显示两位数,就需要调用XIANSHI2,同理按下3位数调用3位显示子程序XIANSHI3。
0到9按键功能子程序的另一个作用就是将该按键的标号放入指定的变量带回,为之后的动态倒计时显示提供十进制转换所需的数字。
该子程序如下,以0到1为例:;0到9按键,用于键入数字JIAN0 CALL SFANG ;释放MOVLW 00H ;将0放入W寄存器MOVWF NUM8 ;NUM8带0返回CALL CHABIAO ;调用查表子程序MOVWF BIAN ;BIAN带0显示码返回RLF KEYFLAG,1 ;键按下一次,KEYFLAG左移一位RETURNJIAN1 CALL SFANG ;释放MOVLW 01H ;将1放入W寄存器MOVWF NUM8 ;NUM8带1返回CALL CHABIAO ;调用查表子程序MOVWF BIAN ;BIAN带1显示码返回RLF KEYFLAG,1 ;键按下一次,KEYFLAG左移一位RETURN该倒计时器将键盘键入数字的显示和倒计时时数字的显示分开,即两者的显示不是在同一个显示子程序里。
因此这里需要简要的介绍一下键盘显示子程。
左图展示了键的输入在数码管显示的具体流程,其核心便是三个显示子程序。
对于显示1子程序,由0到9按键功能子程序知,送到这里的变量为该按键的显示码值,由于为一位显示,只需将第一位位选打开,将码值送入,关闭位选即可。
由于多位显示同样需要该位的码值,且新键入的变量相同,所以我们应将该码值备份两份,为多位显示做准备。