单片机课程 电子时钟设计报告
姓名:魏宏波 学号:14221019 指导老师:黄赞武2016.04.27
一. 设计的任务及要求:
利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟。
任务:
通过电子时钟综合设计,学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制LED数码管显示原理,掌握单片机和按键以及LED数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高解决实际问题的能力。
要求:
1.在 4 位数码管上显示当前时间。显示格式“时时分分”。
2.由 LED 闪动做秒显示。
3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。
二. 工作原理:
LED数码管:
蜂鸣器:
按键:
三. 软件设计流程及描述:
总设计框图:
显示部分:
显示部分分为时钟显示、闹钟显示和秒显示三部分,主要由时钟显示子程序和闹钟显示子程序构成,秒显示较为简单。闹钟显示与时钟显示编程流程大致相同。
流程图如下:
按键扫描及处理框图:
闹铃部分:
设计思路及原理:音节由不同频率的方波产生,音节与频率的关系如下表所示。要产生音频方波,设计利用延时来建立音符表NOTE,表格中的数存R3*20us,其倒数1/(R3*2*10us)对应相应音符的频率。
另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。设计利用T1中断产生10ms延时,取1/4拍为
NOTE: DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60H
DB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50H
METRE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H,20H,20H,20H,20H,20H
四. 源程序及代码:
;程序主要包括MAIN函数,T0/T1中断程序,时间、闹钟显示程序,按键扫描、处理程序
;/主函数/预置T0\T1工作方式,置初值,预置时钟、闹钟,置位数码管 ORG 0000H AJMP MAIN ;跳转到主程序MAIN执行 ORG 000BH AJMP INTT0 ;跳到INTT0执行 ORG 001BH LJMP INTT1 ;跳到INTT1执行 ORG 02B0H
MAIN:MOV SP,#80H MOV TMOD,#11H ;设置定时器T0、T1工作于方式1 MOV TH0,#0ECH ;装入时钟定时初值(5ms) MOV TL0,#78H MOV TH1,#0D8H ;装入闹铃定时初值(10ms) MOV TL1,#0F0H MOV R1,#00H ;确保首次默认闹铃工作 MOV 22H,#00H ;预置时钟分钟 MOV 23H,#00H ;预置时钟小时
SETB P1.7 ;LED7显示秒;置位P1.7,发光二极管LED8灭 SETB EA ;开放总中断
SETB ET0 ;允许T0中断
SETB TR0 ;开启定时器T0
LOOP:LCALL DISPT ;调用时间显示子程序
LCALL RING ;调用闹铃处理子程序
LCALL KEY ;调用按键扫描子程序
JZ LOOP ;无键按下则循环
LCALL CASE ;有键按下则转按键处理子程序执行 SJMP LOOP ;返回循环
;/ T0一秒定时中断程序INTT0/正常时钟计时
INTT0:PUSH PSW ;状态字入栈保护
PUSH ACC ;累加器入栈保护
MOV TH0,#0ECH ;装入计数初值,12MHZ晶振,形成1S中断 MOV TL0,#78H
INC 20H
MOV A,20H
CJNE A,#200,RETURN
CPL P1.67 ;一秒到LED8亮,用于显示秒
MOV 20H,#00 ;一秒到清20H
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETURN
MOV 21H,#00 ;一分到,21H单元清零
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETURN
MOV 22H,#00 ;一小时到,22H单元清零
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETURN MOV 30H,#03H MOV 31H,#00H ;预置闹铃分钟 ;预置闹铃小时
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
SWAP A
MOV 2DH,A ;时钟时的高位
LED1: SETB P2.3
MOV A,2DH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.0 ;选通数码管1
MOV P0,A ;显示时钟时的十位部分 LCALL DELAY
LED2: SETB P2.0
MOV A,2CH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.1 ;选通数码管2
MOV P0,A ;显示时钟时的个位部分 LCALL DELAY
LED3: SETB P2.1
MOV A,2BH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.2 ;选通数码管3
MOV P0,A ;显示时钟分的十位部分
LCALL DELAY
LED4: SETB P2.2
MOV A,2AH
JB P1.6,TA
TA: MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.3 ;选通数码管4
MOV P0,A ;显示时钟分的个位部分
LCALL DELAY
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳数码管的时间显示码
;/按键扫描程序/ 开关接P3口,判断按键情况
KEY: MOV P3,#0FFH
MOV A,P3
CPL A
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 ;转闹铃设置
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灭 SETB P1.1
RET
SETH: MOV A,23H ;调整时钟时,时加1 ADD A,#01H
DA A ;十进制调整
MOV 23H,A
CJNE A,#24H,HD ;判断是否到24,不到继续 MOV 23H,#00H ;到24时清零
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小时则清零
MD: LJMP SETT
;/闹铃时间调整按键扫描及处理子程序/
KEYR: 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 ;将键值存入R6
LJMP LOOPR
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
SETRH: MOV A,31H ADD A,#01H
DA A MOV 31H,A
CJNE A,#24H,RHD 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 MOV 3BH,A
MOV A,31H ANL A,#0FH ;等待键释放 ;发光二极管LED1灭 ;发光二极管LED2亮,改显示状态 ;设置闹钟时重设R1,用于检测闹铃播放与否;重设闹铃次数 ;闹铃时间调整按键检测 ;第二次按为确认离开 ;闹钟时加1 ;十进制调整 ;判断是否到24,不到继续 ;到24时则清零 ;闹钟分加1 ;十进制调整 ;判断是否到1小时,不到继续 ;到1小时则清零 ;屏蔽高四位 ;保留低位送3AH ;屏蔽低四位 ;高四位与第四位交换 ;将保留的高4位送3BH
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
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
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 ;中断服务程序,中断计数器加1
MOV TH1,#0D8H ;装入计数初值,12M晶振,形成10MS中断 MOV TL1,#0F0H
POP ACC
POP PSW
RETI
;/响铃子程序/
SING: CJNE R1,#01H,SING1 ;判断是否已经闹铃过一次
LJMP RETS
SING1: SETB ET1
MOV 50H,#00H ;中断计数器清0
MOV 51H,#00H ;音符指针
MOV 52H,#00H ;节拍码指针
MOV 53H,#03H ;设置闹钟不退出响铃次数
GETNOT: MOV A,51H
MOV DPTR,#NOTE ;表头地址送DPTR
MOVC A,@A+DPTR ;查表取音符码
JZ ENDP ;是00H,则结束
MOV R6,A ;存R6
INC 51H
CJNE A,#0FFH,GETMET ;不为0FFH,转取节拍码
LJMP PAUSE ;转休止播放
LJMP GETNOT ;取音符码
GETMET: MOV A,52H
MOV DPTR,#METRE ;取节拍码首地址
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A
INC 52H
PLAY: SETB TR1 ;启动计数
CPL P2.4
LCALL KEY
JNZ RETS
MOV A,R6
MOV R3,A ;音符码存R3
LCALL DELAY1
MOV A,R7 ;取节拍码放A与中断计数比较
CJNE A,50H,PLAY ;中断计数器(50H)=R7否,不等继续循环 MOV 50H,#00H ;等于,则取下一代码
LCALL DISPT
CLR TR1
LJMP GETNOT
RETS: SETB P2.4 ;置位蜂鸣器,否则可能产生啸叫 MOV R1,#01H ;表明播放过一次
CLR A ;清除A,防止进入按键处理子程序 LJMP RETR
PAUSE: CLR TR1 ;休止100毫秒
MOV R2,#0DH
DELAY2: MOV R3,#0FFH
LCALL DELAY1
DJNZ R2,DELAY2
RET
ENDP: SETB P2.4
MOV R2,#0C7H ;歌曲结束,延时1秒后继续
END1M: MOV R3,#00H
LCALL DELAY1
DJNZ R2,END1M
DJNZ 53H,SING
RET
DELAY1: NOP ;R3为01H时,DELAY延时为20uS DELAY3: MOV R4,#02H
DELAY4: DJNZ R4,DELAY4
DJNZ R3,DELAY3
RET
NOTE: DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60H
DB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50H
METRE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H, 20H,20H,20H,20H,20H
END
www.99jianzhu.com/包含内容:建筑图纸、PDF/word/ppt 流程,表格,案例,最新,免费下载,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。