PROTEUS编译51汇编实例--源程序.ASM
;MCU:AT89C2051
;FSYS:12MHZ
;---------------------------------------------------------------------
TIME1_FLAG EQU 0A0H
TIME2_FLAG EQU 0A1H
DELAY5 EQU 0A2H
COUNTER3 EQU 0A3H
COUNTER4 EQU 0A4H
TIME3_FLAG EQU 0A5H
TIME_CNT EQU 0A6H
TwoSec EQU 0A7H
DELAY1 EQU 0F8H
DELAY2 EQU 0F9H
DELAY3 EQU 0FAH
DELAY4 EQU 0FBH
COUNTER1 EQU 0FCH
COUNTER2 EQU 0FDH
PULSE_FIG EQU 0FEH
ALARM_FIG EQU 0FFH
IN_SCAN EQU 0B0H ;P3.0
OUT_CONTROL EQU 0B1H ;P3.1
SET_UP EQU 0B2H ;P3.2
SET_DOWN EQU 0B3H ;P3.3
START EQU 0B4H ;P3.4
TO_SPEAK EQU 0B5H ;P3.5
CP1 EQU 0B7H ;P3.7
CP2 EQU 97H ;P1.7
ONE_SEC_CNT EQU 13 ;1s的定时
LED_TIME_ADJ EQU 10000 ;*根据实际情况调节*LED显示的刷新调节时间,其值范围:1000--20000
;*********************************************************************
ORG 0000H
JMP AAAA
ORG 000BH
JMP BBBB
ORG 001BH
JMP CCCC
;*********************************************************************
主程序
;-----------------------------;初始化显示
AAAA:
SETB OUT_CONTROL
MOV A,#00H
MOV TIME_CNT,A
MOV A,#03H ;十位显示3
MOV COUNTER2,A
MOV A,#00H ;个位显示0
MOV COUNTER1,A
MOV A,#1EH
MOV COUNTER4,A
MOV TMOD,#11H
MOV TH0,#LOW(00536 - LED_TIME_ADJ)
MOV TL0,#HIGH(00536 - LED_TIME_ADJ)
SETB TR0
MOV IE,#8AH
UP_SCAN: ;SET-UP键
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
与处理
SETB SET_UP
JNB SET_UP,DELAY_UP
LJMP DOWN_SCAN
DELAY_UP:
LCALL DELAY_10MS ;防按键抖动
JNB SET_UP,UP_DEAL
LJMP DOWN_SCAN
UP_DEAL:
MOV A,COUNTER4
CJNE A,#3CH,NEXT1
JMP WI_UP_REL
MOV A,COUNTER2 ;十位为6不再增加调节
CJNE A,#05H,NEXT1
LJMP DOWN_SCAN
NEXT1:
MOV A,COUNTER4
ADD A,#05H
MOV COUNTER4,A
JMP WI_UP_REL
MOV A,COUNTER1 ;个位为0时则个位加5
CJNE A,#0AH,NEXT10
MOV A,#04H
MOV COUNTER1,A
LJMP DOWN_SCAN
NEXT10:
MOV A,#09H ;个位为5时则个位变为0,十位加1
MOV COUNTER1,A
INC COUNTER2
WI_UP_REL:
JNB SET_UP,WI_UP_REL
DOWN_SCAN: ;SET-DOWN键检测与处理
SETB SET_DOWN
JNB SET_DOWN,DELAY_D
LJMP START_SCAN
DELAY_D:
LCALL DELAY_10MS ;防按键抖动
JNB SET_DOWN,DOWN_DEAL
LJMP START_SCAN
DOWN_DEAL:
MOV A,COUNTER4
CJNE A,#0AH,NEXT2
JMP WI_DOWN_REL
MOV A,COUNTER2
CJNE A,#09H,NEXT2 ;十位若为0则将个位变为0后不再减数
MOV A,#09H
MOV COUNTER1,A
LJMP START_SCAN
NEXT2:
MOV A,COUNTER4
CLR C
SUBB A,#05H
MOV COUNTER4,A
JMP WI_DOWN_REL
MOV A,COUNTER1 ;十位若不为0,个位若为0则个位变为5,十位减1
CJNE A,#09H,NEXT20
MOV A,#04H
MOV COUNTER1,A
DEC COUNTER2
LJMP DOWN_SCAN
NEXT20:
MOV A,#04H ;十位不为0,个位若为5则个位变为0
MOV COUNTER1,A
WI_DOWN_REL:
JNB SET_DOWN,WI_DOWN_REL
START_SCAN: ;START键检测与处理
SETB START
JNB START,DELAY_S
LJMP UP_SCAN
DELAY_S:
CLR OUT_CONTROL
LCALL DELAY_10MS ;防按键抖动
JNB START,WI_START_REL
LJMP UP_SCAN
WI_START_REL:
JNB START,WI_START_REL
MOV A,#ONE_SEC_CNT
MOV COUNTER3,A
MOV A,#02H
MOV TwoSec,A
MOV TH1,#LOW(01536-0500)
MOV TL1,#HIGH(01536-0500)
SETB TR1
CLR TIME1_FLAG
START_DEAL:
WAIT_IT:
MOV A,TIME_CNT
CJNE A,#00H,WI_NEXT_IT
JMP WAIT_IT
WI_NEXT_IT:
MOV A,TIME_CNT
CLR C
SUBB A,#01H
MOV TIME_CNT,A
DJNZ COUNTER3,WAIT_IT
MOV A,#ONE_SEC_CNT
MOV COUNTER3,A
DEC TwoSec
MOV A,TwoSec
CJNE A,#00H,NO_IN_SCAN
MOV A,#02H
MOV TwoSec,A
SETB IN_SCAN
JB IN_SCAN,NO_IN_SCAN
LJMP IN_ALARM_SOUND ;有IN_SCAN键后的报警音
NO_IN_SCAN:
DJNZ COUNTER4,WAIT_IT
JMP DONE_HINT_SOUND ;倒计时完成后跳到提示音
NEXT3:
DEC COUNTER1
JB TIME2_FLAG,START_DEAL
SETB TIME1_FLAG
LJMP START_DEAL
FIG2:
MOV A,COUNTER2 ;若十位数也为0则停止减数
CJNE A,#0AH,NEXT3
LJMP UP_SCAN ;转至按键扫描
NEXT4:
DEC COUNTER2 ;十位减数
LJMP START_DEAL
IN_DEAL: ;输入报警
SETB OUT_CONTROL ;输出至低电平
;LCALL ALARM_SOUND ;报警输出
JMP IN_DEAL
IN_ALARM_SOUND: ;有IN_SCAN键后的报警音
SETB OUT_CONTROL
CLR TR1
LCALL subInAlarmSound
SETB START
JNB START,RESET_SYSTEM
JMP IN_ALARM_SOUND
DONE_HINT_SOUND: ;倒计时完成后跳到提示音
SETB OUT_CONTROL
CLR TR1
LCALL subDoneHintSound
SETB START
JNB START,RESET_SYSTEM
JMP AAAA
RESET_SYSTEM: ;复位系统
CLR EA
CLR CP1
CLR CP2
SETB OUT_CONTROL
CLR TR0
CLR TR1
RS_START_REL:
JNB START,RS_START_REL
JMP RESET
;*****************************子程序
DISP:
DISP_SHI: ;显示十位数
CLR CP2
MOV A,COUNTER4
MOV B,#0AH
DIV AB
MOV R0,A
MOV DPTR,#TABLE ;
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
格地址送数据指针
MOV A,R0 ;送显示
MOVC A,@A+DPTR ;指向表格地址
MOV P1,A
SETB CP1
RET
DISP_GE: ;显示个位数
CLR CP1
MOV A,COUNTER4
MOV B,#0AH
DIV AB
MOV R0,B
MOV DPTR,#TABLE ;表格地址送数据指针
MOV A,R0 ;送显示
MOVC A,@A+DPTR ;指向表格地址
MOV P1,A
SETB CP2
RET
TABLE: ;字型码表
DB 3FH ;0
DB 06H ;1
DB 5BH ;2
DB 4FH ;3
DB 66H ;4
DB 6DH ;5
DB 7DH ;6
DB 07H ;7
DB 7FH ;8
DB 6FH ;9
DELAY_1MS:
MOV A,#0FAH ;1ms
MOV DELAY1,A
LOOP1: NOP
DJNZ DELAY1,LOOP1
NOP
RET
DELAY_10MS:
MOV A,#0AH ;10ms
MOV DELAY4,A
LOOP4: ACALL DELAY_1MS
DJNZ DELAY4,LOOP4
RET
DELAY_100MS:
MOV A,#0AH ;100ms
MOV DELAY5,A
LOOP5: ACALL DELAY_10MS
DJNZ DELAY5,LOOP5
RET
subInAlarmSound: ;有IN_SCAN键后的报警音
SETB TO_SPEAK
LCALL DELAY_100MS
CLR TO_SPEAK
LCALL DELAY_10MS
LCALL DELAY_10MS
LCALL DELAY_10MS
RET
subDoneHintSound: ;倒计时完成后跳到提示音
SETB TO_SPEAK
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
CLR TO_SPEAK
LCALL DELAY_100MS
RET
BBBB:
PUSH PSW
PUSH ACC
PUSH B
MOV TH0,#LOW(00536 - LED_TIME_ADJ)
MOV TL0,#HIGH(00536 - LED_TIME_ADJ)
SETB TR0
MOV A,TIME3_FLAG
CJNE A,#01H,TI_GE
MOV A,#00H
MOV TIME3_FLAG,A
CALL DISP_SHI
JMP TIME0_END
TI_GE:
MOV A,#01H
MOV TIME3_FLAG,A
CALL DISP_GE
TIME0_END:
POP B
POP ACC
POP PSW
RETI
CCCC:
PUSH PSW
MOV TH1,#LOW(01536-0500)
MOV TL1,#HIGH(01536-0500)
SETB TR1
INC TIME_CNT
POP PSW
RETI
END