数字时钟设计(含完整程序)

上传人:tian****1990 文档编号:71784143 上传时间:2019-01-21 格式:DOC 页数:14 大小:149.05KB
返回 下载 相关 举报
数字时钟设计(含完整程序)_第1页
第1页 / 共14页
数字时钟设计(含完整程序)_第2页
第2页 / 共14页
数字时钟设计(含完整程序)_第3页
第3页 / 共14页
数字时钟设计(含完整程序)_第4页
第4页 / 共14页
数字时钟设计(含完整程序)_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《数字时钟设计(含完整程序)》由会员分享,可在线阅读,更多相关《数字时钟设计(含完整程序)(14页珍藏版)》请在金锄头文库上搜索。

1、 电子时钟设计 一、 实验目的 学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。 二、 设计任务及要求 利用实验平台上4个LED数码管, 设计带有闹铃功能的数字时钟,要求: 1 在4位数码管上显示当前时间,显示格式为“时时分分” ; 2 由LED闪动做秒显示; 3 利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。 三、 工作原理及设计思路 利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,

2、再判断是否1h到了。为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。 闹铃声由交流蜂鸣器产生,电路如右图,当P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。 四、硬件电路设计及描述 由于扩展了外部存储器, P0口只能作地址/数据总线,P2口只能作地址总线高8位,P3.7、P3.6作为外部数据存储器读写信号。P3.0、P3.1作为串行输入、输出接口,在仿真模式下完成与PC机的通信,故也不可用。 实验仪上单片机可用作I/O的口仅有:P1.0-P1.7 ,8位;P3.2、P3.3、P3.4、P3.5 ,4位。

3、其中:P1.0 用作数据线SDA,P1.1用作时钟信号CLK,所以P1.0和P1.1应该接对应跳线的A位,即跳线的中间和下面相连。P1.3、P1.4、P1.5和P1.6是四个数码管的位扫描线,其中P1.6对应数码管W1,显示小时高位;P1.5对应数码管W2,显示小时低位;P1.4对应数码管W3,显示分钟高位;P1.3对应数码管W4,显示分钟低位。P1.7连接蜂鸣器电路,输出不同频率的方波,使其发出不同的声音。P1.2 用来控制秒的闪烁显示。故,P1.2也应该接对应跳线的A位。 其显示电路如下图: P3.2、P3.3、P3.4、P3.5分别连接单刀双掷开关S1、S2、S3、S4,从而输入高低电平

4、。将S2 S1 定义为功能模式选择开关;S3 定义为分钟数调整开关;S4 定义为小时数调整开关。 当S2 S1=00时,显示当前时间,不进行任何操作。 当S2 S1=01时, 显示当前时间,同时可进行时钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。 当S2 S1=10时,显示闹钟时间,同时可进行闹钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。 当S2 S1=11 时,显示当前时间,同时关闭闹钟。 音节由不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周

5、期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍, 每个音节相应的定时器初值X可按下法计算: (1/2)*(1/f)=(12/fose)*(216-x) 即 x=216-(fose/24f) 其中f:

6、音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H 其它的可同样求得。在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。 通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数

7、据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。 五、软件设计流程及描述 开始 中断返回 秒数满60? 5ms中断次数满200? 5ms中断次数加1 分钟数清零,小时数加1 秒数清零,分钟数加1 小时数清零 5ms中断次数清零,秒数加1,LED闪动一下 分钟数满60? 小时数满24? 时钟走时中断服务程序 六、源程序代码及注释

8、注:首先将单片机用到的主要寄存器做下说明(如下); P1.2 作秒的闪烁控制位; P1.7 作响铃控制电平; P3.2 、P3.3 作模式选择键S2、S1; P3.4 作分调整键S3(分钟数+1); P3.5 作时调整键S4(小时数+1); R0为计数5ms的次数;R1为秒数;R2为分钟数;R3为时钟数; R4 在显示程序中作为向LED传递数据时的左移次数标志位; R4 在音乐闹铃程序中读取TABLE中的数据; R5作为节拍长度; 40H 作显示的分;41H 作显示的时;42H 作闹钟的分;43H 作闹钟的时; 63H、64H 存放延时程序DELAY的延时数; 60H、61H 作定时器T1的初

9、值。 ;* 主程序 * S1 BIT P3.2 ;定义模式选择键S2、S1 S2 BIT P3.3 S3 BIT P3.4 ;定义时调整键S4,分调整键S3 S4 BIT P3.5 SDA BIT P1.0 CLK BIT P1.1 ORG 0000H AJMP MAIN ORG 000BH ;T0的中断服务程序的入口地址 AJMP TIMER ;跳转到时钟走时中断服务程序 ORG 001BH ;T1的中断服务程序的入口地址 AJMP ALARM_OPEN ;跳转到闹钟响铃中断服务程序 ORG 0030H MAIN: MOV 40H,#00 ;显示的分 MOV 41H,#00 ;显示的时 MO

10、V 42H,#58 ;闹钟的分 MOV 43H,#23 ;闹钟的时 MOV R0,#00H ;寄存器清零(RO为计数5ms的次数,R1为秒数, MOV R1,#00H ;R2为分钟数,R3为时钟数) MOV R2,#00H MOV R3,#00H MOV TMOD,#11H ;设置T0,T1处于工作方式1 MOV TH0,#0EEH ;设置定时器的初值 MOV TL0,#00H SETB EA ;允许总中断 SETB ET0 ;允许T0,T1中断 SETB ET1 SETB TR0 ;启动T0 LOOP: LCALL DISPLAY1 ;调用显示程序 LCALL ALARM ;调用闹铃程序 L

11、CALL MODE ;调用模式判断程序 AJMP LOOP ;* 时钟显示部分 * DISPLAY1: MOV DPTR,#TAB1 MOV A,41H MOV B,#10 DIV AB LCALL DISP1 CLR P1.6 ;LED1数码管显示数码,即小时的高位 LCALL DELAY SETB P1.6 JB P1.2,TD ;控制LED2数码管的小数点“dp“闪烁 AJMP TD1 TD: MOV A,B AJMP TD2 TD1: MOV A,B ADD A,#10 TD2: LCALL DISP1 ;LED2数码管显示数码,即小时的低位 CLR P1.5 LCALL DELAY

12、SETB P1.5 MOV A,40H MOV B,#10 DIV AB LCALL DISP1 CLR P1.4 ;LED3数码管显示数码,即分钟的高位 LCALL DELAY SETB P1.4 MOV A,B LCALL DISP1 CLR P1.3 ;LED4数码管显示数码,即分钟的低位 LCALL DELAY SETB P1.3 RET DISP1: MOVC A,A+DPTR ;LED串并转换口从P1.0接收 一个8位数码管显示字形数据 MOV R4,#08H ;R4记作左循环的次数 DUP1: RLC A ;A带进位左循环移位 MOV SDA,C CLR CLK ;上升沿触发数据

13、接收 SETB CLK DJNZ R4,DUP1 RET ;* 闹钟显示部分 * DISPLAY2: MOV DPTR,#TAB1 MOV A,43H MOV B,#10 DIV AB LCALL DISP2 CLR P1.6 ;LED1数码管显示数码,即小时的高位 LCALL DELAY SETB P1.6 MOV A,B LCALL DISP2 CLR P1.5 ;LED2数码管显示数码,即小时的低位 LCALL DELAY SETB P1.5 MOV A,42H MOV B,#10 DIV AB LCALL DISP2 CLR P1.4 ;LED3数码管显示数码,即分钟的高位 LCALL

14、 DELAY SETB P1.4 MOV A,B LCALL DISP2 CLR P1.3 ;LED4数码管显示数码,即分钟的低位 LCALL DELAY SETB P1.3 RET DISP2: MOVC A,A+DPTR ;LED串并转换口从P1.0接收 一个8位数码管显示字形数据 MOV R4,#08H ;R4记作左循环的次数 DUP2: RLC A ;A带进位左循环移位 MOV SDA,C CLR CLK ;上升沿触发数据接收 SETB CLK DJNZ R4,DUP2 RET ;* 判断闹钟时间是否到来 * ALARM: MOV A,40H CJNE A,#00H,MUSIC ;整点

15、闹铃 LJMP B2 MUSIC: MOV A,43H CJNE A,41H,B1 MOV A,42H CJNE A,40H,B1 ;音乐闹铃 SETB P1.7 MOV 70H,#00H NEXT: MOV A,70H MOV DPTR,#TABLE ;从TABLE中读取数据声响时间 MOVC A,A+DPTR MOV R4,A ;将TABLE中读取的数据存放在R4 JZ END0 ANL A,#0FH MOV R5,A ;R5作为节拍长度 MOV A,R4 SWAP A ANL A,#0FH JNZ SING CLR TR1 JMP D1 SING: DEC A MOV 62H,A RL A MOV DPTR,#TABLE1 ;从TABLE1中读取数据声调 MOVC A,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号