;初始化程序
;===================================================================================
org 0000h
jmp Start
org 0100h
Start:
MOV 70H,#200 ;上限
MOV 71H,#60 ;下限
;===================================================================================
;主程序
;===================================================================================
LOOP:
LCALL AD
LCALL XS
LCALL BJ
;CLR P1.4
LCALL JP
JMP LOOP
;===================================================================================
;AD转换
;=====================================================================================
AD:MOV R0,#50H
MOV DPTR,#7FF8H ;通道地址
MOVX @DPTR,A
MOV R6,#0AH
DELAY:NOP
NOP
NOP
DJNZ R6,DELAY
MOVX A,@DPTR
MOV @R0,A
;=================================
;显示
;=====================================================================================
XS: ;MOV 66H,#7BH
MOV R1,50H
MOV A,R1
MOV B,#100
DIV AB
MOV 51H,A
MOV 52H,B
MOV A,52H
MOV B,#10
DIV AB
MOV 53H,A
MOV 54H,B
;查表显示
Mov DPTR,#TAB
;个位
MOV A,54H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
LCALL DELAY3
SETB P2.0
;十位
MOV A,53H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
LCALL DELAY3
SETB P2.1
;百位
MOV A,51H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.2
LCALL DELAY3
SETB P2.2
RET
;=====================================================================================
;报警
;=====================================================================================
BJ: MOV R1,70H
MOV A,50H
SUBB A,R1
JNC LOOP1
MOV R1,50H
MOV A,71H
SUBB A,R1
JNC LOOP1
SETB P1.4
RET
LOOP1: CLR P1.4
RET
;=====================================================================================
;键盘
;=====================================================================================
JP: ;MOV P1,0FFH ;P1口写入1,设置P1口为输入状态
MOV A,P1 ;读入8个按键的状态
CJNE A,#0FFH,KEY0 ;有键按下,跳去抖动
JC RETURN
KEY0: MOV C,P1.0 ;有键按下,读P1.0的按键状态
JC KEY1 ;P1.0为高,该键未按下,跳KEY1,;判下一个键
LJMP PKEY0 ;P1.0的键按下,跳PKEY0处理
KEY1: MOV C,P1.1 ;读P1.1的按键状态
JC RETURN ;P1.1为高,该键未按下,跳KEY2,;判下一个键
LJMP PKEY1 ;P1.1的键按下,跳PKEY1处理
RETURN: RET ;子程序返回
;上/下限
PKEY0:
MOV A,70H
MOV 50H,A
MOV R4,#08H
DL4: MOV R3,#0AH
DL5:
MOV C,P1.2 ;2 有键按下,读P1.0的按键状态
JNC PKEY2 ;2
MOV C,P1.3 ;2
JNC PKEY3 ;2
LCALL XS
DJNZ R3,DL5
DJNZ R4,DL4
RET
PKEY1:
MOV A,71H
MOV 50H,A
MOV R4,#08H
DL6: MOV R3,#0AH
DL7:
MOV C,P1.2 ;有键按下,读P1.0的按键状态
JNC PKEY4
MOV C,P1.3
JNC PKEY5
LCALL XS
DJNZ R3,DL7
DJNZ R4,DL6
SETB P2.2
CLR P2.0
RET
;上限加减
PKEY2:
MOV A,70H
ADD A,#05H
MOV 70H,A
LCALL DELAY1
JMP PKEY0
PKEY3:
MOV A,70H
SUBB A,#05H
MOV 70H,A
LCALL DELAY1
JMP PKEY0
PKEY4:
MOV A,71H
ADD A,#05H
MOV 71H,A
LCALL DELAY1
JMP PKEY1
PKEY5:
MOV A,71H
SUBB A,#05H
MOV 71H,A
LCALL DELAY1
JMP PKEY1
;=====================================================================================
;延时
;=====================================================================================
DELAY1:;0.5S
MOV R7,#16H
DL1: MOV R6,#64H
DL2: MOV R5,#64H
DL3: DJNZ R5,DL3
DJNZ R6,DL2
DJNZ R7,DL1
RET
DELAY2:;0.1S
MOV R7,#05H
DL8: MOV R6,#64H
DL9: MOV R5,#64H
DL10: DJNZ R5,DL10
DJNZ R6,DL9
DJNZ R7,DL8
RET
DELAY3: ;6.6MS
MOV R7,#00H
D8: MOV R6,#01H
D9: MOV R5,#05H
D10:
DJNZ R5,D10
DJNZ R6,D9
DJNZ R7,D8
RET
;=====================================================================================
;共阳极段码表
;=====================================================================================
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
;=====================================================================================
END
51单片机之多路工业过程参数巡检系统的设计(汇编语言)
最新推荐文章于 2024-07-08 23:36:03 发布