单片机课程设计论文完整 联系客服

发布时间 : 星期六 文章单片机课程设计论文完整更新完毕开始阅读9ca7fca46137ee06eef9180f

MOV R4,#10 SETB POINT_3 CLR POINT_2

LCALL FOUR_KEY_SET ;设置读取月日

;****************************************************************** BACK_EX0_D:

MOV R1,#200 ;R2,R1的值用于设置循环,用于设置月日后显示停留

MOV R2,#100 MOV A,R7 MOV B,#10 MUL AB ADD A,R6 MOV MONTH,A MOV A,R5 MOV B,#10 MUL AB ADD A,R4

MOV DAY,A BACK_HOLD1:

LCALL UP_4LED

DJNZ R1,BACK_HOLD1 DJNZ R2,BACK_HOLD2 SJMP BACK_EX0_D1 BACK_HOLD2:

MOV R1,#200 SJMP BACK_HOLD1 BACK_EX0_D1:AJMP DPYEX0

;**********************************************************************

TIME_KEY_0: MOV R7,#10 ;设置时间,初始4个下划线 MOV R6,#10 MOV R5,#10 MOV R4,#10 SETB POINT_3 CLR POINT_2

LCALL FOUR_KEY_SET

;*********************************************************************

BACK_EX0_T: MOV R2,#100 ;R2,R1的值用于设置循环,用于设置时间后显示停留

MOV R1,#200 MOV A,R7 MOV B,#10

MUL AB ADD A,R6 MOV HOUR,A MOV A,R5 MOV B,#10 MUL AB ADD A,R4 MOV MINUTE,A MOV SECOND,#00H BACK1_HOLD1:

LCALL UP_4LED

DJNZ R1,BACK1_HOLD1 DJNZ R2,BACK1_HOLD2 SJMP BACK_EX0_T1 BACK1_HOLD2:

MOV R1,#200 SJMP BACK1_HOLD1 BACK_EX0_T1:AJMP DPYEX0

;**********************************************************************

EX0_RET:POP B POP PSW POP ACC RETI

;**********************************************************************

KEYT:DW 0EB77H,7B7DH ;键盘译码表 DW 0B7BBH,0BDD7H DW 0DBDDH,7EBEH DW 0DEE7H,0EDEEH

;***********************************************************************

EX1_INT:PUSH ACC ;保存相关寄存器值 PUSH PSW PUSH B SETB RS1 SETB RS0

DPYEX1: MOV R2,#0 ;进入第一层子菜单提示0,可选择闹钟/秒表 LCALL UP_LED0

EX1_KEY_0:LCALL KEY_SET ;判断键盘是否按下并读取键码 JNB KEY_DOWN,DPYEX1 LCALL KEY_REL EX1_KEY_1:MOV A,B ;读取键码

CJNE A,#0EEH,EX1_KEY_2 ;判断是不是退出键按下,是返回主程序

LJMP EX1_RET

EX1_KEY_2:CJNE A,#7EH,EX1_KEY_3 ; 判断是不是闹钟键按下,是进入闹钟设置子菜单

AJMP RING_KEY_0

EX1_KEY_3:CJNE A,#0BEH,EX1_KEY_4 ;判断是不是秒表键功能按下,是进入秒表设置子菜单

LJMP SWATCH_KEY_0 EX1_KEY_4:AJMP DPYEX1

RING_KEY_0:MOV R2,#1 ;提示1进入闹钟子菜单 LCALL UP_LED0

LCALL KEY_SET ;判断是否有键按下,若有按1,设置闹钟时间,按2开启闹钟,按3关闭闹钟

JNB KEY_DOWN,RING_KEY_0 LCALL KEY_REL RING_KEY_1:MOV A,B

CJNE A,#77H,RING_KEY_2 AJMP RING_SET_0

RING_KEY_2:CJNE A,#7BH,RING_KEY_3 LJMP SET_EN_RING

RING_KEY_3:CJNE A,#7DH,RING_KEY_4 LJMP SET_DIS_RING

RING_KEY_4:CJNE A,#0EEH,RING_KEY_5 LJMP EX1_KEY_0 RING_KEY_5:AJMP RING_KEY_0

;*************************************************************************

RING_SET_0:MOV R7,#10 MOV R6,#10 MOV R5,#10 MOV R4,#10 SETB POINT_3 CLR POINT_2

LCALL FOUR_KEY_SET ;设置闹钟时间

;*****************************************************************8 BACK_RKEY_0:MOV R2,#100 ;R2,R1,设置循环次数,用于显示时间暂停 MOV R1,#100 MOV A,R7 MOV B,#10 MUL AB ADD A,R6

MOV BELL_HOUR,A MOV A,R5 MOV B,#10 MUL AB

ADD A,R4

MOV BELL_MIN,A BACKR_HOLD1:

LCALL UP_4LED

DJNZ R1,BACKR_HOLD1

DJNZ R2,BACKR_HOLD2 SJMP BACK_RKEY_1 BACKR_HOLD2: MOV R1,#100

SJMP BACKR_HOLD1 BACK_RKEY_1:AJMP RING_KEY_0

;*********************************************************************

SET_EN_RING:SETB EN_RING ;键2按下,开启闹钟 SJMP BACK_RKEY_1

;***********************************************************************

SET_DIS_RING:CLR EN_RING ;键1按下,关闭闹钟 SJMP BACK_RKEY_1

;*********************************************************************

SWATCH_KEY_0:MOV R7,#0 ;进入秒表,置初值000.0 并显示 MOV R6,#0 MOV R5,#0 MOV R4,#0 SETB POINT_2 CLR POINT_3 SWATCH_KEY_1:LCALL UP_4LED

LCALL KEY_SET ;检查按键输入,按1启动/暂停秒表,按2秒表清0

JNB KEY_DOWN,SWATCH_KEY_1 LCALL KEY_REL

SWATCH_KEY_2:MOV A,B ;读取键码

CJNE A,#77H,SWATCH_KEY_3 ;判断1按下? JNB SWATCH_RUN,SWATCH_START CLR SWATCH_RUN ;秒表暂停 SJMP SWATCH_KEY_1

SWATCH_KEY_3:CJNE A,#7BH,SWATCH_KEY_4 ;判断2按下? CLR SWATCH_RUN ;秒表清0 SJMP SWATCH_KEY_0 SWATCH_KEY_4:LJMP DPYEX1

;*********************************************************************

SWATCH_START: SETB SWATCH_RUN ;SWATCH_RUN置1,让秒表跑