电子时钟设计(完美实现最终版)要点.pdf

上传人:tbuqq 文档编号:5228657 上传时间:2020-02-27 格式:PDF 页数:32 大小:2.26MB
返回 下载 相关 举报
电子时钟设计(完美实现最终版)要点.pdf_第1页
第1页 / 共32页
电子时钟设计(完美实现最终版)要点.pdf_第2页
第2页 / 共32页
电子时钟设计(完美实现最终版)要点.pdf_第3页
第3页 / 共32页
电子时钟设计(完美实现最终版)要点.pdf_第4页
第4页 / 共32页
电子时钟设计(完美实现最终版)要点.pdf_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《电子时钟设计(完美实现最终版)要点.pdf》由会员分享,可在线阅读,更多相关《电子时钟设计(完美实现最终版)要点.pdf(32页珍藏版)》请在三一文库上搜索。

1、 电子时钟实验报告 1 电子时钟实验报告 一,实验目的 1. 学习 8051 定时器时间计时处理、按键扫描及LED数码管显示的设计方法。 2. 设计任务及要求利用实验平台上4 个 LED数码管,设计带有闹铃功能的数字时钟 二,实验要求 A.基本要求: 1. 在 4 位数码管上显示当前时间。显示格式“时时分分” 2. 由 LED闪动做秒显示。 3. 利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹铃时间到蜂鸣器发出声响, 按停止键使可使闹玲声停止。 4. 实现秒表功能(百分之一秒显示) B.扩展部分: 1. 日历功能(能对年,月,日,星期进行显示,分辨平年,闰年以及各月天数,并调整) 2.

2、 音乐闹铃 (铃音可选择,闹铃被停止后,闪烁显示当前时刻8 秒后, 或按键跳入正常时间 显示状态) 3. 定时功能(设定一段时间长度,定时到后,闪烁提示) 4. 倒计时功能(设定一段时间长度,能实现倒计时显示,时间长减到0 时,闪烁提示) 5. 闹铃重响功能 (闹铃被停止后,以停止时刻开始,一段时间后闹铃重响,且重响时间的间 隔可调) 三,实验基本原理 利用单片机定时器完成计时功能,定时器 0 计时中断程序每隔0.01s 中断一次并当作一 个计数, 设定定时1 秒的中断计数初值为100,每中断一次中断计数初值减1,当减到 0 时, 则表示 1s 到了,秒变量加1,同理再判断是否1min 钟到了

3、,再判断是否1h 到了。 为了将时间在LED数码管上显示, 可采用静态显示法和动态显示法,由于静态显示法需 要译码器, 数据锁存器等较多硬件,可采用动态显示法实现LED显示, 通过对每位数码管的 依次扫描, 使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。由于数码管扫 描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。 电子时钟实验报告 2 四,实验设计分析 针对要实现的功能,采用AT89S51 单片机进行设计,AT89S51 单片机是一款低功耗,高 性能 CMOS8位单片机, 片内含 4KB在线可编程 (ISP)的可反复擦写1000次的 Flash 只

4、读程序存 储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及 80C51引脚结 构。这样,既能做到经济合理又能实现预期的功能。 在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便 于添加各项功能。程序可分为闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程 序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。运用这种方法,关键在于 各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。 首先, 在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元 的用法, 否则,编程无从下手, 电路也无法设计。这是前期准备工作。

5、第二部分是硬件部分: 依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电 路等。第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分 块的编程调试, 最终完成程序设计。第四部分是软件画图部分:设计好电路后进行画图,包 括电路图和仿真图的绘制。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进 行仿真, 仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。第六部分是硬 件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。 最后进行功能扩展,在已经正确的设计基础上,添加额外的功能! 五,实验要求实现 A.

6、电路设计 1. 整体设计 此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路 用8个共阴数码管分别显示,星期(年份),小时、分钟(月份)和秒(日),通过动态扫描 进行显示,从而避免了译码器的使用,同时节约了I/0 端口,使电路更加简单。单片机采用 AT89S51 系列,这种单片机应用简单,适合电子钟设计。 电路的总体设计框架如下: 电子时钟实验报告 3 2. 分块设计 模块电路主要分为:输入部分、输出部分、复位和晶振电路。 2.1 输入部分 输入信号主要是各种模式选择和调整信号,由按键开关提供。 以下为输入部分样例: 在本实验中主要用用P3口输入按键信号,还用到了特殊

7、的P0口。对于 P0口,由于其存在 高阻状态,为了实现开关功能,给其添加上拉电阻,具体如下图所示: 单 片 机 输入部分 晶振和复位 输出部分 电子时钟实验报告 4 2.2 输出部分 本电路的输出信号为7段数码管的位选和段选信号,闹铃脉冲信号,提示灯信号。 本实验的数码管是共阴的,为了防止段选信号不能驱动数码管,故在 P1口连接上拉电阻 后,再送段选信号,以提高驱动,位选信号直接从P2口接入,如下图: 电子时钟实验报告 5 闹铃由 P2.6端输出,模块如下: 2.3 晶振与复位电路 本实验单片机时钟用内部时钟,模块如下: 复位电路为手动复位构成,模块如下: 电子时钟实验报告 6 各模块拼接组合

8、,电路总体设计图如下: B.程序设计 B.1 程序总体设计 本实验用汇编程序完成. 电子时钟实验报告 7 程序总的流程图如下: NO YES 主 程 序 开始 显 示 星 期,时, 分,秒 是否有 调 T0 中 秒, 分, 时等 闪烁 提示 显示 日期 并调 响铃 提示 时间 调整 闹铃 设置 定时 设置 铃声 测试 秒表 模式 回主 程序 定 时 按 0 按 0 闹 铃 按 1 按 2 按 3 按 4 按 5 按 7 7 键 按 4 按 8 按 0 按 0 倒计 时启 动并 回主 程序 秒表 暂停 秒表 清零 回 主 程序 按 7 电子时钟实验报告 8 结合电路图,程序设计的整体思路为: 接

9、通电源,数码管显示星期数,时,分,秒。并且走时显示LED灯每隔 1 秒改变一次明 暗,此为正常工作模式。以下为在该工作方式下模式选择的按键方式: 1. 按 1 键日期模式。显示年月日且可调整,调整状态指示灯亮。 日期调整对应键如下: 6 键年(千位,百位),按一次该位加1 5 键年(十位,个位),按一次该位加1 4 键月,按一次该位加1 3 键日,按一次该位加1 0 键调整状态指示灯灭,返回主程序,显示时间 2. 按 2 键调时模式。显示时分秒且可调整,调整状态指示灯亮。 时间调整对应键如下: 6 键时,按一次该位加1 5 键分,按一次该位加1 4 键秒,按一次该位清0 0 键调整状态指示灯灭

10、,返回主程序,显示时间 3. 按 3 键闹铃调整模式。显示闹铃时刻且可调整,调整状态指示灯亮。 闹铃调整对应键如下: 5 键时,按一次该位加1 4 键分,按一次该位加1 0 键调整状态指示灯灭,返回主程序,显示时间 4. 长按 4键定时调整(倒计时)模式。 显示定时长度且可调整,调整状态显示灯 亮。 定时调整对应键如下: 6 键分,按一次该位加1 5 键秒,按一次该位加1 4 键开启定时功能,并显示倒计时 0 键调整状态指示灯灭,返回主程序,显示时间 5. 按 5 键铃声测试,扬声器播放音乐。 6. 按下 7键,进入秒表模式,显示秒表走时。 拨上 7 键,秒表暂停;按下7 键,秒表又继续走时。

11、 按下 8 键,秒表清零。 0 键调整状态指示灯灭,返回主程序,显示时间 电子时钟实验报告 9 7. 按下 8键,数码管熄灭,时钟仍在走时,进入节能模式。 拨上 8 键,数码管亮,恢复普通工作模式。 8. 9键为闹铃启动(停止)键,按下可以选择是否要闹铃,以及在闹铃响起时,按 此键可以停止闹铃。 9. 10键为铃声选择开关,按下与否,可以选择两手音乐。 10. 11键为闹铃重响控制开关,重响功能开启时,从闹铃随音乐结束而结束的时刻 开始,或从手动按9 键停止闹铃的时刻开始定时,一段时间后闹铃重响。 11. 12键为闹铃重响间隔选择开关,可选两个定时长度,以便在闹铃重响功能开启 时,闹铃初次响后

12、,过一段时间闹铃继续响。 B.2 程序主要模块 B.2.1 延时模块 数码管显示动态扫描时,用到延时程序, 这里使用延迟1ms的程序, 此程序需要反复调 用程序如下: D_1MS: MOV R7,#2 D_5: MOV R2,#250 DJNZ R2,$ DJNZ R7,D_5 RET 除数码管动态扫描外,数码管的闪烁提示,以及音乐模块也用到了延时,只是延时的长 短不同罢了,在此不再赘述。 B.2.2 中断服务程序 本实验中,计数器T0,T1中断都有运用,其中T0中断为时钟定时所用,T1中断用于音乐 播放。 T0的定时长度为0.01s, 工作于方式 1,计数 1次,时长 1us,故计数器计数

13、10000次,进 入中断,计数初值为65536-10000=55536=#0D8F0,装满定时器需要0.01s 的时间,从而 100 次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值 为0,分加一,依次类推。包括日期显示的功能也是如此。另外,由于要实现倒计时功能, 因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。基于以上考虑, 以R3 为倒 电子时钟实验报告 10 计时中的秒, R4为倒计时的分,当秒加1时R3 减一,减到 0之后,秒赋值为59,分减一,直到 分为 0。 以下为定时中断流程图: NO YES YES NO 进入 T0 定时 中断 修正

14、,重装计数初值 按 7 键 秒表的百分之一秒位,秒位,分位,时 位的进位 DEC PNUM PNUM=0 ,已到 1 秒 MOV PNUM,#100 重装中断计数值 INC SECOND 秒位加 1 R3,R4 所存定时长度减1 分,时,日周,月,年的进位 RETI 中断返回 电子时钟实验报告 11 计数器 T1 工作于方式1, 当调用响铃程序时,其计数功能开启,为音乐音调不同频 率的方波的形成, 提供延时。其中断服务程序就是根据音调改变音乐方波输出口电平的高低, 用语句 CPL 实现。 中断服务程序中日历的实现较为复杂,要考虑平年,闰年,特殊的2月,每月的天数的 不尽相同。具体的逻辑判断方法

15、为:首先,要考虑年份是不是闰年,闰年的判断方法是:将 年份除以 100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年; 若不能被 100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。只有2月与 平、闰年相关,因此在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进 行日期的增加,若不是则转入平时的月份。其中1、3、5、7、8、10、12月是每月 31天, 4、 6、9、11月为每月 30天。 日历进位判断流程图如下: 年份能否被100 整除 N Y 年份是否能被4 整除年份是否能被400 整除 N N 平年闰年 Y Y 是不是 2 月是不是 2

16、月 Y 日=28之后返回为1 N N Y 日=29 之后返回为1 若月份为 1、3、5、7、8、10、12 月则调用 31 天的程序 若月份为 4、6、9、11 则调用 30 天 的程序 电子时钟实验报告 12 本实验用 8个数码管,刚好能显示年,月,日,扫描显示与时间的扫描显示类似。年比 较特殊,由两个寄存器存储,个位,十位为0时,表明年数能被100整除,若此时千位,百位 组成两位数能被4 整除,则年数被400 整除,为闰年。 若十位, 个位组成两位数能被4 整除, 则年数能被4 整除,为闰年。 B.2.3 主程序 主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用相关程序

17、, 该段程序如下: MAIN: JNB P3.0,DATETZ ;按下 0键,显示日期并可对日期进行调整 JNB P3.1,ZSTZ1 ;按下 1键,显示时间,并可调时 JNB P3.2,NLTZZ ;按下 2键,进行闹铃设置 JNB P3.3,DSTZ ;按下 3键,进行定时设置 JNB P3.4,CESHI ;闹铃测试 JNB P3.6,STOPWATCHTZ ;按下 6键,进入秒表方式 ACALL DISP ;调用时钟显示子程序 JNB P0.6,RERING ;判断是否开启闹铃重响功能 RE: JNB P2.7,DSPDKQ ;判断是否开启闹铃功能,没开则去判断定时 FMQPD: ;判

18、断定时值 R4,R3是否到零、闹铃时刻是否已到 MOV A,HOUR; SUBB A,38H; JZ FEN ;判断小时数是否到闹铃所定时间,若到,则对分进行判断;若 不到,则对定时进行判断 AJMP DSPDKQ 电子时钟实验报告 13 FEN: MOV A,MINUTE; SUBB A,37H; JZ MIAO ;判断分是否到闹铃所定时间,若到,则对秒进行判断; 若不到, 则对定时进行判断 AJMP DSPDKQ MIAO: MOV A,SECOND SUBB A,#0 JZ SHENGYIN1 ;判断秒是否到闹铃所定时间,若到,则时,分,秒都到达闹铃 时刻,进入响铃子程序;若不到则判断定

19、时 AJMP DSPDKQ RERING: ;闹铃重响判断程序 JNB F0, RE ;标志位 F0为0,不进行闹铃重响设定 CPL F0 MOV 3CH,#1 ;定时判断标志位赋1, 定时判断功能开启 JNB P0.7,M1 ;闹铃重响间隔时间选取 MOV R4,#0 ;闹铃重响间隔 30秒 MOV R3,#30 AJMP MAIN M1: ;闹铃重响间隔 60秒 MOV R4,#1 MOV R3,#0 AJMP MAIN DSPDKQ: ;判断是否应该进行定时判断 MOV A,3CH ;3CH是引入的判断因子,当其为0时,不对定时时间是否到0进 行判断 JNZ DSPD2 ;当3CH 不是

20、 0时,跳转到定时判断程序 电子时钟实验报告 14 AJMP MAIN DSPD2: MOV A,R4; JZ S_PD ;R4所存定时分数为 0, 则转而判断 R3所存定时秒数 AJMP MAIN; S_PD: MOV A,R3; JNZ MAIN ;R4,R3所存参数减为 0, 定时长度已到 JNB P0.6,SHENGYIN2 ;闹铃重响功能开启时,跳入响铃程序 AJMP TISHI ;不是闹铃重响定时,则定时时间到时,跳入提示程序 AJMP MAIN CESHI: ACALL RING AJMP MAIN SHENGYIN1: ;调用响铃子程序 LCALL RING AJMP MAIN

21、 SHENGYIN2: SETB F0 ;闹铃重响标志位设定 LCALL RING ;响铃 CLR F0 ;标志位复位 AJMP MAIN NLTZZ: AJMP NLTZ1 ;跳入闹铃调整程序 DSTZ: 电子时钟实验报告 15 AJMP DSTZ1 ;跳入定时调整程序 DATETZ: AJMP DATETZ1 ;跳入日期调整程序 STOPWATCHTZ: AJMP STOPWATCHTZ1 ;跳入秒表程序 B.2.4 显示子程序 8个数码管轮流进行显示,分别显示1ms,依赖人的视觉暂留效应,给人以数码管持续 高亮的错觉。该段程序如下: DISP: ;时间显示子程序 JNB P3.7,OUT

22、1 ;判断节能开关 7是否按下,按下则数码管不显示,延长其寿命 MOV DPTR,#LEDTAB MOV A,SECOND ;显示当前时间秒位 MOV B,#10 DIV AB ;A存十位, B存个位 MOVC A,A+DPTR MOV P1,A CLR SEC_S ACALL D_1MS ;显示当前时间秒十位 SETB SEC_S MOV A,B MOVC A,A+DPTR MOV P1,A CLR SEC_G ACALL D_1MS ;显示当前时间秒个位 SETB SEC_G 电子时钟实验报告 16 MOV A,MINUTE ;显示当前时间分位 MOV B,#10 DIV AB MOVC

23、A,A+DPTR MOV P1,A CLR MIN_S ACALL D_1MS SETB MIN_S MOV A,B MOVC A,A+DPTR MOV P1,A CLR MIN_G ACALL D_1MS SETB MIN_G MOV A,HOUR ;显示当前时间时位 MOV B,#10 DIV AB MOV DPTR,#LEDTAB MOVC A,A+DPTR MOV P1,A CLR HOU_S ACALL D_1MS SETB HOU_S MOV A,B MOVC A,A+DPTR MOV P1,A CLR HOU_G ACALL D_1MS 电子时钟实验报告 17 SETB HOU_

24、G MOV A,WEEK ;显示当前星期数 MOVC A,A+DPTR MOV P1,A CLR Y_S ACALL D_1MS SETB Y_S OUT1: RET 日期的显示,秒表的显示,倒计时的显示,调闹铃,调定时的显示,闪烁的显示程序与 以上的的扫描相似,有的以子程序的方式出现,通过子程序调用语句ACALL 调用;有点直接 嵌套在相应的程序里面,顺序执行,或者用调转语句AJMP 调用。 B.2.5 调整程序 时钟包括很多调整,如时间, 日期, 闹铃, 秒表等, 本程序, 设计了相应的调整程序段, 通过对应的按键, 程序跳入调整模式或功能模式。在此着重分析一下闹铃重响以及定时功能 的实现

25、过程,这两个功能都灵活运用了标志位。 1,定时功能运用了一个内存地址3CH 为标志位,只有3CH 中所存值非 0时,在主程序中 才判断定时是否已到。3CH 值初始化为 0,程序开始运行时并不判断定时是否已到。当通过按 键进入定时初值设置,并开始倒计时,3CH 的值被赋为 1, 当倒计时显示到0时,进入闪烁提示, 提示结束后 3CH 又被赋值为 0,程序回到主程序后, 不必判断定时是否已到。 但当倒计时未完,按返回键回到主程序时,3CH 的值为 1,故在主程序判断未完成的定时 任务,倒计时到0时调用同一个提示程序,最后仍可保证在主程序不再定时开启时去判断定 时,从而节约资源。 电子时钟实验报告

26、18 2,重闹铃的精髓也是标志位的设计,以F0为标志位,其初值为0,正常响铃时判断重 响功能键,若重响功能关闭,则跳过重响设定程序;若重响功能开启,则判断标志位F0,为 了更好的说明,将相关程序截取如下: / 闹铃重响功能是否判断/ JNB P0.6,RERING / 重响定时, / RERING: ;闹铃重响判断程序 JNB F0, RE ;标志位 F0为0,不进行闹铃重响设定 CPL F0 MOV 3CH,#1 ;定时判断标志位赋1, 定时判断功能开 启 JNB P0.7,M1 ;闹铃重响间隔时间选取 MOV R4,#0 ;闹铃重响间隔30秒 MOV R3,#30 AJMP MAIN M1

27、: ;闹铃重响间隔 60秒 MOV R4,#1 MOV R3,#0 AJMP MAIN JB P2.7,GO ;判断暂停键是否按下,未按下则响铃 JNB P0.6,GO1 ; 音乐暂停键,再判断闹铃重响功能是否开启 AJMP END0 GO1: ;闹铃重响功能开启处理程序 JB F0,GO ;重响标志位判断,若F0为 1,表明此次响铃调用为重 闹铃导致 ,进入重闹铃环节;若 F0为0则表示此次闹铃调用为正常闹铃导致,因为重闹铃功能 电子时钟实验报告 19 开启,故将 F0置1,以便重闹铃的实现! CPL F0 AJMP END0 通过以上程序可知,闹铃初次响时,标志位F0总是 0,若重响功能开

28、启,则在初次闹铃 自然结束或人为按键结束后通过CPL F0 语句,使 F0置1,为重响时间间隔的设置提供条件。 当F0值为 1时,才能在闹铃功能关闭的情况下重闹铃,重闹铃不像正常闹铃那样,即使没有 人为关闭,音乐唱完后,自动回到主程序,而是一直再响,若要关闭重闹铃,则拨动重闹铃 开启开关即可。重闹铃结束后回到调用闹铃的位置,用CLR F0 使标志位复位,至此一个重 闹铃循环结束。 又回到初次闹铃前的状态。若要重响开启重闹铃,则需再次开启重闹铃功能。 * JNB P0.6,SHENGYIN2 ;闹铃重响功能开启时,跳入响铃程序 AJMP TISHI ;不是闹铃重响定时,则定时时间到时,跳入提示

29、程序 AJMP MAIN SHENGYIN2: SETB F0 ;闹铃重响标志位设定 LCALL RING ;响铃 CLR F0 ;标志位复位 AJMP MAIN 以上程序段可以区别正常定时和重闹铃定时,通过若重闹铃功能选择键按下,则定时, 时间到通过一直响铃来提示;若重闹铃功能关闭则定时到用闪烁来提示。我们不难发现重闹 铃开关也可作为定时在主程序中判断时,不同提示方式的选择开关,我们不会影响重闹铃标 志位,因为在闹铃子程序调用语句后有F0标志位的清零语句:CLR F0 * 电子时钟实验报告 20 C. 程序调试及仿真 本程序通过 Keil 单片机开发平台实现程序的编译,链接,生成HEX 文件

30、。程序再编译过 程中可以发现错位,并及时改正,在设计时非常重要,使错误被扼杀在摇篮中。 通过 Keil 和硬件仿真平台Proteus 的联合,可以将设计效果仿真出来,根据效果,有目 的的改变设计,优化程序。 c.1 利用Keil 软件实验过程截图: 1,建一个工程,并设定与Proteus 仿真相关的参数 2,汇编程序,并生成HEX 文件 电子时钟实验报告 21 c.2 利用Proteus 仿真实验过程截图: 1. 普通时间显示模式仿真图,表示:星期一 9 点10分38秒 2. 日期调节,显示模式仿真图,表示:2010年7月10日 电子时钟实验报告 22 3. 闹铃调节显示仿真图,表示闹铃时刻为

31、8点整 4. 定时,倒计时显示仿真图,表示此时定时初值已经减到54秒,及还有 54秒定时到。定 时最大值为 59分59秒。 电子时钟实验报告 23 5. 秒表显示仿真图,表示秒表已经从0记到 8.28 秒。秒表可计时到小时,其中小时位数 字可到 99,即最大计时为100小时 D ,电子时钟电路板焊接实现 通过软,硬件设计和仿真, 基本上实现了自己想要的功能,就可以真刀真枪的干一场了。 软件通过调试基本上是没问题的,但是硬件仿真过于泛泛,对电路的细节要求不是那么 高,有些问题是不能发现的,最后的实现效果还是要用实物来验证的。 元器件的购买是个苦活,虽然中发市场那么大,但那些元件才是我要的那个它呢

32、?我们 购买的量少,对于那些元器件厂家来说,根本不屑做我们的生意,根本不用说砍价了。经过 一番“跋涉” ,终于搜刮齐了元器件。 根据以往经验,焊接电路的布线非常重要,首先要在电路板上将线的大致走向规划好, 如何美观,精简是要领。一下是本次试验的硬件电路实现 电子时钟实验报告 24 正面: 反面: 电子时钟实验报告 25 五. 实验总结及感想 一分耕耘,一分收获。只有亲自用实践来验证这句话,在能得其要领。经过这次单片 机课程设计, 我从一个单片机实践的门外汉,已经越升为略知一二的新手。虽然还有很多有 关单片机的应用有待学习,但万变不离其宗,只要深入了解单片的原理,全部知识点,各个 细节,一切设计

33、皆有可能。 在实验的开始几天,基本上没有收获,不知何从下手,不知所措。为了看得更远,不 妨站在前人的肩膀上,我在整体思路模糊的情况下,在网上大量招资粮,各种与电子时钟相 关的文章, 我阅读了不少。 随着涉猎的点滴积累,我对电子时钟的设计方案已经慢慢酝酿而 成。有了方向和不少知识储备后,在接下来的几天,几乎每天都有突破,虽然有时只是一句 程序的修改或诞生,但那种收获的感觉很暖人心。 实验中遇到了不少问题,接下来总结一下,共同探讨。 1,按键问题。我的设计中,很多功能选择是通过按键开关实现的。在仿真中发现,调 整数值时,有时按键反应太快,按一次,跳了几下,使设置时间,日期很不方便。但是仿真 多了之

34、后,找到了按键(实际上是按鼠标)的节奏,对按键的掌控力提高了不少,不怎么会 出现跳变的情况了。有些开关我采用了长按键的方式来防抖,效果不错, 但是每次都要长按 键,调整效率太低,我没有普及。本来想把所有的按键都加延时防抖电路,但仿真中感觉对 键盘的控制力没提高多少,有时还是会出问题,这个方案放弃了。索性将板子焊接出来了在 调试软件吧,仿真毕竟不是那么“真”啊!实际电路调试中,按键反应没有出现过于灵敏的 问题,基本可控制。 出现以上问题,我认为是电路板上焊接点太多,接触不是很好,影响了信号的传输时 间,从而解决了按键问题!也有可能是按键质量问题,接触不良。 2, P0口开关问题。P0口比较特殊,

35、它存在高阻态,要使其输入不是高电平就是低电 平,就要接上拉电阻,给其高电平输入。 3, 音乐闹铃问题。在闹铃时间到,闹铃提醒时,我的数码管为熄灭状态,因为开始 我的响铃程序内,没有数码管扫描显示程序。但加入数码管显示子程序后,我的闹铃音乐被 影响了,一开始不知所措,有点怀疑是显示程序时间过长,影响音乐的定时(节拍),我就 电子时钟实验报告 26 在响铃程序中加延时模块,延时长度逐渐提高,最后出现了类似的问题,看来时显示程序占 用时间太长,使音乐每个音符的节拍出现了紊乱,音乐功能被遏制了!鱼和熊掌不能兼得, 我只能牺牲显示来获得音乐闹铃,但为了弥补显示,我设计了闪烁提醒方案,就是在手动或 音乐自

36、然停止后,进入当前时间闪烁提示,8秒后若不按返回键,则自动跳入主程序。 在仿真中,老师提供的响铃电路不能实现功能,但是在我的电路板中效果很好,令人 费解! 4,中断冲突问题,为了实现秒表,我在T0中断嵌套了秒表相关进位程序,由于秒表要 求精度 0.01 秒,故我的 T0中断定时为就刚好0.01 秒,中断 100次,刚好 1秒。秒表确实实现了, 但是我的闹铃音质变差了。一开始以为是闹铃程序存太多冗余环节,影响了 T1的音乐输出中 断,但是检查程序后,发现没什么多余的,裁剪无从下手。 在仿真中,我让音乐模块运行,发现音质很好。添加T0中断服务程序,但是将中断进 入的间隔变大,即0.05 秒进入一次

37、中断,发现音质有所下降,有滋滋声,但比原来的好。最 后认定应该是 T0中断过于频繁, T1音乐频率发生中断被打破,当单位时间内被打破的次数达 到一定程度时,音符和节拍的对应发生紊乱,最终音质变差。 虽然如此,我的焊接的电路板的表现却很争气,闹铃音质可以接受!虽然这次实际表 现不错,但问题还是有的,还是要解决的,我的方案是把秒表程序放在T1中断服务程序,虽 然音乐的发生要用到T1中断,但是秒表的显示和闹铃音乐的演奏上不会重合在一起,闹铃判 断是在主程序, 而秒表实现是在秒表子程序,故原本相互矛盾的两个功能,在T1中断服务程 序中找到了共同的归宿,和谐相处。 5,显示数字分隔问题。本实验中用 8个

38、共阴极数码管显示日历及其时间,但是 8个数码 管连在一起, 显示过程中不能有效地区分时,分,秒和年, 月,日,数码管是两两组合起来, 形成某位的十位和个位,故用小数点在适当位置一直保持高亮状态,形成分隔符, 实现方便 的读取数据。 具体方法是, 将需要小数点位高亮的数码管找出来,在动态显示扫描到该数码 管时,先将提取的字段码的最高位变为1, 利用语句 ORL A,#10000000B 实现,修正字码后, 再将字码送入 P1口显示数字,如此问题得以解决。 6,添加倒计时器嘀嘀声提示功能。这个功能我用到了T1中断,作为音调频率发生器, 但是 T1已经承担了音乐闹铃的音调发生功能,在此通过设立标志位

39、实现中断服务程序的转 变。即使我将秒表的实现服务程序放入T1中断实现, 也没问题, 只要选择标志位判断就可以 了。在此,我们用调整状态指示灯的状态来做标志位,具体的说是P0.1口做标志位。 还有一个问题就是如何使铃声有间隔的响,这就牵涉到定时,在此我们用硬件定时, 电子时钟实验报告 27 即T1中断的次数作为定时参数。我的设计是音调响0.25 秒,然后用 T1延时 0.5 秒,由于计数 器工作于方式 1时,12MHZ 时钟频率下时, 一次中断最多定时65536*1us=0.065536 秒,为了实 现0.5 秒的响声间隔,将T1中断 1次定时为 0.05 秒,中断 10次后,重新装音调发生计数

40、初值。 对于响铃时间的设定原理类似,可以有发声频率求出一次发声定时中断的时间,N次发声定 时中断后,使时间变化0.25 秒,而后转入发声间隔定时程序。 但是随之又产生了问题,进入 T1中断后到底重装谁的计数初值,是发声中断定时呢,还 是响声间隔定时呢?在此我们用到了标志位F0, 通过对其设置,实现计数初值的准确装入! 设计中, 倒计时到最后10秒时,开始发出 1KHZ 的嘀嘀音, 当倒计时到 0时,开始发出 3KHZ 的嘀嘀音,并数码管闪烁显示四个0,表示倒计时到0分0秒。其实,我们可以设定倒计时最 后10秒时,没减 1秒,提示音响一声,定时到0时,使响音间隔缩短,发出急促的声音,起到 比较合

41、适的提示作用。但仿真中总是不能得到我要的效果,提示CPU 占用过大的警告,系统 已经不工作于实时环境了。仿真怎么也不能发出间隔1秒,或更长的嘀嘀音,本想用自己焊 好的电子时钟实际试验此功能,但是电路板已经上交给老师了,为了验证我的设计理念,看 来只有在开发板中,实物验证了。 在整个电子时钟系统中仿真时,响铃音质不是很好,有杂音, 我认为这是由于更高级的 T0中断打破了 T1中断,这在音乐闹铃中也出现过。比如发出1KHZ 的音调,通过计算公式 1/(1000*2)=0.0005 得出 T1发音中断间隔为0.0005 秒,而 T0计时中断的进入间隔为0.01 秒 (100次T0中断为 1秒) ,

42、可见在发音时, 最多连续正常进入20个发音中断 (0.01/0.0005=20) , 若T0中断的服务时间长于T1发音定时时间长度,则即使通过修正重装计数初值,得到的计数 初值已经溢出,计数初值变更为0,则下一个 T1中断进入的时间为0.065536 秒,而我们要求 的T1中断间隔时间为0.0005 秒,显然生成的方波的占空比出现紊乱,音质出现问题。 我查看 了我的 T0中断服务指令有近200行,由于 MCS-51 单片机的指令周期一般为1-2 个机器周期, 在 本系统中, 用12M 的时钟, 每个机器周期为(1/12000000)*12=1us,则T0中断服务占用时间至 多为 400us,

43、可见中断服务程序执行用时没有超过0.0005 秒,可见通过修正重装计数初值后, 下次进入中断时, 方波电平的反转不会出现问题。但是如果同一时刻两计数器都达到溢出时, 优先执行 T0中断,此时本应电平反转的方波仍保持此刻电平状态,直到 T0中断服务程序结束 才反转电平,可知方波的占空比发生突变,影响音质。 在整个系统的仿真中,嘀嘀声提示音只是偶尔比较靠谱的出现一次,但嘀嘀声的间隔及 音调发生的频率不正常,通常结果是发出沉闷的噗噗声,发声频率勉强分辨,发声间隔不能 仿真实现, 似乎是一定的。 如果我只将嘀嘀声提示子程序作为主程序单独运行,则能清晰地 电子时钟实验报告 28 分辨高, 低音频, 以及

44、实现响音的间隔,但是若提高响音的间隔,运行的结果没有什么变化, 响音间隔没多大变化。对于嘀嘀声提示子程序的仿真文件,我将和电子时钟整个系统的仿真 文件一并提交。 我认为有些细节是仿真软件不能模拟的,必须要通过开发板的实际操作得以验证,PC 机的资源有限,运行速度和性能的差异也有可能产生仿真的不同结果。 以下为具体实现程序段: TIMER1: ;计数器 T1中断服务程序 JB P0.1,OO ;判断中断服务的种类 MOV A,56H ;此标志位决定倒计时最后10秒和 定时到时发出不同频率的声音 CJNE A,#0,PP JNB F0,III DJNZ 55H,OOT CPL F0 III: DJ

45、NZ 50H,EE ;定时前十秒嘀嘀声提醒 MOV 50H,#100 DJNZ 51H,EE MOV 51H,#10 MOV TH1,#3CH MOV TL1,#0B0H MOV 55H,#10 CPL F0 AJMP OT OOT:MOV TH1,#3CH MOV TL1,#0B0H AJMP OT EE:MOV TH1,#0FEH MOV TL1,#0CH CPL P2.6 电子时钟实验报告 29 AJMP OT PP: JNB F0,II DJNZ 54H,OOT1 CPL F0 II:DJNZ 52H,FF ;定时到嘀嘀声提示 MOV 52H,#150 DJNZ 53H,FF MOV

46、53H,#10 MOV TH1,#3CH MOV TL1,#0B0H MOV 54H,#10 CPL F0 AJMP OT OOT1: MOV TH1,#3CH MOV TL1,#0B0H AJMP OT FF:MOV TH1,#0FFH MOV TL1,#5AH CPL P2.6 AJMP OT OO: ;音乐闹铃服务程序 MOV TH1,21H ;定时器 T1置初值 MOV TL1,20H CPL P2.6 ;音符对应频率产生 电子时钟实验报告 30 OT:RETI 以上就是实验中遇到的主要问题,基本上都找到了相应的解决之道。整个实验的过程 就是一个解决问题的过程,每天都解决一些问题,我的实验也就解决了,当然结果不重要, 功利化的追求结果,会使人浮躁,还是享受那份疑难迎刃而解的快感吧! 附件: A.Proteus 电路图 电子时钟实验报告 31

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1