三位倒计时器PIC单片机课程设计40含全部汇编程序清单.pdf
《三位倒计时器PIC单片机课程设计40含全部汇编程序清单.pdf》由会员分享,可在线阅读,更多相关《三位倒计时器PIC单片机课程设计40含全部汇编程序清单.pdf(47页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、百度文库-好好学习,天天向上-I 课程设计报告 课程名称:单片机原理与接口技术课程设计 设计题目:三位倒计时器 院 系:机电工程学院 班 级:2012 级电气工程及其自动化专业 姓 名:XXX 学 号:2012XXXX 指导教师:XXXX 设计时间:2014 年 X 月 X 日 出勤 实物 报告 总分 百度文库-好好学习,天天向上-II 百度文库-好好学习,天天向上-i 目录 前言.1 第一章 设计方案.1 设计内容及要求.1 设计内容.1 设计要求.1 功能设计.2 硬件设计.2 矩阵键盘电路设计.2 数码管电路设计.3 LED 及蜂鸣器电路设计.4 单片机主电路设计.4 上电电路的设计.5
2、 总电路图.5 总体方案.6 第二章 软件设计.7 倒计时部分.7 键盘扫描子程序.8 0 到 9 按键功能子程序和键盘显示子程序.9 一位转多位十进制子程序.12 TMR0 中断服务子程序.13 倒计时显示子程序.15 附加功能部分.15 暂停和继续.16 计数功能.17 复位和归零.17 百度文库-好好学习,天天向上-ii 结束提示部分.18 程序部分总结.18 第三章 实物照片.19 实验板照片.19 脱机运行照片.19 第四章 问题与体会.21 结论.22 参考文献.23 附录:程序清单.24 百度文库-好好学习,天天向上-1 前言 此次课程设计的内容为三位数的倒计时器的设计。目前倒计
3、时器的发展已经相当先进,我做这次设计的主要目的是想更进一步了解基本电路的设计流程,以提高自己的设计理念,使自己的动手动脑能力有更进一步提高。通过解决现实生活中的问题,巩固和加深单片机课程中所学的理论知识和实验能力,加深对单片机软硬件知识的理解,以获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,能够提高自己的动手能力和设计能力,以培养自己的创新能力,做到理论和实践相结合。本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式有了更深层次的了解。另外,倒计时器
4、在生活中应用广泛,因此它的功能灵活性和精度的要求就更加显得重要。通过此次练习,我为自己设下了很多要求,力求此倒计时器的功能完美性和精度精细性,以加深自己对电子产品设计的认知。第一章 设计方案 设计内容及要求 1.1.1 设计内容 本次设计的倒计时器需要由 4*4 矩阵键盘、3 位数码管、LED 小灯和蜂鸣器等有关输入输出器件组成,要求倒计时的初始值和控制按键均由键盘输入,数码管显示倒计时的时间,小灯和蜂鸣器负责终止提示。因此,本次的设计内容包括硬件设计,流程框图及软件的编写与调试。1.1.2 设计要求 根据以上设计内容的介绍及我们的设计目的,总结出以下的设计要求:1.能够实现 255 以内数的
5、倒计时;2.倒计时结束,报警提示;百度文库-好好学习,天天向上-2 3.通过按键设置倒计时的初始值;4.精度为微秒级的计时;5.具有“开始”、“暂停”、“继续”、“加一”、“减一”、“复位”等功能键;6.计时结束具有重新开始的功能。1.1.3 功能设计 为实现使用的灵活性和计数的精准性,我们采用 TMR0 定时器计时,功能键包括计时开始、暂停、继续、加一、减一和复位。实现过程如下:当从键盘输入任意三位以内包括三位数,数码管显示输入数值,按下键 A 倒计时开始,按下键 B 倒计时暂停,按下键 C 倒计时继续;当发现计时过程中需要调整计时时,可以在暂停或非暂停情况下按下键 D 或键 E 实现计数加
6、一和减一的功能。键 F 的主要功能为当计时需要停止和重新再来时,按下它,计时器重新工作。当倒计时到 0 时,小灯立即闪烁,同时蜂鸣器鸣叫,小灯闪烁 3 次以后,倒计时器恢复初始状态,无需复位可以重新使用。按键过程中为确保使用人员知道键是否按下,按下时蜂鸣器应该响起以示提醒。硬件设计 我们设计的倒计时器需要由键盘任意输入255以内三位数,并显示于数码管上,计时按钮及相关功能均由键盘键入,同时为保证键盘按下的准确性,加入按下蜂鸣器提示功能,计时结束需有小灯和蜂鸣器提醒。因此,设计电路图时必须涉及到键盘,4 位数码管,蜂鸣器,LED 小灯,同时上电电路和单片机控制电路为必须加入的。1.2.1 矩阵键
7、盘电路设计 一般键盘控制有 4*4、5*5 等类型方式,考虑到功能所需和单片机引脚的限制,我们采用 4*4 矩阵键盘。该键盘有 4 个输入端,4 个输出端,我们习惯于把它连接在单片机的 RC 端口。因此,我们将 RC 的低四位与键盘的输入相连,高四位与输出相连,以实现键盘的正确扫描。百度文库-好好学习,天天向上-3 图 1-1 键盘设计电路图 1.2.2 数码管电路设计 数码管显示需送入位选和段选,我们所需为 3 位显示,采用 4 个数码管,因此需要将 4 个位选联入单片机中,同时还将有 8 条段选联入其中。习惯上,我们将段选接入RD 的 8 个端口,4 个位选接入 RB 的 1 到 4 位。
8、图 1-2 数码管设计电路图 百度文库-好好学习,天天向上-4 1.2.3 LED 及蜂鸣器电路设计 蜂鸣器的设计就简单许多,只需将其一端接入高电平,另一端接入单片机,为保证其正常工作,接入 100 欧姆的电阻。接入单片机的一端我们可以设为 RE5。小灯同蜂鸣器相似,只需考虑接入的引脚,实验中我们接入 3 种颜色的小灯,其引脚分别连至单片机的 RE 端口的 0、1、2 位。图 1-3 LED 及蜂鸣器电路连接图 1.2.4 单片机主电路设计 本次设计采用的单片机为 PIC16F887,其功能强大,应用灵活。在使用它进行工作的前提是对其基本的引脚进行分配,这里我们只考虑 VCC 和 GND 以及
9、晶振的接入,晶振选择 4MHz 的晶振。其具体电路图如下:百度文库-好好学习,天天向上-5 图 1-4 单片机接线图 1.2.5 上电电路的设计 上电电路采用已有的设计好的电路,由 USB 接口供电,其电路图如下:图 1-5 上电电路 1.2.6 总电路图 总电路图如下图 1-6:百度文库-好好学习,天天向上-6 图 1-6 总电路图 总体方案 由以上设计可知,系统的硬件原理图如下所示:图 1-7 硬件原理图 设计时可采用模块化程序设计方法。模块划分时应遵循下述原则:1每个模块应具有独立的功能,能产生一个明确的结果;2模块之间的控制参数应尽量简单,数据参数应尽量少;3根据模块的划分原则,将该程
10、序划分成 6 个模块,如图 1-8 所示。图 1-8 程序模块 主程序 键盘扫描模块 键盘显示模块 TMR0 定时模块 动态显示模块 倒计时结束提示模块 附加功能模块 百度文库-好好学习,天天向上-7 第二章 软件设计 基于硬件工作的软件部分的编写是通过汇编语言实现的。由以上分析可知,该部分大致包括键盘扫描,键盘显示,TMR0 定时器,动态显示,结束提示和其他功能模块等六大部分,其中每大部分又包括不等的若干小部分,下面通过总体到局部的过程介绍它的工作原理。倒计时部分 该软件由键入到倒计时的工作过程可由下面框图表示,此处省略了附加功能部分,只体现出其一般工作状态。图 2-1 倒计时器工作流程图
11、该流程图表示了软件工作的大体过程,具体的过程如下子章节。百度文库-好好学习,天天向上-8 2.1.1 键盘扫描子程序 键盘连接有 4 个输入端和 4 个输出端,输入端连在 RC 低四位,输出端连在 RC 高四位,先让低四位赋值低电平,若有键按下,高四位必有低电平出现,之后继续判断具体哪个键被按下。以 RC0 为 0 为例,若令 RC0=0,即判断第一行是否有键按下,依次判断高四位是否为低电平,若为低电平,则该键被按下,转入相应功能子程序。以 RC0=0 为例,框图如下:图 2-2 键盘扫描流程图 程序及注释如下:JIANPAN MOVLW 00H ;RC 口低四位输出低电平 MOVWF POR
12、TC MOVLW 0F0H ANDWF PORTC,W ;屏蔽低四位 SUBLW 0F0H BTFSC STATUS,Z ;判断高四位是否为全 1 RETURN ;是,无键输入,返回继续判断 CALL DELAY10MS ;否,有可能有键输入,延时 20 毫秒 CALL DELAY10MS 百度文库-好好学习,天天向上-9 MOVLW 0F0H ;再判断一次是否键入 ANDWF PORTC,W SUBLW 0F0H BTFSC STATUS,Z RETURN ;虚假输入,返回 BCF PORTB,5 ;确实有键输入,蜂鸣器鸣叫 MOVLW 0FEH ;逐行判断哪个键输入,首先 RC0=0 MO
13、VWF PORTC BTFSS PORTC,4 ;判断键 0 GOTO JIAN0 ;是,跳至键 0 功能子程序 BTFSS PORTC,5 ;判断键 1 GOTO JIAN1 ;是,跳至键 1 功能子程序 BTFSS PORTC,6 ;判断键 2 GOTO JIAN2 ;是,跳至键 2 功能子程序 BTFSS PORTC,7 ;判断键 3 GOTO JIAN3 ;是,跳至键 3 功能子程序 2.1.2 0 到 9 按键功能子程序和键盘显示子程序 0 到 9 按键的主要作用是输入我们倒计时的初值,当这些按键按下时,会调用键盘显示子程序,将键入的数字通过数码管显示出来。为了判断按下的次数,设置变
14、量KEFLAG,每调用一次键子程序变量左移一位,当需要显示时,只需判断 KEFLAG 的第几位为 1,就可判断该键入的数字在数码管的哪一个位上显示。同时,键入的位数不同会调用不同的键盘显示子程序,我们设计的三位倒计时器有三个键盘显示子程序,当按下一个数时,调用 XIANSHI1,为静态显示;当按下第二个数时,数码管动态扫描,显示两位数,就需要调用 XIANSHI2,同理按下 3 位数调用 3 位显示子程序 XIANSHI3。0 到 9 按键功能子程序的另一个作用就是将该按键的标号放入指定的变量带回,为之后的动态倒计时显示提供十进制转换所需的数字。百度文库-好好学习,天天向上-10 该子程序如下
15、,以 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 左移一位 RETURN JIAN1 CALL SFANG ;释放 MOVLW 01H ;将 1 放入 W 寄存器 MOVWF NUM8 ;NUM8 带 1 返回 CALL CHABIAO ;调用查表子程序 MOVWF BIAN ;BIAN 带 1
16、显示码返回 RLF KEYFLAG,1 ;键按下一次,KEYFLAG 左移一位 RETURN 该倒计时器将键盘键入数字的显示和倒计时时数字的显示分开,即两者的显示不是在同一个显示子程序里。因此这里需要简要的介绍一下键盘显示子程。左图展示了键的输入在数码管显示的具体流程,其核心便是三个显示子程序。对于显示 1 子程序,由 0 到 9 按键功能子程序知,送到这里的变量为该按键的显示码值,由于为一位显示,只需将第一位位选打开,将码值送入,关闭位选即可。由于多位显示同样需要该位的码值,且新键入的变量相同,所以我们应将该码值备份两份,为多位显示做准备。图 2-3 选择第几个显示子程序 百度文库-好好学习
17、,天天向上-11 显示 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,W ;送入段选 MOVWF PORTD CALL DELAY ;延时 BSF PORTB,2 ;
18、位选关闭 ;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 NUM5,F ;NUM5 减 1 百度文库-好好学习,天天向上-12 BT
19、FSS STATUS,Z ;判断是否为 0 GOTO JIASHI1 ;否,继续加十 RETURN ;是,返回 2.1.3 一位转多位十进制子程序 由键盘显示子程序我们发现其后多出一个多个一位数转化为一个多位数的转化子程序,它的作用是,在键入之后将该多位数送入倒计时显示子程序开始倒计时,这是由倒计时显示子程序决定的,只要送入任意一个三位数,它都能够实现准确的显示。该程序的原理是:首先判断键入几位数,最初键入的数在十位,十位还是百位,然后对其相应的加一百或时循环,最后把所有的转化之后的数加起来,实现多位数的转化。以三个数转化为三位数为例。现在已知 NUM11 为第一次键入的数,NUM6 为第二次
20、键入的数,NUM8 为第三次键入的数,NUM10 初值为 0,其流程如下。图 2-4 多位数转化流程图 程序:;进行三个数到十进制三位数的转换 MOVF NUM8,W ;将 NUM8 复制到 MUM7 MOVWF NUM7 百度文库-好好学习,天天向上-13 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 NU
21、M10,W ;将个位数与 NUM10 相加 ADDWF 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 ;是否
22、为 0 GOTO JIASHI2 ;否,继续加十 RETURN ;是,返回 2.1.4 TMR0 中断服务子程序 为实现精准定时,我们采用 TMR0 定时器,它能够实现精确到微秒的计时。但是百度文库-好好学习,天天向上-14 TMR0 定时器所能定时的最长时间为 65 毫秒,为实现 1 秒的定时,我们选择其定时 50毫秒,循环 20 次的方法。由定时时间=分屏比*指令周期*(256-初值),我们能够算出当分频比为 1:256 时使其定时 50 毫秒时的初值为 3DH,当 TMR0 送入初值时该计时器开始计时,当计时循环 20 次时计数变量减 1,这就是它工作的基本原理。有关 TMR0 的中断控
23、制寄存器主要有 OPTION_REG 和 INTCON,前者可以控制其分频比,后者用来控制中断的使能位,为使其正常工作,总中断和它的使能位必须同时打开。基于此原理,我们写出程序如下:ORG 0 x004 ;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,T
24、0IF ;清 TMR0 溢出标志位 DECFSZ COUNTER ;循环减 1,是否为 0 GOTO RT ;否,中断返回 DECF NUMB ;是,计数变量减 1 MOVLW.20 ;循环数赋初值 20 MOVWF COUNTER RT 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
25、 pre-isr W register contents retfie ;return from interrupt 主程序中有关部分为:BSF STATUS,RP0 ;进入体 1 MOVLW 07H ;分频比为 1:256 MOVWF OPTION_REG 百度文库-好好学习,天天向上-15 2.1.5 倒计时显示子程序 基本的输入及辅助程序准备完毕,接下来是主体的显示程序。前面提到过,显示程序分为两部分,前面一部分负责键盘的显示,这一部分负责计数变量变化时其显示的变化。由前面的多个数转化为多位数的准备,我们易知该子程序应该具有将多位数分解为多个数并分别送入各个位选显示的功能。其分解子程序工
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三位 计时器 PIC 单片机 课程设计 40 全部 汇编程序 清单
限制150内