单片机程序设计流程图

2025-03-21 22:55:05
推荐回答(1个)
回答1:

LED_BIT_1 EQU 30H ; 存放8位数码管的段码

LED_BIT_2 EQU 31H

LED_BIT_3 EQU 32H

LED_BIT_4 EQU 33H

LED_BIT_5 EQU 34H

LED_BIT_6 EQU 35H

LED_BIT_7 EQU 36H

LED_BIT_8 EQU 37H ; 存放初始密码

SECOND EQU 60H

MINUTE EQU 61H

HOUR EQU 62H

TCNT EQU 63H

ORG 00H ;初始化程序 ,设置初始密码

SJMP START

ORG 0BH

LJMP INT_T0

START:
MOV DPTR,#TABLE
MOV HOUR,#0
MOV MINUTE,#0

MOV TCNT,#0

MOV TMOD,#01H

MOV TH0,#03ch ;定时50毫秒

MOV TL0,#03ch

MOV IE,#082H

SETB TR0

MOV LED_BIT_1,#00H ;段码存储区清0

MOV LED_BIT_2,#00H

MOV LED_BIT_3,#00H

MOV LED_BIT_4,#00H

MOV LED_BIT_5,#00H

MOV LED_BIT_6,#00H

MOV LED_BIT_7,#79H

MOV LED_BIT_8,#73H

MOV TMOD,#01H

MOV TH0,#0fdh

MOV TL0,#0fdh
MOV IE,#82H

A1:
LCALL DISPLAY ;调用时间显示

JNB P1.0,S1

JNB P1.1,S2

JNB P1.2,S3
JNB P1.3,S4

LJMP A1

S1: LCALL DLY_S ;去抖动

JB P1.0,A1
INC HOUR ;秒值加1

MOV A, HOUR

CJNE A,#24,J00 ;判断是否加到60秒

MOV HOUR,#0

LJMP A1

S2: LCALL DLY_S

JB P1.1,A1
K01: DEC HOUR ;SHI-

MOV A,HOUR

CJNE A,#0,J01 ;判断是否-0分

MOV HOUR,#24
LJMP A1

S3: LCALL DLY_S

JB P1.2,A1
K02: INC MINUTE ;小时值加1

MOV A,MINUTE

CJNE A,#60,J02 ;判断是否加到24小时
MOV MINUTE,#0

LJMP A1

S4: LCALL DLY_S

JB P1.3,A1
K03: DEC MINUTE ;小时值加1

MOV A,MINUTE

CJNE A,#0,J03 ;判断是否加到24小时
MOV MINUTE,#59

LJMP A1

J00: JB P1.0,A1 ;等待按键抬起

LCALL DISPLAY

SJMP J00

J01: JB P1.1,A1

LCALL DISPLAY

SJMP J01

J02: JB P1.2,A1

LCALL DISPLAY

SJMP J02
J03: JB P1.3,A1

LCALL DISPLAY

SJMP J03

INT_T0: MOV TH0,#3ch ;定时器中断服务程序

MOV TL0,#3ch ;对秒,分钟和小时的计数

INC TCNT

MOV A,TCNT

CJNE A,#20,RETUNE ;计时1秒

INC SECOND

MOV TCNT,#0

MOV A,SECOND

CJNE A,#60,RETUNE

INC MINUTE

MOV SECOND,#0

MOV A,MINUTE

CJNE A,#60,RETUNE

INC HOUR

MOV MINUTE,#0

MOV A,HOUR

CJNE A,#24,RETUNE

MOV HOUR,#0

MOV MINUTE,#0

MOV SECOND,#0

MOV TCNT,#0

RETUNE: RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3闹铃设置子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3
DISPLAY: ;显示时间控制子程序

MOV A,SECOND ;显示秒

MOV B,#10

DIV AB

CLR P2.6

MOVC A,@A+DPTR

MOV P0,A

LCALL DLY_S

SETB P2.6

MOV A,B

CLR P2.7

MOVC A,@A+DPTR

MOV P0,A

LCALL DLY_S

SETB P2.7

CLR P2.5

MOV P0,#40H ;显示分隔符

LCALL DLY_S

SETB P2.5

MOV A,MINUTE ;显示分钟

MOV B,#10

DIV AB

CLR P2.3

MOVC A,@A+DPTR

MOV P0,A

LCALL DLY_S

SETB P2.3

MOV A,B

CLR P2.4

MOVC A,@A+DPTR

MOV P0,A

LCALL DLY_S

SETB P2.4
CLR P2.2

MOV P0,#40H ;显示分隔符

LCALL DLY_S

SETB P2.2

MOV A,HOUR ;显示小时

MOV B,#10

DIV AB

CLR P2.0

MOVC A,@A+DPTR

MOV P0,A

LCALL DLY_S

SETB P2.0

MOV A,B

CLR P2.1

MOVC A,@A+DPTR

MOV P0,A

LCALL DLY_S

SETB P2.1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时

DLY_S: MOV R6,#5 ;延时程序

D1: MOV R7,#100

DJNZ R7,$

DJNZ R6,D1

RET

DLY_L: MOV R5,#50

D2: MOV R6,#100

D3: MOV R7,#100

DJNZ R7,$

DJNZ R6,D3

DJNZ R5,D2

RET

END
请采纳答案,支持我一下。