;输入电压经89k电阻和10k精密电位器分压
;测试电压为0~51v,可用表校对
DO BIT P1.4
DI BIT P1.5
CLK BIT P1.3
CS BIT P1.6
 MOV  DPTR,#TABLE
 MOV  R4,#30
MAIN:DJNZ R4,LOOD
      MOV  R4,#30
      CALL CADB  ;调用转换程序
      MOV  36H,A
     CALL L1
     CALL L3
     CALL DISP
LOOD:CALL SCAN  ;调用显示扫描
     JMP MAIN
CADB:CLR CS
      MOV  A,#03h
      MOV  R7,#01h ;写3位指令
 LOOPB1:CLR CLK
        RRC A
         MOV  DI,C
        NOP
        SETB CLK
        DJNZ R7,LOOPB1
        CLR CLK
        NOP
        SETB CLK
         MOV  R7,#08H ;读8位数据
  LOOPB2:CLR CLK
         MOV  C,DO
        RLC A
        SETB CLK
        DJNZ R7,LOOPB2
        SETB CS
        RET
  L1:  CLR C         ;十进制转换
        MOV  30H,#00
        MOV  31H,#00
        MOV  R2,#08H
  NEXT:RLC A
        MOV  R3,A
        MOV  A,30H
       ADDC A,30H
       DA A
        MOV  30H,A
        MOV  A,31H
       ADDC A,31H
        MOV  31H,A
        MOV  A,R3
       DJNZ R2,NEXT
  L2:   MOV  A,30H
       ADD A,30H
      DA A
       MOV  30H,A
       MOV  A,31H
      ADDC A,31H
      DA A
       MOV  31H,A
      RET
 L3: MOV  A,31H
     MOV  B,#10H
    DIV AB
     MOV  21H,A
     MOV  22H,B
     MOV  A,30H
     MOV  B,#10H
    DIV AB
     MOV  23H,A
     MOV  24H,B
    RET
  SCAN: MOV  p2,#11110111b ;扫描子程序
      MOV  a,22H
      MOV C A,@A+DPTR
      MOV  p0,a
     call delay1
      MOV  p2,#11111011b
      MOV  a,22H
      MOV c a,@a+dptr
     ORL A,#80H
      MOV  p0,a
     call delay1
      MOV  P2,#11111101B
      MOV  A,23H
      MOV C A,@A+DPTR
      MOV  P0,A
     CALL DELAY1
      MOV  P2,#11111110B
      MOV  A,24H
      MOV C A, @A+DPTR
      MOV  P0,A
     CALL DELAY1
        RET
  DISP:
        RET
DELAY1: MOV  R6,#5    ;扫描延时
D3:     MOV  R7,#248
        DJNZ R7,$
       DJNZ R6,D3
       RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H    ;共阳字码表
END
数字电压表程序