基于单片机的倒计时牌的设计

  • 格式:pdf
  • 大小:304.98 KB
  • 文档页数:17
2. 硬件原理电路图的设计及分析
倒计时牌硬件系统的设计,关键是其显示器接口电路的设计,本设计采用直接利用 单片机 AT89C51 的并行 I/O 口构成倒计时牌显示接口电路, 其硬件系统主要包括单片机 (包含晶振、电源) 、控制电路(设置初始时间以及日历切换)及显示接口电路。
2.1 模块方框图
硬件系统
5. 心得体会
这次倒计时牌设计(课程设计)是我学习单片机以来做的最大的一个东西。 之前在学习的过程中已经做过类似的东西比如电子钟和秒表,做起这个实验来 自己还是蛮有信心的。 此次课程设计也很好的检验了自己对所学知识的理解以及掌握程度。一开始对 一些东西不是很理解,比如中断的概念及其过程,在设计的过程中,中断程序的编 写对自己来说是有点难度的。当做完这个实验后对其有了比较深入的理解。同时也 体会到了中断方式相比查询方式具有效率高等优点。 在整个实验的设计过程中,遇到了不少的难题。首先就题目本身来说,并没有 要求显示多少天,但要求显示日历。个人觉得如果只是倒计时少数几天的话,就没 有显示日历的必要了。最后自己选择了倒计时 100 天,符合题目的要求。但是在日 历的功能实现上,自己做的是很不好的,日历的初始日期是固定的;如果再涉及到 闰年的问题的话,对自己来说将是很大的挑战。 很感谢班里的 *** 同学,在此次设计中,对自己提供了很大的帮助。 通过此次课程设计,自己对单片机有了更大的兴趣。当然自己想学好这门课以 及真正的能独立做出一些东西还得付出很大的努力。今后自己会努力,多看书,多 操作,以至深入地理解其原理,取得更大的进步!
MOV A,B
MOVC A,@A+DPTR
MOV 47H,A
;秒的个位对应的段码放进缓冲区 47H
/* 下面为显示程序 */
DISPLY:
CLR P2.7
MOV A,47H
MOV P1,A LCALL DL1ms SETB P2.7 CLR P2.6 MOV A,46H MOV P1,A LCALL DL1ms SETB P2.6 3.2.3 定时器 T0 中断 定时器 T0 溢出中断( IT0P)程序主要用于产生秒的时间基准, 天、时、分、秒的正常倒计时以及日期的累加。流程图如下:
以及在此基础上的
开始
设置初值
是否到一秒
秒减 1 秒是否减至 -1 将秒置为 59,分减 1
分是否减至 -1
将分置为 59,时减 1 时是否减至 -1
将时置为 23,天减 1,日期加 1
中断返回
3.2.4 外部中断 0:
外部中断 0( INT0P)用于设置倒计时牌时间时切换各个位以及开启定时器,
换时以 R3 为标志位,
倒计时间显示。
注: INT0 对应的开关为位切换 /启动按钮 K1 ;
INT1 对应的开关为修改 /日历切换按钮 K2 。
3.程序设计及分析
3.1 软件系统模块图
软件系统


T

外延



0

部时





中子





断程



0
1序
3.2 各子程序设计 3.2.1 主程序
主程序( MAIN )的主要功能是初始化程序、转换子程序和调用延时子程序以及数 码管的断码表,其流程图如下:
MOV 37H,#17 ;日
SETB EX0
SETB EX1
SETB IT0 ;外部中断 0 为边沿触发
SETB IT1 ;外部中断 1 为边沿触发
SETB ET0
SETB EA
MOV TH0,#3CH ;定时器 T0 置初值
MOV TL0,#0B0H /* 下面为转换子程序 */ LOOP: /* 下面为显示程序 */ DISPLY: /* 下面为延时程序 */ DL1ms:MOV R7,#02H DL: MOV R6,#0FFH DL6: DJNZ R6,DL6
开始
初始化
转换子程序
显示子程序
调用延时
程序代码(加注释)如下:
MAIN:
MOV TMOD,#01H ; 定时器 T0 设为方式一
MOV R1,#17
;日历
MOV R2,#00H ; 切换显示 (日历和倒计时的切换 )
MOV R5,#0AH ;十次中断产生一秒 MOV R3,#00H ; 利用外部中断 0 对天、时、分、秒进行切换
标志位单元 取值
实现功能
R3
0 初始化值
R3
1 设置秒单元
R3
2 设置分单元
R3
3 设置时单元
R3
4 设置天单元
其中切
R3 其中涉及到标志位 R4,
标志位单元 R4 R4 其流程图如下:
取值
5 启动定时器,开始倒计时
实现功能 0 初始化值,此时可以设置时间 1 倒计时运行状态,此时不能设置时间
外部中断 0 开始
R3 加 1
R3 等于 5 吗,
开启 T0,开始倒计时, R3 清零, R4 置为 1
中断返回
3.2.5 外部中断 1: 外部中断 1( INT1P)程序主要用于天、时、分和秒的修改,按一次加 1。其中涉及到
标志位 R2,
工作组寄存器 R2 R2 R2
其流程图如下:
数值
功能 0 送倒计时时间 1 送当前日历 2 清0
30h
40h
31h
42h
32h
44h
33h
46h
34h
48h
35h
4ah
36h
4ch
37h
4eh
显示缓冲区(个位) 41h 43h 45h 47h 49h 4bh 4dh 4fh
显示子程序( DISPLY)动态控制数码管的点亮同时显示数据,完成 8个 LED数码管的
动态显示,显示字符通过查表方式实现 , 在显示过程中调用延时程序;各显示单元显示
DIV AB
MOVC A,@A+DPTR
MOV 40H,A
; 天的十位对应的段码放进缓冲区 40H
MOV A,B
MOVC A,@A+DPTR
MOV 41H,A
; 天的个位对应的段码放进缓冲区 41H
MOV R4,#00H ; 当倒计时开始( R3=5)时对倒计时的初值不能再进行设置
MOV 30H,#00H ;天
MOV 31H,#00H ;时 MOV 32H,#00H ;分
MOV 33H,#00H ;秒
MOV 34H,#20 ;年的前两位
MOV 35H,#09 ;年的后两位
MOV 36H,#06 ;月
倒计时设置时间时的位切换、设定数值、启动定时器、切换日历通过外部中断来实 现。
倒计时牌天、时、分、秒的计时分别利用 100、 24、60、60 进制自减计数来实现。 倒计时的显示电路由 LED数码管组成, 利用 8 只数码管显示, 从左至右依次显示为 天 ( 十位,个位 ) 、时(十位、个位)、分(十位、个位)、秒(十位、个位)及年(四位), 月(两位),日(两位)。
MOV 33H,#00H ;秒
MOV 34H,#20 ;年的前两位
MOV 35H,#09 ;年的后两位
MOV 36H,#06 ;月
MOV 37H,#17 ;日
SETB EX0
SETB EX1
SETB IT0 ;外部中断 0 为边沿触发
SETB IT1 ;外部中断 1 为边沿触发
SETB ET0
SETB EA
DJNZ R7,DL RET 3.2.2 转换子程序及显示子程序模块
转换子程序( LOOP)将中断服务程序中产生的天、时、分、秒数据,转换成适应
LED 数码管显示的数据,并将其存放在缓冲区中; 各个要显示的单元都存放在数据缓冲区中,如下表:
单元 天 时 分 秒 年的前两位 年的后两位 月 日
存放地址 显示缓冲区(十位)
MOV TH0,#3CH ; 定时器 T0 置初值
MOV TL0,#0B0H
LOOP:
MOV DPTR,#DMB
;段码表首地址放进 DPTR
MOV A,33H
; 对秒进行拆分
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 46H,A
; 秒的十位对应的段码放进缓冲区 46H
MOV A,B
R2 清 0 中断返回
3.2.6 延时子程序 延时程序( DL1m)s 主要用于数码管显示时延时,其流程图如下
开始
设置循环次数 2
设置循环次数 0FFH
0FFH 自减是否为 0
R7 自减是否为 0
结束
程序如下: DL1ms:MOV R7,#02H DL: MOV R6,#0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET
倒计时牌
1. 方案选择
1.1 题目:倒计时牌 1.2 要求: 1.2.1 实现日历功能; 1.2.2 显示距倒计时时刻还有多长时间(显示天、时、分、秒) ; 1.2.3 倒计时的时间可人为设定; 1.3 总体设计:
本倒计时牌以 AT89C51 单片机作为核心, 最长可以倒计时 100 天。可以显示距倒计 时时刻还有多长时间, 显示格式为天 (十位,个位 )、时(十位、 个位)、分(十位、 个位)、 秒(十位、个位) ;倒计时的时间可以人为设定;另外还可以显示当前的日历,显示格 式为年(四位),月(两位),日(两位)。
MOV A,31H
; 对时进行拆分
MOV B,#10
DIV AB MOVC A,@A+DPTR
MOV 42H,A
; 时的十位对应的段码放进缓冲区 42H
MOV A,B