RP1
10k
VCC
1
23456789
19
18
9
29
30
31
1
2
3
4
5
6
7
8
U1
XTAL1
XTAL2
RST
PSEN
ALE
EA
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
AT89C51
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
GND
U2
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE
74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9
12
15
16
19
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
RV4(3)
+10V
RV4
%
5
5
1k
U5
-10V
OP1P
50%
RV1
100
RV2
100
50%
?
5
6
4
3
2
28
27
26
25
24
23
22
21
20
19
18
17
16
R/C
CE
A0
CS
12/8
STS
DB11
DB10
DB9
DB8
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
-15V
1
1
VEE
AGND
10VIN
20VIN
BIPOFF
REFIN
REFOUT
VAS
7
LCD1
LM016L
+15V
U3
9
13
14
12
10
8
AD1674
1
2
U4:A
74LS00
VCC
3
S
S
V
D
D
V
E
E
V
S
R
W
R
E
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
D
1
2
3
4
5
6
7
8
9
0
1
1
1
2
1
3
1
4
1
LCD_CMD_WR EQU
LCD_DATA_WR EQU
LCD_BUSY_RD EQU
LCD_DATA_RD EQU
00E0H
00E1H
00E2H
00E3H
;********************************
EQU 00E0H
EQU 00E8H
EQU 00E4H
EQU 00ECH
;*********************************
AD_12CMD_WR
AD_8CMD_WR
AD_8HB_RD
AD_4LB_RD
GND
;初始化为 12 位转换器
;初始化为 8 位转换器
;高 8Bit 输出
;低 4Bit 输出
ORG 0000H
LJMP MAIN
ORG 0030H
;=========================================
MAIN: MOV SP,#60H
CLR RS0
CLR RS1
ACALL INIT
;LCD 初始化
;=======================================
;参数设置
;=======================================
AD574: MOV DPTR,#AD_12CMD_WR
MOVX @DPTR,A
SETB P3.0
;启动转换
LOOP:
NOP
JB P3.0,LOOP
MOV DPTR,#AD_8HB_RD
MOVX A,@DPTR
MOV R2,A
MOV DPTR,#AD_4LB_RD
MOVX A,@DPTR
MOV R3,A
;========================================
;数据处理(参数)传递
;R2R3=(ABC0)
;处理后 R2R3=(0ABC)
;========================================
;高低交换
;
MOV A,R2
SWAP A
MOV R5,A
ANL A,#0F0H
MOV R4,A
MOV A,R3
SWAP A
ORL A,R4
MOV R3,A
MOV A,R5
ANL A,#0FH
MOV R2,A
;========================================
;入口参数:被减数在 R2R3 中,减数在 R6R7 中
;出口参数:差值在 R2R3 中
;========================================
;=============
;无借位,直接运算
;取反
MOV R6,#08H
MOV R7,#00H
CLR C
MOV A,R2
SUBB A,R6
JNC SUBI
SETB 02H
MOV A,R2
CPL A
ANL A,#0FH
MOV R2,A
MOV A,R3
CPL A
MOV R3,A
;===========================
;计算
;==========================
SUBI:
CLR C
MOV A,R3
SUBB A,R7
MOV R3,A
MOV A,R2
SUBB A,R6
MOV R2,A
;==========================================
;乘以 10 计算
;===========================================
MOV R1,#00H
MOV A,R3
LCALL MUL10
MOV 49H,A
MOV A,R2
LCALL MUL10
MOV 48H,A
;========================================
;============================================
;除法运算
;============================================
;============================
;整数部分
;============================
MOV R0,#30H
LCALL DIVD0
MOV A,40H
MOV @R0,A
INC R0
MOV A,#2EH
MOV @R0,A
INC R0
;==========================
;小数部分
;==========================
MOV 45H,#05H
ALUDEF: MOV A,42H
LCALL MUL10
MOV 47H,A
MOV A,41H
LCALL MUL10
MOV 46H,A
;==========================
;确定小数
;==========================
LCALL DIVD1
MOV A,40H
MOV @R0,A
INC R0
DJNZ 45H,ALUDEF
MOV A,#05H
CLR C
SUBB A,40H
JC DV53
SJMP DV54
DV53:
INC 40H
DEC R0
MOV A,40H
MOV @R0,A
LOPJ:
CJNE @R0,#0AH,DV54
MOV @R0,#00H
DEC R0
INC @R0
INC R0
SJMP LOPJ
DV54:
CLR OV
INC R0
MOV @R0,#56H
;RET
;====================
;===========================
;显示
;===========================
MOV A,#01H
ACALL C51
MOV
A,#81H
ACALL C51
MOV DPTR,#TAB1
LCHIN: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL C51DDR
JNZ LCHIN
MOV
A,#0C3H
ACALL C51
JNB 02H,LOP_
MOV A,#2DH
LCALL C51DDR
LOP_: MOV R0,#30H
MOV A,@R0
LCALL CHASCII
INC R0
LCALL C51DDR
MOV A,@R0
INC R0
LCALL C51DDR
MOV R1,#06H
LOPXS: MOV A,@R0
LCALL CHASCII
LCALL C51DDR
INC R0
DJNZ R1,LOPXS
MOV R2,#5
DELL1ms:LCALL DEL
DJNZ R2,DELL1ms
MOV A,#01H
ACALL C51
MOV
A,#0C3H
ACALL C51
CLR 02H
LJMP AD574
;============================
;计算子程序
;=============================
DIVD0: CLR 00H
PUSH PSW
SETB RS0
CLR RS1
MOV R4,48H
MOV R5,49H
ACALL DIVD
POP PSW
RET
DIVD1: SETB 00H
PUSH PSW
SETB RS0
CLR RS1
MOV R4,46H
MOV R5,47H
DIVD: MOV R2,#00H
MOV R3,#00H
;========================
MOV R6,#08H
MOV R7,#00H
CLR C
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV
POP PSW
RET
CLR C
DVD1: MOV B,#10H
DVD2:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0
JC DVD3
MOV R2,A
MOV R0,A
MOV A,R1
MOV R3,A
INC R5
DVD3:
DJNZ B,DVD2
MOV A,R2
MOV R0,A
MOV 40H,R5
MOV 41H,R0
MOV 42H,R1
CLR OV
JNB 00H,DIED
POP PSW
RET
DIED:
;============================================
INIT: MOV
A,#3CH
A,#0CH
A,#06H
LCALL C51
MOV
LCALL C51
MOV
LCALL C51
RET
DDW:
PUSH ACC
MOV DPTR,#LCD_BUSY_RD
DDW1:
ACC.7,DDW1
MOVX A,@DPTR
JB
POP ACC
;ACALL DELAY
RET
C51:
ACALL DDW
MOV DPTR,#LCD_CMD_WR
MOVX @DPTR,A
RET
C51DDR:
PUSH DPH
PUSH DPL
ACALL DDW
MOV DPTR,#LCD_DATA_WR
MOVX @DPTR,A
POP DPL
POP DPH
RET
;FLASH: MOV A,#08H
;关闭显示
;ACALL C51
;ACALL DELAY4
;MOV A,#0CH
;ACALL C51
;ACALL DELAY4
;DJNZ R4,FLASH
;RET
;DELAY: PUSH PSW
;开显示,关闭光标
;SETB RS0
;SETB RS1
;MOV
R6,#1
;延时子程序 2.5ms。
;5
;D1:
MOV
R7,#1
;248
;DJNZ R7,$
;DJNZ R6,D1
;POP PSW
;RET
;DELAY4: PUSH PSW
;SETB RS0
;SETB RS1
;MOV R5,#1
;DL6:
;MOV R6,#1
;DL7:
;MOV R7,#1
;DL8:
;
DJNZ R7,DL8
;DJNZ R6,DL7
;DJNZ R5,DL6
;POP PSW
;RET
;0.81ms.
;40
;100
;100
DEL:
PUSH PSW
;延时 50ms
;200
;123
SETB RS0
SETB RS1
MOV R7,#200
DEL1: MOV R6,#123
NOP
DEL2:
DJNZ R6,DEL2
DJNZ R7,DEL1
POP PSW
RET
HASC: MOV B,A
LCALL HAS1
XCH A,B
SWAP A
HAS1:
ANL A,#0FH
ADD A,#90H
DA A
ADDC A,#40H
DA A
RET
CHASCII:MOV A,@R0
ORL A,#30H