51单片机实验报告(3)

2018-11-19 21:45

;

LCALL TIME_TEST ;检查闹钟时间 LCALL DISP LCALL GET_KEY MOV A,#15

CJNE A,#9,LOOP_TO_10 LCALL BEEP LCALL SET_TIME LJMP LOOP

CJNE A,#10,LOOP_TO_11 LCALL BEEP

LCALL SET_ALARM_TIME JMP LOOP

CJNE A,#11,LOOP_TO_12 LCALL BEEP

LCALL SET_DOWN_TIMER ;设置倒计时间 JMP LOOP

CJNE A,#12,LOOP_TO_13 LCALL BEEP LCALL COUNTER JMP LOOP

CJNE A,#13,LOOP_TO_14 LCALL BEEP

LCALL DATE_ROLLER LJMP LOOP

CJNE A,#14,LOOP_TO_2 LCALL SET_DATE LJMP LOOP

CJNE A,#2,LOOP_TO_15 JB ALARM,ALARM_OFF LCALL BEEP LCALL BEEP SETB ALARM JMP LOOP LCALL BEEP CLR ALARM LJMP LOOP

LOOP_TO_10:

LOOP_TO_11:

LOOP_TO_12:

LOOP_TO_13:

LOOP_TO_14:

LOOP_TO_2:

ALARM_OFF:

NO_KEY:

LJMP LOOP

CJNE A,#1,NO_KEY JNB SOUND_ON,L1 CLR SOUND_ON LJMP L11 LCALL BEEP

LOOP_TO_1:

L1: SETB SOUND_ON L11: LJMP LOOP LOOP_TO_15:

CJNE A,#15,LOOP_TO_16 LCALL BEEP LCALL UART_HOST LJMP LOOP

CJNE A,#16,LOOP_TO_1 LCALL BEEP LCALL UART_SLAVE LJMP LOOP

LOOP_TO_16:

;;;检查是否启动闹钟 TIME_TEST:

JB ALARM,TI3 RET

;检查闹钟时间是否到了 TI3:

MOV A,HOUR

MOV B,HOUR_ALARM CJNE A,B,BK MOV A,MIN

MOV B,MIN_ALARM CJNE A,B,BK

LCALL TIME_OUT ;闹钟时间到了,开始提示 RET

MOV R0,#1 ;#256 ;MOV SEC_OLD,#100

MOV MUSIC_SELECT,#1 ;选择第一首歌曲 LCALL MUSIC ;LCALL GET_KEY

;CJNE A,#4,AL1 ;响铃次数没到,但是用户按K4停止闹钟

BK: TIME_OUT:

ALARMING:

;LJMP AL2

;响铃的次数到了就停

;AL1:DJNZ R0,ALARMING ;AL2: ;;;

;;;显示时钟初始值000000 INIT_SHOW: ;;;

;;;中断服务程序 INT_T0:

PUSH PSW PUSH ACC

CLR EA ;关中断 CLR TR0

MOV DPTR,#8000H MOV A,# B MOVX @DPTR,A MOV DPTR,#9000H MOV A,# B MOVX @DPTR,A RET RET

CLR ALARM

MOV A,#7 ;加上执行到SET TR0处需要的时间 ADD A,TL0 MOV TL0,A MOV A,#0DCH ADDC A,TH0 MOV TH0,A SETB TR0

INC COUNT ;秒输出 MOV A,COUNT

CJNE A,#100,TT1 ;是否一秒到了 MOV COUNT,#0 INC SEC MOV A,SEC CJNE A,#60,TT1 ;分输出 INC MIN MOV SEC,#0 MOV A,MIN CJNE A,#60,TT1

;是否一小时到了 ;是否一分钟到了

;时输出 INC HOUR MOV MIN,#0 MOV A,HOUR CJNE A,#24,TT1 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0

MOV A,MONTH CJNE A,#2,NOT_2 MOV A,YEAR1 CJNE A,#0,NOT_100 MOV A,YEAR0 MOV B,#4 DIV AB MOV A,B CJNE A,#0,NOT_2 MOV R0,#28 LJMP DAY_TEST MOV A,YEAR1 MOV B,#4 DIV AB MOV A,B CJNE A,#0,NOT_2 MOV R0,#29 LJMP NO1

MOV DPTR,#(MONTHS-1) MOV A,MONTH MOVC +DPTR MOV R0,A LJMP DAY_TEST

;如果放在最后会出现 OUT OF RANGE 错误!

POP ACC POP PSW

SETB EA ;开中断 RETI INC DAY MOV A,DAY INC R0

NOT_100:

NOT_2:

NO1: TT1:

DAY_TEST:

MOV B,R0 CJNE A,B,TT1 MOV DAY,#1 INC MONTH MOV A,MONTH CJNE A,#13,TT1 MOV MONTH,#1 INC YEAR1 MOV A,YEAR1 CJNE A,#100,TT1 MOV YEAR1,#0 INC YEAR0 MOV A,YEAR0 CJNE A,#100,TT1 MOV YEAR0,#0 JMP TT1

;;;使用定时器T0 模式0 计时 INIT_TIMER: ;;;

;;;初始化:计时单元清零 INIT:

CLR ALARM ;关闭闹钟功能 MOV COUNT,#0 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0

MOV HOUR_ALARM,#0 MOV MIN_ALARM,#0 MOV SEC_ALARM,#0

MOV SEC_OLD,#0 ;保存的秒值 以便对比 判断是否过了一秒 MOV HOUR_DOWN,#0 MOV MIN_DOWN,#0 MOV SEC_DOWN,#0

MOV TIME_BUF+2,# B ;显示时分秒之间的分隔符 MOV TIME_BUF+5,# B ;显示时分秒之间的分隔符 MOV YEAR0,#20 MOV YEAR1,#12 MOV TMOD,#01H MOV IE,# B MOV TL0,#00H MOV TH0,#0DCH SETB TR0 ;启动定时器T0 RET


51单片机实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:马斯洛需求理论在华为公司的应用案例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: