




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计题目:单片机的数字钟设计设计目的:此课程设计介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。 设计目标:实现了数字钟的主要部分和秒表的主要部分,以及产生报时信号,定时设置。 任务下达时间: 2010年3月1日任务完成时间: 2010年3月12日指导教师评语: 年 月 日设计成绩:摘要:本次课程设计介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。最后,给出了采用中断方式实现的数字钟的源程序。
2、关键词:单片机,数字钟,数据缓冲区,中断,定时,消抖引言:在单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,肝胆俱全”,单片机的学习和研究是对微机系统学习和研究的简捷途径。1. 方案论证1.1 数字钟硬件框图1.2 程序整体设计:定时模块,显示模块,数据调整模块,状态调整模块。1、总体介绍此部分主要介绍定时模块,和显示模块。定时部分采用经典的定时器定时。它实现了数字钟的主要部分,和秒表的主要部分,以及产生报时信号,定
3、时设置。显示模块是实现数字钟的又一重要部分,其模块的的独立程度直接影响到数字钟的可视化程度。在此部分的设计中,设置专用显示数据缓冲区40h-45h,与分,时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变R0(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。2、数据调整数据调整有多种方式。一,可以直接进入相关状态进行有关操作,二,将调整分两步,先进入状态,然后执行操作,这两步分别由两个键控制。方式一,比较直接,设计思想也比较简单,但
4、是,这种方式存在操作时间和控制键数目的矛盾。如果用比较少的键,那么可能会在进入状态后处于数据调整等待状态,这样会影响到显示的扫描速度(显示部分可以采用8279芯片来控制,可以解决此问题)。 当然在这种方式下,还可以使用多个状态键,每个状态键,完成一个对应数据的调整。如果采用二的方式,就不会出现这种情况。因为状态的调整,与状态的操作可以分别由两个键控制,其状态的调整数可以多达256个(理论上),操作的完成是这样的,一键控制状态的调整,一键控制数据的调整(具体操作如图2)。以上两种方式的实现都可以采用查询和中断的方式。两种方式必须注意的问题是两者进行相关操作的过程不能太长否则会影响显示的扫描。利用
5、查询的方式,方法传统,对此就不作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。基于以上的讨论可以设计如下:将调整分为状态调整和数据调整两部分,每次进入中断只执行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时很小。R1MBFR1HOURR1FSR1SSR1NULL状态1状态2状态3状态4状态5状态6在状态进入后,调整指针的指向如右图所示:在右图中R1表示指向数据缓冲区的指针,它主要是为数据的调整而设立的,在图中:MBF ,HOUR,FS,SS,分别表示时钟的分,时,定时设置分,时,的数据缓冲区。状态5是秒表进入状态,状态6是时钟正常
6、显示状态。 在程序中R1为专用指针,它的值只在状态调整时改变,每次运行图示模块,只改变一次状态,就跳出程序。调整数据只须改变R1中的数据即可。3、中断方式应注意的问题: 采用中断的方式,最好将定时器中断的优先级设置为最高级,关于程序数据的稳定性应注意两个问题:一,在低优先级中断响应时,应在入栈保护数据时禁止高优先级的中断响应。二,在入栈保护有关数据后,对中断程序执行有影响的状态位,寄存器,必须恢复为复位状态的值。例如,在以下程序中,由于用到了十进制调整,所以在中断进入时,将PSW中的AC,CY位清零,否则,十进制调整出错。4、定时准确性的讨论程序中定时器,一直处于运行状态,也就是说定
7、时器是理想运作的,其中断程序每隔0.1秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数,其间消耗的时间就造成了定时器定时的误差。如果在前述定时器不关的情况下,在中断程序的一开始就给定时器置数,此时误差最小。误差大约为:每0.1秒,误差712个机器周期。当然这是在定时器定时刚好为0.1秒时的情况,由以上分析,如果数字钟设计为查询的方式或是在中断的方式下将定时器中断设置为最高级,我们在定时值设置时,可以适当的扣除9个机器周期的时间值。但如果在中断的情况下,没有将定时器中断设置为
8、最高级,那就要视中断程序的大小,在定时值设置时,扣除相应的时间值。5、软件消抖 消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。在此只讨论软件方式。软件消抖有定时器定时,和利用延时子程序两种方式。一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:设置标志位,在定时器中断中将其置位,然后在程序中查询。将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。因此
9、,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。以下图1和图2是三种消抖方法的程序流程图:图1 查询方式消抖键按下延时键按下Y处理程序结束按键下,开定时器中断中断入口定时器中断关执行操作延时N开关定时器图2 采用中断方式消抖中断入口关本中断置位标志位BZ出口查询标志位BZBZ为1延时N时间开中断,清BZYN定时延长设置0.3秒,甚至更长,而不影响计数2. 基于以上,数字钟详细设计如下:2.1数字钟的操作如下:按键KEY0状态1:KEY0=1,数字钟正常时钟显示状态。状态2:KEY0=2,调整数字钟的分数据。状态3: KEY0=3, 调整数字钟的
10、时数据。状态4: KEY0=4,数字钟的定时设置分值。状态5: KEY0=5,数字钟的定时设置时值。状态6: KEY0=6,秒表进入状态。说明:状态N表示KEY0键按下N次。22流程图: 程序设计的基本流程图如下:显示状态是否切换查询取代码段送到缓冲单元六位显示完?开始各缓冲区初始化各定时器中断设置开始计数显示缓冲区单元地址R0段显示单元值段扫描值送为数据口P1让调整位DPD点亮延时一小段时间显示单元地址加一扫描值右移一位YN三个要显示状态秒表数据单元定时设置数据单元时钟数据显示中断入口定时器置初值时间计数单元加一计数值等于10?计数值等单元清零秒值加一秒值等于60?秒值清零分值加
11、一分值等于60?分值清零时值加一时值等于24?时值清零结束YYYY标志位为1?秒表计数单元YN分值比较分时设定值等于时钟值?标志位BS置1,输出报时脉冲YN3.源代码NAME ZFPORT EQU 0CFA0HHOUR EQU 26H ;设置数据缓冲区BUF EQU 23H
12、SBF EQU 22H MBF EQU 21H SA EQU 27HFA EQU 28HHH EQU 29HMB0
13、160; EQU 2AHMB1 EQU 2BHMB2 EQU 2CH MM0 EQU 2DH CSEG AT 0000H LJMP START ;中断初始化CSEG AT 0003H
14、; LJMP KEY0 CSEG AT 0013H LJMP KEY1CSEG AT 401BH LJMP CLOCKCSEG AT 4100HSTART: MOV R0, #40H ;数据缓冲区初始化
15、 MOV R6,#00H MOV A, #00H MOV R0, A INC R0
16、60; MOV R0, A INC R0 MOV R0, A INC R0
17、; MOV R0, A INC R0 MOV R0, A INC R0 MOV
18、60; R0, A MOV SP, #30H MOV TMOD, #10H MOV TH1, #38H MOV
19、60; TL1, #00H MOV BUF, #00H MOV SBF, #00H MOV MBF, #00H MOV
20、 HOUR,#00H MOV SA, #00H MOV FA, #00H MOV HH, #00H
21、; MOV MB0, #00H MOV MB1, #00H MOV MB2, #00H MOV MM0, #00H
22、60; SETB ET1 SETB EX1 SETB PT1 SETB EA SETB
23、; P3.5 CLR P3.0 MOV TCON, #45H MOV R5, #01HDS1: MOV R0, #40H
24、 ;扫描显示 MOV R2, #20H DS2: MOV DPTR, #PORT MOV A, R0
25、160; ACALL TABLE CJNE R5, #02 ,L3 SJMP L2L3: CJNE R5, #04H,L1 ;让调整位的DP点亮L2: CJNE R0, #42H,L0
26、0; ADD A,#80H SJMP L0L1: CJNE R5,#03H, L4 SJMP L5L4: CJNE R5, #05H,L0L5:
27、 CJNE R0, #44H,L0 ADD A,#80HL0: MOVX DPTR, A MOV A, R2
28、; CPL A MOV P1, A MOV R3, #07FH DEL: NOP DJNZ R3, DEL
29、; INC R0 CLR C MOV A, R2 RRC A
30、; MOV R2, A S2: CJNE R5,#06H,S3 ;切换到显示秒表计数 SETB EX0
31、160; SJMP MIAOBIAOS3: CJNE R5,#04H,S1 ;切换到定时设置状态的显示 SJMP DINGSHI S1: CJNE R5,#05H,S0 SJMP DINGSHI S0:
32、JNZ DS2 MOV R0, #40H ;取缓冲区到显示缓冲区 MOV A, SBF ACALL GET
33、 MOV A, MBF ACALL GET MOV A, HOUR ACALL GET
34、0; SJMP DS1MIAOBIAO:JNZ DS2 ;秒表显示 MOV R0, #40H MOV A, MB0
35、160; ACALL GET MOV A, MB1 ACALL GET MOV A, MB2 A
36、CALL GET AJMP DS1 DINGSHI: JNZ DS2 ; 定时设置显示 MOV R0, #40H
37、0; MOV A, HH ACALL GET MOV A, FA ACALL GET
38、0; MOV A, SA ACALL GET AJMP DS1 TABLE: INC A
39、60; ;查表取段码 MOVC A, A+PC RET DB 3FH DB 06H &
40、#160; DB 5BH DB 4FH DB 66H DB &
41、#160; 6DH DB 7DH DB 07H DB 7FH DB
42、60; 6FH DB 40HGET: ;将一个两位十进制数放入两个数码管对应的两个缓冲区 MOV R4, A
43、 ANL A, #0FH MOV R0, A INC R0 MOV A, R4 &
44、#160; SWAP A ANL A, #0FH MOV R0, A &
45、#160; INC R0 RETCLOCK: ;定时器中断服务程序 &
46、#160; JNB P3.0,D4 ;产生定时输出脉冲 CPL P3.4 D4: MOV TL1, #0AFH MOV TH1, #3CH&
47、#160; PUSH PSW PUSH ACC JNB P3.5,C0 ;秒表计数模块 INC &
48、#160; MB0 MOV A, MB0 CJNE A, #0AH,C0 MOV MB0, #00H &
49、#160; MOV A, MB1 INC A DA A
50、160; MOV MB1, A CJNE A, #60H, C0 MOV MB1, #00H
51、; MOV A, MB2 INC A DA A
52、; MOV MB2, A CJNE A, #60H, C0 MOV MB2, #00H C0: JNB 78H, Z1
53、 ;时钟计数程序 INC R6 CJNE R6,#05H,Z1 MOV R6,#00H CLR&
54、#160; 78H SETB EX0 Z1: JNB 79H, Z2 ;去抖延时程序 INC R6
55、; CJNE R6,#0FH,Z2 MOV R6,#00H CLR 79H SETB EX1 Z2: INC
56、 BUF MOV A, BUF CJNE A, #0AH,QUIT MOV BUF, #00H
57、; MOV A, SBF INC A DA A MOV &
58、#160; SBF, A CJNE A, #60H, QUIT MOV SBF, #00H MOV A, MBF
59、160; CLR P3.0 ;定时脉冲输出一分钟 D2: INC A &
60、#160; DA A MOV MBF, A MOV A, FA ;定时比较分值 &
61、#160; CJNE A, MBF,D0 SJMP D1 D0: MOV A, MBF CJNE
62、 A, #60H, QUIT MOV MBF, #00H MOV A, HOUR INC A DA
63、160; A MOV HOUR ,A D1: MOV A,SA ;定时比较时值 CJNE A, HOUR,D3
64、160; SETB P3.0 D3: MOV A, HOUR CJNE A,#18H,QUIT MOV HOUR,#00HQUIT: POP ACC
65、0; POP PSW RETI KEY0: CLR ET1 ;外部中断零服务程序 PUSH ACC
66、; PUSH PSW SETB ET1 CLR EX0 CLR CY ;清与十进制调整有关的状态位
67、; CLR AC SETB 78H JB P3.5,K0 MOV MB0, #00H ; 秒表数据清零 MOV
68、; MB1, #00H MOV MB2, #00H K0: MOV A,R1 ;完成加一操作 INC A DA A
69、160; CJNE R1, #26H,K2 ;调整数据的限制 SJMP K3 K2: CJNE R1, #27H,K4 SJMP K3 K4: CJNE A #60H,K1
70、60; MOV A,#00H K3: CJNE A #24H,K1 MOV A,#00H K1: MOV R1,A POP PSW POP ACC RETI KEY1: CLR ET1 ;外部中断一中断程序,完成状态的调整
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 屋面光伏支架预埋施工方案
- 河南大型水景施工方案
- 邯郸水泥板围墙施工方案
- 安徽省天一大联考2025届高三3月调研考试历史
- 山东一体化游泳池施工方案
- 塑胶楼地面施工方案
- 桥头修复施工方案范本
- 道路钢筋施工方案
- 森林培育技术发展应用趋势及管理措施的实践分析
- 江苏省泰州市兴化市2024-2025学年九年级上学期期末化学试题(原卷版+解析版)
- 2025年哈尔滨幼儿师范高等专科学校单招职业技能测试题库学生专用
- 第10章 浮力较难2 难题练习 2021年初中物理培优(重点高中自主招生 竞赛)
- 计算机一级测试题(附参考答案)
- 企业内部系统使用权限规范
- 教学课件-液压与气压传动项目教程(侯守军)
- 2024年亳州职业技术学院单招职业技能测试题库
- 2025年旅行与旅游的未来:拥抱可持续与包容性增长报告(英文版)-世界经济论坛
- DB65T 8022-2024 严寒和寒冷地区居住建筑节能设计标准
- 《质子治疗技术》课件
- 医院影像科服务质量提升措施
- 2024年中国疾控中心信息中心招聘笔试真题
评论
0/150
提交评论