单片机课设--电子时钟
单片机应用课程设计 ——电子时钟 姓名:邢昊 学号:12211016 班级:通信1201 指导老师:周永华 1 / 29
单片机课设--电子时钟
目录
一、实验目的 ................................................ 3
二、设计任务及要求 .................................... 3
三、软件设计思路 ........................................ 3
四、设计分析 ................................................ 4
五、源程序代码及注释 .............................. 10
六、课程设计体会 ...................................... 28
2 / 29
单片机课设--电子时钟
一、实验目的
通过电子时钟综合设计,使学生学会利用 8051 定时器时间计时处理功能,了解按键 扫描及控制 LED 数码管显示原理,掌握单片机和按键以及 LED 数码管硬件电路设计及控制 程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高学生解 决实际问题的能力。
二、设计任务及要求
利用实验板上4个LED数码管,设计带有闹铃功能的数字时钟,要求:
1、在4位数码管上显示当前时间。显示格式“时时分分”;2、由LED闪动做秒显示;
3、利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。
4、使数字时钟的闹钟铃声为音乐。
三、软件设计思路
计时功能利用单片机的定时器来完成,由于定时器定时的时长有限,所以要利用中断程序才能定时1秒,若中断程序每隔5ms中断一次并当作一个计数,则每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断1min是否到了,再判断1h是否到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。
3 / 29
单片机课设--电子时钟
闹铃声由交流蜂鸣器产生,所以当闹铃时间和当前时间相等时,可以对蜂鸣器输入方波信号,蜂鸣器就会发出声音。
四、设计分析
本实验实际是设计一个电子表,可以显示时和分,并且用一个二极管显示秒。另外,还可以对它进行时间调整,还要有闹铃功能。
时钟电路在各个系统中都起着十分重要的作用,是保证系统正常工作的基础。同时时钟电路整体的设计及其工作原理涉及到了单片机基础课程中各章节的内容,是对单片机理论基础课程的一个综合实践,通过本课题不仅让我对电子时钟这一课题有更深入的了解,更加深了自己对单片机课程整体知识的把握,将理论所学用于实践,将知识综合,达到融会贯通的高度。
实验用JD51开发板完成,本实验的硬件包括显示部分、闹铃部分、开关部分。
原理图
JD51上用于显示部分的电路如下图:
4 / 29
单片机课设--电子时钟
JD51上有四位共阳LED数码管,其标号分别为LED1—LED4,低电平选通,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作。虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。P0口作为输出口控制8个发光二极管的亮灭,控制数码管的显示。
·蜂鸣器
蜂鸣器与P2.4口相连。
5 / 29
单片机课设--电子时钟 ·开关
本实验中的开关是实验仪上的四个逻辑开关,它们分别与P3.2、P3.3、P3.4、P3.5相连。其总P3.2用于调整时钟或闹钟的时,P3.3用于调整时钟或闹钟的分,P3.5用于控制显示时钟还是显示闹钟,并且同时控制调整时钟还是调整闹钟,按任意键(SW1、SW2、SW4)时停止闹钟。
【软件设计流程及描述】
·显示部分
显示部分分为时钟显示、闹钟显示和秒显示三部分,主要由时钟显示子程序和闹钟显示子程序构成,闹钟显示与时钟显示编程流程大致相同。
流程图如下:
6 / 29
单片机课设--电子时钟
·闹铃部分
设计思路及原理:音节由不同频率的方波产生,音节与频率的关系如下表所示。要产生音频方波,设计利用延时来建立音符表NOTE,表格中的数存R3*20us,其倒数1/(R3*2*10us)对应相应音符的频率。
另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。设计利用T1中断产生10ms延时,取1/4拍为10H*10ms,相应产生所需延时。
7 / 29
单片机课设--电子时钟 闹钟铃声相应的音符和节拍表NOTE和METRE如下:
NOTE: DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,72H
DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,98H,72H,7FH DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,72H
DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,72H,4CH,55H,00H
METRE: DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H
DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H,80H
DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H,40H
·开关扫描及处理部分
本实验用到了三个开关,其中涉及开关的扫描及处理。
8 / 29
单片机课设--电子时钟
开关4控制数码管当前显示的是时钟还是闹钟;
显示时钟时,可通过开关1和开关2调整时钟的时和分;
显示闹钟时,也可以通过开关1和开关2调整时和分。
开关4控制闹铃的开和关。
按键调整闹钟与按键调整时钟编程流程基本一致,按键扫描及处理流程图如图:
·T0中断服务程序:
采用定时器T0计时,中断程序每隔50ms中断一次计数加1,当计数20次时,则表示1s到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否24小时到了。
程序流程图如下:
9 / 29
单片机课设--电子时钟
;****************************************************
;/******电子时钟程序******/
;程序主要包括MAIN函数,T0、T1中断程序,时间、闹钟显示程序 ,按键扫描、处理程序
;****************************************************
ORG 0000H
AJMP MAIN ;跳转到主程序MAIN执行 ORG 000BH AJMP INTT0 ;跳到INTT0执行 10 / 29
单片机课设--电子时钟
ORG 001BH LJMP INTT1 ;跳到INTT1执行 ORG 0300H
;/******主函数******/预置T0\T1工作方式,置初值,预置时钟、闹钟,置位数码管
MAIN:MOV SP,#80H
MOV TMOD,#11H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV R1,#00H
MOV 20H,#00H
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV 30H,#30H
MOV 31H,#08H
SETB P2.0
;设置定时器T0、T1工作于方式1 ;装入时钟定时初值(50ms) ;装入闹铃定时初值(10ms) ;确保首次默认闹铃工作 ;预置时钟分分 ;预置时钟时时 预置闹铃分分 ;预置闹铃时时 ;数码管接P2口,置位数码管,使其全灭 11 / 29 ;
单片机课设--电子时钟
SETB P2.1 SETB P2.2 SETB P2.3 CLR P1.7 ;发光二极管LED7\LED8用于显示秒,清P1.7,发光二极管LED8亮
LOOP:LCALL DISPT
LCALL RING LCALL KEY ;调用时间显示子程序 SETB P1.6 ;置位P1.6,发光二极管LED7灭 SETB EA ;开放总中断 SETB ET0 ;允许T0中断 SETB TR0 ;开启定时器T0 ;调用闹铃处理子程序 ;调用按键扫描子程序 JZ LOOP ;无键按下则循环 LCALL CASE SJMP LOOP ;有键按下则转按键处理子程序执行 ;循环
;/******T0一秒定时中断程序INTT0******/正常时钟计时
INTT0:PUSH PSW ;状态字入栈保护
PUSH ACC ;累加器入栈保护
MOV TL0,#0B0H ;装入计数初值,12MHZ晶振,形成1S中断 MOV TH0,#3CH INC 20H
12 / 29
单片机课设--电子时钟
MOV A,20H CJNE A,#20,RETURN CPL P1.7 ;一秒到发光二极管轮流亮,用于显示秒
CPL P1.6
MOV 20H,#00H
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETURN
MOV 21H,#00H
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETURN
MOV 22H,#00H
MOV A,23H
ADD A,#01H ;一秒到清20H ;一分到,21H单元清零 ;一小时到,22H单元清零
13 / 29
单片机课设--电子时钟
DA A MOV 23H,A CJNE A,#24H,RETURN MOV 23H,#00H ;满24,23H单元清零
RETURN: POP ACC
POP PSW
RETI
;/******时间显示子程序******/
DISPT: MOV A,22H
ANL A,#0FH
MOV 2AH,A
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2BH,A
MOV A,23H
ANL A,#0FH
MOV 2CH,A
MOV A,23H
ANL A,#0F0H
;时钟分的低位 ;时钟分的高位 ;时钟时的低位 14 / 29
单片机课设--电子时钟
SWAP A MOV 2DH,A ;时钟时的高位
LED1: SETB P2.3
MOV A,2DH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A
LCALL DELAY
LED2: SETB P2.0
MOV A,2CH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
LCALL DELAY
LED3: SETB P2.1
MOV A,2BH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.2
选通数码管1 ;显示时钟时的十位部分 ;选通数码管2 ;显示时钟时的个位部分 ;选通数码管3 15 / 29 ;
单片机课设--电子时钟
MOV P0,A ;显示时钟分的十位部分 LCALL DELAY
LED4: SETB P2.2
MOV A,2AH
JB P1.7,TA2
TA1: ADD A,#10 ;用于利用数码管的小数点来表示秒 TA2: MOV DPTR,#TAB
MOVC A,@A+DPTR
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳数码管的不带小数点的时间显示码
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H;共阳数码管的带小数点的时间显示码
;/******按键扫描程序******/ 开关接P3口,判断按键情况
KEY: MOV P3,#0FFH
MOV A,P3 CPL A
16 / 29
CLR P2.3 ;选通数码管4 MOV P0,A ;显示时钟分的个位部分 LCALL DELAY RET
单片机课设--电子时钟
ANL A,#2CH JZ RETK ;无键按下则返回 ;延时消抖 LCALL DELAY MOV A,P3 CPL A ANL A,#2CH JZ RETK MOV R6,A ;键盘去抖动 ;将键值存入R6
LOOP1:
LCALL DISPT; MOV A,P3 CPL A ANL A,#2CH JNZ LOOP1 MOV A,R6 ;等待键释放
RETK: RET
;/******按键处理子程序******/根据按键情况进行处理
CASE: MOV A,R6
CLR P1.0 ;发光二极管LED1亮 JB ACC.2,SETH JB ACC.3,SETM JB ACC.5,SETR ;转调整时 ;转调整分 ;转闹铃设置
17 / 29
单片机课设--电子时钟
WAITCASE:LCALL DISPT ;无键按下时等待
LCALL KEY JZ WAITCASE
;/******时间调整程序******/ 按键调整时间
SETT: LCALL DISPT
LCALL KEY JZ SETT MOV A,R6 JB ACC.2,SETH JB ACC.3,SETM JB ACC.5,KEYGO ;第二次按为确认离开
KEYGO: SETB P1.0 ;发光二极管LED1、LED2灭
SETH: MOV A,23H
ADD A,#01H DA A ;十进制调整 MOV 23H,A CJNE A,#24H,HD ;判断是否到24,不到继续 MOV 23H,#00H ;到24时清零
18 / 29
SETB P1.1 RET ;调整时钟时,时加1
单片机课设--电子时钟 HD: LJMP SETT
SETM: MOV A,22H ;分加1
ADD A,#01H DA A ;十进制调整 MOV 22H,A CJNE A,#60H,MD ;判断是否到1小时,不到继续 MOV 22H,#00H ;到1小时则清零
LJMP SETT MD:
;/******闹铃时间调整按键扫描及处理子程序******/
KEYR:
19 / 29
MOV P3,#0FFH MOV A,P3 CPL A ANL A,#2CH JZ RETK ;无键按下则返回 ;延时消抖 LCALL DISPR MOV A,P3 CPL A ANL A,#2CH JZ RETK MOV R6,A LJMP LOOPR ;键盘去抖动 ;将键值存入R6
单片机课设--电子时钟 LOOPR:
LCALL DISPR MOV A,P3 CPL A ANL A,#2CH JNZ LOOPR ;等待键释放
MOV A,R6
AJMP RETK
;/******设置闹铃时间******/
SETR: SETB P1.0
CLR P1.1
LCALL DISPR
MOV R1,#00H
与否
MOV 53H,#03H
LCALL KEYR
JZ SETR
MOV A,R6
JB ACC.2,SETRH
JB ACC.3,SETRM
JB ACC.5,KEYGO
;发光二极管LED1灭 ;发光二极管LED2亮,改显示状态 ;设置闹钟时重设R1,用于检测闹铃播放 ;重设闹铃次数 ;闹铃时间调整按键检测 ;第二次按为确认离开 20 / 29
单片机课设--电子时钟 SETRH:
MOV A,31H ;闹钟时加1 ADD A,#01H DA A ;十进制调整 MOV 31H,A CJNE A,#24H,RHD ;判断是否到24,不到继续
MOV 31H,#00H
RHD: LJMP SETR
SETRM: MOV A,30H
ADD A,#01H
DA A
MOV 30H,A
CJNE A,#60H,RMD
MOV 30H,#00H
RMD: LJMP SETR
;/******闹钟设置显示子程序******/
DISPR: MOV A,30H
ANL A,#0FH
MOV 3AH,A
MOV A,30H
ANL A,#0F0H
SWAP A
;到24时则清零 ;闹钟分加1 十进制调整 ;判断是否到1小时,不到继续 ;到1小时则清零 ;屏蔽高四位 ;保留低位送3AH ;屏蔽低四位 ;高四位与第四位交换 21 / 29 ;
单片机课设--电子时钟
MOV 3BH,A ;将保留的高4位送3BH MOV A,31H ANL A,#0FH
;低位 MOV 3CH,A
MOV A,31H
ANL A,#0F0H
SWAP A
MOV 3DH,A
LEDR1: SETB P2.3
MOV A,3DH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A
LCALL DELAY
LEDR2: SETB P2.0
MOV A,3CH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.1
;高位 22 / 29
单片机课设--电子时钟 MOV P0,A
LCALL DELAY
LEDR3: SETB P2.1
MOV A,3BH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY
LEDR4: SETB P2.2
MOV A,3AH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.3
MOV P0,A
LCALL DELAY
RET
;/******延时子程序******/
DELAY: MOV R5,#2
D1: MOV R4,#250
D2: DJNZ R4,D2
DJNZ R5,D1
23 / 29
单片机课设--电子时钟 RET
;/******闹铃检测程序******/
RING: MOV A,23H ;比较时
CJNE A,31H,RETR MOV A,22H ;比较分
CJNE A,30H,RETR
LCALL SING
RETR: RET
;/******定时器T1中断子程序******/
INTT1: PUSH PSW
PUSH ACC
INC 50H
MOV TH1,#0D8H
10MS中断
MOV TL1,#0F0H
POP ACC
POP PSW
RETI
;/******响铃子程序******/
SING: CJNE R1,#01H,SING1
LJMP RETS
;状态字入栈保护 ;累加器入栈保护 ;中断服务程序,中断计数器加1 ;装入计数初值,12M晶振,形成 ;判断是否已经闹铃过一次 24 / 29
单片机课设--电子时钟
SING1: SETB ET1
MOV 50H,#00H
MOV 51H,#00H
;中断计数器清0 ;音符指针 MOV 52H,#00H ;节拍码指针
MOV 53H,#03H
GETNOT: MOV A,51H
MOV DPTR,#NOTE
MOVC A,@A+DPTR
JZ ENDP
MOV R6,A
INC 51H
CJNE A,#0FFH,GETMET
LJMP PAUSE
LJMP GETNOT
GETMET: MOV A,52H
MOV DPTR,#METRE
MOVC A,@A+DPTR
MOV R7,A
INC 52H
;设置闹钟不退出响铃次数 ;表头地址送DPTR ;查表取音符码 ;是00H,则结束 ;存R6 ;不为0FFH,转取节拍码 ;转休止播放 ;取音符码 ;取节拍码首地址 ;取节拍代码送R7 25 / 29
单片机课设--电子时钟
PLAY: SETB TR1
CPL P2.4
LCALL KEY
JNZ RETS
MOV A,R6
MOV R3,A
LCALL DELAY1
MOV A,R7
CJNE A,50H,PLAY
续循环
MOV 50H,#00H
LCALL DISPT
LCALL DISPT
LCALL DISPT
LCALL DISPT
CLR TR1
LJMP GETNOT
RETS: SETB P2.4
MOV R1,#01H
CLR A
;启动计数 ;音符码存R3 ;取节拍码放A与中断计数比较 ;断计数器(50H)=R7否,不等继 ;等于,则取下一代码 ;置位蜂鸣器,否则可能产生啸叫 ;表明播放过一次 ;清除A,防止进入按键处理子程序 26 / 29
单片机课设--电子时钟
LJMP RETR
CLR TR1 ;休止100毫秒 PAUSE:
MOV R2,#0DH
DELAY2: MOV R3,#0FFH
LCALL DELAY1
DJNZ R2,DELAY2
RET
ENDP: SETB P2.4
MOV R2,#0C7H
END1M: MOV R3,#00H
LCALL DELAY1
DJNZ R2,END1M
DJNZ 53H,SING
RET
DELAY1: NOP
DELAY3: MOV R4,#02H
DELAY4: DJNZ R4,DELAY4
DJNZ R3,DELAY3
;歌曲结束,延时1秒后继续 ;R3为01H时,DELAY延时为20uS 27 / 29
单片机课设--电子时钟 RET
NOTE: DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,72H
DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,98H,72H,7FH DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,72H
DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,72H,4CH,55H,00H
DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H METRE:
DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H,80H
DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H,40H END
六、课程设计体会
由于大创实验的火热,学校让我们在大二就开始学习单片机,这对于我们来说既有好处也有难处。我们可以更早的接触单片机,便于后续的学习开展,同时,也在繁忙的课业中加了点难度。
初次接触单片机,我觉得还是有点难以上手的。通过之前的理论课,我觉得突然实操的难度很大。我借助网络资源,和同学讨论,逐步完成的板子以及程序。刚开始的编程没有思路,无从下手。通过从网上查阅资料,仿照着才能慢慢走下来。同时借助老师发的课程资料和ppt也解决了我不少问题。整个课程设计过程
28 / 29
单片机课设--电子时钟 学到了不少通过理论学习没法学到的东西,真正增加了自己的一种能力。
借助这次机会,我觉得我更进一步的了解了单片机,也对它产生了更浓厚的兴趣。
29 / 29
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
单片机电子时钟的设计目录1引言12设计任务与要求221设计题目222设计要求23系统的功能分析与设计方案331系统的主要功能332…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
单片机课程设计:电子钟一、实现功能1、能够实现准确计时,以数字形式显示时、分、秒的时间。2、小时以24小时计时形式,分秒计时为60…
目录一、引言二、设计课题三、系统总体方案四、系统硬件设计1.硬件电路原理图2.元件清单五、系统软件设计1.软件流程图2.程序清单六…
课程设计心得课设的选题,方案的设计与确定,元器件的选择,硬件的焊接,这一系列的课设准备工作早在课设开始之前,老师就向我们做了相关的…
单片机课程设计心得体会这个学期的单片机课已经早早的上完了但是理论纯属理论没有与实践的结合总让我们学的不踏实感觉没有达到学以致用的效…
本科课程设计(论文)单片机控制流水灯的正常工作及外部中断控制灯的亮灭学院名称:汽车与交通工程学院专业:汽车服务工程班级:13汽服B…
单片机接口技术与实验课程总结现代数字系统设计课程总结姓名学号年级专业20xx年秋季学期每个实验都应该包含以下内容实验一三号字宋体居…
课程设计体会作为一名自动化专业的大三学生我觉得做单片机课程设计是十分有意义的而且是十分必要的在已度过的大学时间里我们大多数接触的是…