ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:436.60KB ,
资源ID:8078792      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8078792.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(三位倒计时器PIC单片机课程设计含全部汇编程序清单资料.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

三位倒计时器PIC单片机课程设计含全部汇编程序清单资料.docx

1、三位倒计时器PIC单片机课程设计含全部汇编程序清单资料课程设计报告课程名称:单片机原理与接口技术课程设计 设计题目: 三位倒计时器 院 系: 机电工程学院 班 级: 2012级电气工程及其自动化专业 姓 名: XXX 学 号: 2012XXXX 指导教师: XXXX 设计时间: 2014年X月X日 出勤实物报告总分前言此次课程设计的内容为三位数的倒计时器的设计。目前倒计时器的发展已经相当先进,我做这次设计的主要目的是想更进一步了解基本电路的设计流程,以提高自己的设计理念,使自己的动手动脑能力有更进一步提高。通过解决现实生活中的问题,巩固和加深单片机课程中所学的理论知识和实验能力,加深对单片机软

2、硬件知识的理解,以获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,能够提高自己的动手能力和设计能力,以培养自己的创新能力,做到理论和实践相结合。本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式有了更深层次的了解。另外,倒计时器在生活中应用广泛,因此它的功能灵活性和精度的要求就更加显得重要。通过此次练习,我为自己设下了很多要求,力求此倒计时器的功能完美性和精度精细性,以加深自己对电子产品设计的认知。第一章 设计方案1.1 设计内容及要求1.1.1 设计

3、内容本次设计的倒计时器需要由4*4矩阵键盘、3位数码管、LED小灯和蜂鸣器等有关输入输出器件组成,要求倒计时的初始值和控制按键均由键盘输入,数码管显示倒计时的时间,小灯和蜂鸣器负责终止提示。因此,本次的设计内容包括硬件设计,流程框图及软件的编写与调试。1.1.2设计要求根据以上设计内容的介绍及我们的设计目的,总结出以下的设计要求:1.能够实现255以内数的倒计时;2.倒计时结束,报警提示;3.通过按键设置倒计时的初始值;4.精度为微秒级的计时;5.具有“开始”、“暂停”、“继续”、“加一”、“减一”、“复位”等功能键;6.计时结束具有重新开始的功能。1.1.3功能设计为实现使用的灵活性和计数的

4、精准性,我们采用TMR0定时器计时,功能键包括计时开始、暂停、继续、加一、减一和复位。实现过程如下:当从键盘输入任意三位以内包括三位数,数码管显示输入数值,按下键A倒计时开始,按下键B倒计时暂停,按下键C倒计时继续;当发现计时过程中需要调整计时时,可以在暂停或非暂停情况下按下键D或键E实现计数加一和减一的功能。键F的主要功能为当计时需要停止和重新再来时,按下它,计时器重新工作。当倒计时到0时,小灯立即闪烁,同时蜂鸣器鸣叫,小灯闪烁3次以后,倒计时器恢复初始状态,无需复位可以重新使用。按键过程中为确保使用人员知道键是否按下,按下时蜂鸣器应该响起以示提醒。1.2硬件设计我们设计的倒计时器需要由键盘

5、任意输入255以内三位数,并显示于数码管上,计时按钮及相关功能均由键盘键入,同时为保证键盘按下的准确性,加入按下蜂鸣器提示功能,计时结束需有小灯和蜂鸣器提醒。因此,设计电路图时必须涉及到键盘,4位数码管,蜂鸣器,LED小灯,同时上电电路和单片机控制电路为必须加入的。1.2.1 矩阵键盘电路设计一般键盘控制有4*4、5*5等类型方式,考虑到功能所需和单片机引脚的限制,我们采用4*4矩阵键盘。该键盘有4个输入端,4个输出端,我们习惯于把它连接在单片机的RC端口。因此,我们将RC的低四位与键盘的输入相连,高四位与输出相连,以实现键盘的正确扫描。图1-1 键盘设计电路图1.2.2数码管电路设计数码管显

6、示需送入位选和段选,我们所需为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,

7、其功能强大,应用灵活。在使用它进行工作的前提是对其基本的引脚进行分配,这里我们只考虑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根据模块的划分原则,将

8、该程序划分成6个模块,如图1-8所示。图1-8 程序模块第二章 软件设计基于硬件工作的软件部分的编写是通过汇编语言实现的。由以上分析可知,该部分大致包括键盘扫描,键盘显示,TMR0定时器,动态显示,结束提示和其他功能模块等六大部分,其中每大部分又包括不等的若干小部分,下面通过总体到局部的过程介绍它的工作原理。2.1 倒计时部分该软件由键入到倒计时的工作过程可由下面框图表示,此处省略了附加功能部分,只体现出其一般工作状态。图2-1 倒计时器工作流程图该流程图表示了软件工作的大体过程,具体的过程如下子章节。2.1.1 键盘扫描子程序键盘连接有4个输入端和4个输出端,输入端连在RC低四位,输出端连在

9、RC高四位,先让低四位赋值低电平,若有键按下,高四位必有低电平出现,之后继续判断具体哪个键被按下。以RC0为0为例,若令RC0=0,即判断第一行是否有键按下,依次判断高四位是否为低电平,若为低电平,则该键被按下,转入相应功能子程序。以RC0=0为例,框图如下:图2-2 键盘扫描流程图程序及注释如下:JIANPAN MOVLW 00H ;RC口低四位输出低电平 MOVWF PORTC MOVLW 0F0H ANDWF PORTC,W ;屏蔽低四位 SUBLW 0F0H BTFSC STATUS,Z ;判断高四位是否为全1 RETURN ;是,无键输入,返回继续判断 CALL DELAY10MS

10、;否,有可能有键输入,延时20毫秒 CALL DELAY10MS MOVLW 0F0H ;再判断一次是否键入 ANDWF PORTC,W SUBLW 0F0H BTFSC STATUS,Z RETURN ;虚假输入,返回 BCF PORTB,5 ;确实有键输入,蜂鸣器鸣叫 MOVLW 0FEH ;逐行判断哪个键输入,首先RC0=0 MOVWF PORTC BTFSS PORTC,4 ;判断键0 GOTO JIAN0 ;是,跳至键0功能子程序 BTFSS PORTC,5 ;判断键1 GOTO JIAN1 ;是,跳至键1功能子程序 BTFSS PORTC,6 ;判断键2 GOTO JIAN2 ;是

11、,跳至键2功能子程序 BTFSS PORTC,7 ;判断键3 GOTO JIAN3 ;是,跳至键3功能子程序2.1.2 0到9按键功能子程序和键盘显示子程序0到9按键的主要作用是输入我们倒计时的初值,当这些按键按下时,会调用键盘显示子程序,将键入的数字通过数码管显示出来。为了判断按下的次数,设置变量KEFLAG,每调用一次键子程序变量左移一位,当需要显示时,只需判断KEFLAG的第几位为1,就可判断该键入的数字在数码管的哪一个位上显示。同时,键入的位数不同会调用不同的键盘显示子程序,我们设计的三位倒计时器有三个键盘显示子程序,当按下一个数时,调用XIANSHI1,为静态显示;当按下第二个数时,

12、数码管动态扫描,显示两位数,就需要调用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 SFA

13、NG ;释放 MOVLW 01H ;将1放入W寄存器 MOVWF NUM8 ;NUM8带1返回 CALL CHABIAO ;调用查表子程序 MOVWF BIAN ;BIAN带1显示码返回 RLF KEYFLAG,1 ;键按下一次,KEYFLAG左移一位 RETURN 该倒计时器将键盘键入数字的显示和倒计时时数字的显示分开,即两者的显示不是在同一个显示子程序里。因此这里需要简要的介绍一下键盘显示子程。左图展示了键的输入在数码管显示的具体流程,其核心便是三个显示子程序。对于显示1子程序,由0到9按键功能子程序知,送到这里的变量为该按键的显示码值,由于为一位显示,只需将第一位位选打开,将码值送入,关

14、闭位选即可。由于多位显示同样需要该位的码值,且新键入的变量相同,所以我们应将该码值备份两份,为多位显示做准备。图2-3 选择第几个显示子程序显示2子程序和显示3子程序与显示1子程序相似,只是送入两个数进行动态扫描。其程序代码及注释如下,这里以两位显示为例。;键盘显示2子程序,用于2位数的键入显示XIANSHI2 BCF PORTB,1 ;个位位选打开 MOVF BIAN,W ;送入段选 MOVWF PORTD MOVWF NUM4 ;同时复制到NUM4,为3位显示所用 CALL DELAY ;延时 BSF PORTB,1 ;个位位选关闭 BCF PORTB,2 ;十位位选打开 MOVF NUM

15、,W ;送入段选 MOVWF PORTD CALL DELAY ;延时 BSF PORTB,2 ;位选关闭 ;2个数组合成十进制两位数 MOVF NUM8,W ;将NUM8放入NUM6,为送数所用 MOVWF NUM6 MOVLW 00H ;十位是否为0 SUBWF NUM5,F BTFSS STATUS,Z CALL JIASHI1 ;否,调用加十1子程序 MOVF NUM9,W ;将NUM9与NUM6相加 ADDWF NUM6,W MOVWF NUMB ;放入显示变量里 RETURN ;加十1子程序JIASHI1 MOVLW .10 ;NUM9加十 ADDWF NUM9,F DECF NU

16、M5,F ;NUM5减1 BTFSS STATUS,Z ;判断是否为0 GOTO JIASHI1 ;否,继续加十 RETURN ;是,返回2.1.3 一位转多位十进制子程序由键盘显示子程序我们发现其后多出一个多个一位数转化为一个多位数的转化子程序,它的作用是,在键入之后将该多位数送入倒计时显示子程序开始倒计时,这是由倒计时显示子程序决定的,只要送入任意一个三位数,它都能够实现准确的显示。该程序的原理是:首先判断键入几位数,最初键入的数在十位,十位还是百位,然后对其相应的加一百或时循环,最后把所有的转化之后的数加起来,实现多位数的转化。以三个数转化为三位数为例。现在已知NUM11为第一次键入的数

17、,NUM6为第二次键入的数,NUM8为第三次键入的数,NUM10初值为0,其流程如下。图2-4 多位数转化流程图程序:;进行三个数到十进制三位数的转换 MOVF NUM8,W ;将NUM8复制到MUM7 MOVWF NUM7 MOVLW 00H ;判断百位数是否为0 SUBWF NUM11,F BTFSS STATUS,Z CALL JIABAI ;不为0,调用加百子程序 MOVLW 00H ;为0,继续判断十位数是否为0 SUBWF NUM6,F BTFSS STATUS,Z CALL JIASHI2 ;不为0,调用加十2子程序 MOVF NUM10,W ;将个位数与NUM10相加 ADDW

18、F NUM7,W MOVWF NUMB ;组成的数放入显示变量NUMB RETURN ;加百子程序JIABAI MOVLW .100 ;NUM10加100 ADDWF NUM10,F DECF NUM11,F ;NUM11减1 BTFSS STATUS,Z ;判断是否为0 GOTO JIABAI ;不为0,返回加百 RETURN ;为0,返回 ;加十2子程序JIASHI2 MOVLW .10 ;NUM10加10 ADDWF NUM10,F DECF NUM6,F ;NUM6减1 BTFSS STATUS,Z ;是否为0 GOTO JIASHI2 ;否,继续加十 RETURN ;是,返回2.1.

19、4 TMR0中断服务子程序为实现精准定时,我们采用TMR0定时器,它能够实现精确到微秒的计时。但是TMR0定时器所能定时的最长时间为65毫秒,为实现1秒的定时,我们选择其定时50毫秒,循环20次的方法。由定时时间=分屏比*指令周期*(256-初值),我们能够算出当分频比为1:256时使其定时50毫秒时的初值为3DH,当TMR0送入初值时该计时器开始计时,当计时循环20次时计数变量减1,这就是它工作的基本原理。有关TMR0的中断控制寄存器主要有OPTION_REG和INTCON,前者可以控制其分频比,后者用来控制中断的使能位,为使其正常工作,总中断和它的使能位必须同时打开。基于此原理,我们写出程

20、序如下:ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register BCF INTCON,T0IF ;清TMR0溢出标志位 DECFSZ COUNTER ;循环减1,是否为0 GOTO RT ;否,中断返回 DECF NUMB ;是,计数变量减1 MOVLW

21、.20 ;循环数赋初值20 MOVWF COUNTERRT MOVLW 3DH ;50毫秒时间常数初值 MOVWF TMR0 movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt主程序中有关部分为:BSF STATUS,RP0 ;进入体

22、1 MOVLW 07H ;分频比为1:256 MOVWF OPTION_REG2.1.5 倒计时显示子程序基本的输入及辅助程序准备完毕,接下来是主体的显示程序。前面提到过,显示程序分为两部分,前面一部分负责键盘的显示,这一部分负责计数变量变化时其显示的变化。由前面的多个数转化为多位数的准备,我们易知该子程序应该具有将多位数分解为多个数并分别送入各个位选显示的功能。其分解子程序工作过程如下,除初值外,其他参数初值均为0。图2-5 分解流程图当送入的数值被分解之后,调用3位数码管显示子程序,实现3位数的动态扫描,当计时器计时时间到1秒之后,变量值减1,分解子程序分解,送入显示,数码管显示三位数减1

23、,实现了1秒倒计时功能。其子程序在总程序中可查,不再多说。2.2 附加功能部分为增加该倒计时器工作的灵活性,我们增加了一些比如暂停,继续,加一,减一,复位和归零后重新开始等附加功能。2.2.1 暂停和继续倒计时的功能是通过TMR0定时器实现的,定时器时间到后显示变量减1,因此,可通过控制定时器来实现暂停和继续功能。控制定时器的中断开关是本节的关键。图2-6 中断控制流程图程序代码:;B键,用于计数暂停JIANB CALL SFANG ;释放 BCF INTCON,5 ;T0使能关闭,计数停止 RETURN ;C键,用于计数继续JIANC CALL SFANG ;释放 BSF INTCON,5

24、;T0使能打开,计数继续 RETURN2.2.2 计数功能计数功能的实现是对计数变量的控制,运行过程中,变量加一实现显示加一,变量减一实现显示减一。其程序如下:;D键,用于计数加一JIAND CALL SFANG ;释放 INCF NUMB ;显示变量加一 RETURN ;E键,用于计数减一JIANE CALL SFANG ;释放 DECF NUMB ;显示变量减一 RETURN2.2.3 复位和归零所谓复位,是指该键按下后一切恢复初始状态,计时器可以重新工作。其主要操作是使定时器关闭,有关变量初始化,并跳转到按键大循环。;F键,用于清零和重新开始JIANF CALL SFANG ;调用释放子

25、程序 BCF INTCON,5 ;T0使能关闭,停止计时 MOVLW 01H ;键盘次数判断恢复初始值 MOVWF KEYFLAG CLRF NUM9 ;中间变量的初始化 CLRF NUM10 GOTO LOOP ;跳转至LOOP大循环当倒计时为0后,指示灯和蜂鸣器发出警示,之后计时器恢复初始状态,可以重新工作。它的原理同复位相同,都是参数的初始化。LIGHT BCF INTCON,5 ;关闭T0使能,计时器停止工作 CALL SHANSHU ;调用小灯闪烁子程序 MOVLW 01H ;KEYFLAG初始化 MOVWF KEYFLAG CLRF NUM9 ;中间变量的初始化 CLRF NUM1

26、0 GOTO LOOP ;跳转至LOOP大循环,重新开始工作2.3 结束提示部分当计时到0时,三色小灯各亮灭一次,且小灯亮起蜂鸣器响起,亮灯关闭蜂鸣器停止鸣叫。图2-7 提醒子程序流程图程序在主程序中可查,不再赘述。2.4 程序部分总结介绍完所有子程序的工作原理之后,还要将其有机的组合起来。这里采用大循环的方式,不停地对程序进行扫描,当扫描到某一部分发现需要调用或跳转时会相应的调用或跳转至其他子程序。这样就把以上所设计的子程序连接起来,组成一个整体。第三章 实物照片3.1 实验板照片将元件按照电路设计图焊接完成后如下图:图3-1 焊接实物图3.2 脱机运行照片将程序烧写进实验板中,从键盘输入初

27、值123,按下开始键,开始倒计时,图为开始时、计时到119、计时到116时暂停的照片。图3-2 键入初值显示图3-3 计时过程记录图3-4 计时过程中暂停第四章 问题与体会两周的单片机课程设计转瞬即逝,这两周是我感觉过的最快的两周。因为每天大部分时间都用在设计上,而我们对单片机的设计还不够熟练,总是花上大量的时间弄明白一个小小的问题,有时一个错误会耽误上半天而无法发现,所以,当我们取得一点点进步之后才会发现已经过去了很长的时间。这两周里我们体验了从焊板到编写程序,再到烧写、调试程序,最终完成我们的设计的艰辛历程。回首整个过程,我会发现自己的许多不足。首先是对编程软件的使用不够熟练,刚开始编写程

28、序常常不能够灵活的新建工程,添加文件,遇到意外问题也会不知所措,经过两天的熟悉之后,终于能够解决这些基本问题。第二个问题是编程过程中经常出现理想思维,以为自己的思路能够走通但是调试之后才发现无法实现,经过无数遍的理顺之后才发现有些地方是明显的错误,有时是语言的使用错误,有时是思路的局限,然而经过不断的发现问题、解决问题我们的程序逐渐完善。还有一个很严重的问题就是焊接问题,由于焊接的不够熟练,焊出的焊点不够圆润饱满,偶尔还会出现虚焊的情况。另外,焊接用的导线不够简洁,看起来比较混乱。纵使有许多的不足与遗憾,这次课程设计我还是学到了很多的东西。不仅复习了课本上所学的内容,还把理论付诸于实践,并使我

29、们切身的体会到理论用于实践时会出现的各种问题,通过解决这些问题,我们处理实际问题的能力有了很大的提高。通过这次课程设计我了解了电子设计的基本流程,熟练的掌握了编程软件和汇编语言的使用,同时锻炼了我的编程思维,让我在以后的编程过程中少走一些弯路。学习到这些的同时,它也对我的心态起到了锻炼的作用,遇到问题时不能一味的抱怨,而是应该静下心来仔细的分析问题产生的原因,并且找到解决的办法。它也让我意识到团队协作的重要性,在这次两周的设计过程中,我和我的队友密切协作才能够完成最终的结果。这次课程设计提高了我们解决实际问题的能力,为我们积累了宝贵的实践经验。相信这次PIC的单片机课程设计也促进了我能够触类旁通的能力,为其他类型的单片机设计甚至所有电子类设计打下了坚实的基础。结论本次设计实现了最初的设计要求,实际运行结果与理想一致,计时精准,使用简单。能够灵敏的显示所要输入的数字,并能够精确的计时,有很广泛的应用前景,可以应用于跑步计时、辩论赛的计时等各种需要计时的比赛场合,有很强的现实意义。但是该计时器局限于255秒以内的的计时,计时长度有限制;而且体积较大,线路较为复杂,不适合携带。出于这些问题,只

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1