📄 dianyayuan.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0030H
;******************
;初始化变量
;******************
MAIN: MOV R0,#30H
MOV R7,#10H
MOV P3,#00H
CLR C
MOV 00H,C
LOOP: MOV @R0,#00H
INC R0
DJNZ R7,LOOP
MOV R1,#2FH
LOOP1: LCALL DISPLAY
LCALL SHUCHU;电压D/A转换输出
JNB P1.0,WEIXUAN;进入位选状态
JNB P1.2,JIA;进入加状态
JNB P1.3,JIAN;进入减状态
AJMP LOOP1
;******************
;位选程序
;******************
WEIXUAN:LCALL DISPLAY
JNB P1.0,WEIXUAN;去抖动
INC R1
MOV A,R1
CJNE A,#34H,LOP1
MOV R1,#30H
LOP1: JNB P1.1,DUANXUAN;进入段选状态
JNB P1.0,WEIXUAN;进入位选状态
LCALL DISPLAY
JNB P1.4,LOP2; 进入确定状态
AJMP LOP1
LOP2: JNB P1.4,LOP2;去抖动
MOV R1,#2FH
AJMP LOOP1
;******************
;段选程序
;******************
DUANXUAN:LCALL DISPLAY
JNB P1.1,DUANXUAN;去抖动
MOV A,R1
MOV R0,A
MOV A,@R0
INC A
CJNE A,#10,L1
MOV A,#00H
L1: MOV @R0,A
LCALL DISPLAY
AJMP LOP1
;******************
;加1程序
;******************
JIA: LCALL DISPLAY
JNB P1.2,JIA;去抖动
MOV A,30H
JZ Y4
AJMP MAIN
Y4: CLR C
MOV A,33H
ADD A,#5
ACALL BIJIAO1
MOV 33H,A
MOV C,00H
MOV A,32H
ADDC A,#00H
MOV 00H,C;存进位
ACALL BIJIAO1
MOV 32H,A
MOV C,00H
MOV A,31H
ADDC A,#00H
MOV 00H,C;存进位
ACALL BIJIAO1
MOV 31H,A
MOV A,#00H
ADDC A,#00H
MOV 30H,A
Y3: AJMP LOOP1
BIJIAO1:CJNE A,#0AH,Y1
MOV A,#00H
SETB C
MOV 00H,C
AJMP Y2
Y1: CLR C
Y2: RET
;******************
;减1程序
;******************
JIAN: LCALL DISPLAY
JNB P1.3,JIAN;去抖动
MOV A,30H
JNZ Y7
MOV A,31H
JNZ Y7
MOV A,32H
JNZ Y7
MOV A,33H
JNZ Y7
MOV 30H,#01H
AJMP LOOP1
Y7: CLR C
MOV A,33H
SUBB A,#5
JZ Y8
MOV A,#05H
Y8: MOV 33H,A
MOV A,32H
SUBB A,#00H
ACALL BIJIAO2
MOV 32H,A
MOV A,31H
SUBB A,#00H
ACALL BIJIAO2
MOV 31H,A
MOV A,30H
SUBB A,#00H
MOV 30H,A
AJMP LOOP1
BIJIAO2:JNC Y9
MOV A,#09H
Y9: RET
;******************
;电压D/A转换输出子程序
;******************
SHUCHU: SETB RS0
MOV A,30H
JZ Y5
MOV A,#200
AJMP Y6
Y5: MOV A,30H
SWAP A
ORL A,31H
MOV B,#20
MUL AB
MOV 45H,A
MOV A,32H
MOV B,#2
MUL AB
ADD A,45H
MOV 45H,A
MOV A,33H
MOV B,#5
DIV AB
ADD A,45H
MOV 45H,A
Y6: MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV P3,A
CLR RS0
ACALL CLZ;调用电压测量值子程序
RET
;******************
;调用电压测量值子程序
;******************
CLZ: MOV 48H,A
MOV R0,#34H
MOV R6,#4
LOOP7: MOV B,#10
MUL AB
MOV 62H,A
MOV A,B
MOV @R0,A
ADD A,62H
MOV 63H,A
MOV A,@R0
ADDC A,#00H
MOV @R0,A
MOV A,63H
INC R0
DJNZ R6,LOOP7
RET
;******************
;显示子程序
;******************
DISPLAY:MOV A,#01H
MOV R7,#8
MOV R0,#30H
LOOP2: MOV P2,A
MOV 10H,A
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV 60H,A
MOV A,R0
CJNE A,#31H,M1
M3: MOV A,60H
ANL A,#7FH
MOV 60H,A
AJMP M2
M1: CJNE A,#34H,M2
AJMP M3
M2: MOV P0,60H
LCALL DS1MS
INC R0
MOV A,10H
RL A
MOV 10H,A
DJNZ R7,LOOP2
RET
;******************
;延时1ms子程序
;******************
DS1MS: MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
SETB TR0
LOOP3: JBC TF0,NOOP
SJMP LOOP3
NOOP: CLR TR0
RET
TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
TAB2: DB 00H, 01H, 03H, 04H, 05H, 06H, 08H, 09H, 0AH, 0BH
DB 0DH, 0EH, 0FH, 11H, 12H, 13H, 14H, 16H, 17H, 18H
DB 1AH, 1BH, 1CH, 1DH, 1FH, 20H, 21H, 22H, 24H, 25H
DB 26H, 28H, 29H, 2AH, 2BH, 2DH, 2EH, 2FH, 30H, 32H
DB 33H, 34H, 36H, 37H, 38H, 39H, 3BH, 3CH, 3DH, 3EH
DB 40H, 41H, 42H, 44H, 45H, 46H, 47H, 49H, 4AH, 4BH
DB 4DH, 4EH, 4FH, 50H, 52H, 53H, 54H, 55H, 57H, 58H
DB 59H, 5BH, 5CH, 5DH, 5EH, 60H, 61H, 62H, 63H, 65H
DB 66H, 67H, 69H, 6AH, 6BH, 6CH, 6EH, 6FH, 70H, 71H
DB 73H, 74H, 75H, 77H, 78H, 79H, 7AH, 7CH, 7DH, 7EH
DB 80H, 81H, 82H, 83H, 85H, 86H, 87H, 88H, 8AH, 8BH
DB 8CH, 8EH, 8FH, 90H, 91H, 93H, 94H, 95H, 96H, 98H
DB 99H, 9AH, 9CH, 9DH, 9EH, 9FH, 0A1H,0A2H,0A3H,0A4H
DB 0A6H,0A7H,0A8H,0AAH,0ABH,0ACH,0ADH,0AFH,0B0H,0B1H
DB 0B2H,0B4H,0B5H,0B6H,0B8H,0B9H,0BAH,0BBH,0BDH,0BEH
DB 0BFH,0C1H,0C2H,0C3H,0C4H,0C6H,0C7H,0C8H,0C9H,0CBH
DB 0CCH,0CDH,0CFH,0D0H,0D1H,0D2H,0D3H,0D5H,0D6H,0D7H
DB 0D9H,0DAH,0DBH,0DDH,0DEH,0DFH,0E0H,0E2H,0E3H,0E4H
DB 0E5H,0E7H,0E8H,0E9H,0EBH,0ECH,0EDH,0EEH,0F0H,0F1H
DB 0F2H,0F4H,0F5H,0F6H,0F7H,0F9H,0FAH,0FBH,0FCH,0FEH,0FFH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -