proteus仿真电路图附在结尾
程序
- ORG 0000H
- SJMP MAIN
- ORG 0003H
- LJMP PINT0
- MAIN:MOV 50H,#19H
- MOV 54H,#78H
- MOV DPTR,#7FF8H
- MOV 51H,DPH
- MOV 52H,DPL
- MOV R0,#04H
- MOV 53H,#00H
- MOV R7,#00H
- SETB EA
- SETB IT0
- SETB EX0
- L4: MOV R1,#00H ;R1 存放十六进制转换成十进制后的低两位
- MOV R2,#00H ;R2 存放十六进制转换成十进制后的高两位
- MOV R3,#0FFH ;循环显示十进制数
- MOV R4,#00H ;存放 A/D 转换后的十六进制数
- MOV R5,#00H ;存放 0.5 相加后的数
- MOVX @DPTR,A ;开始 A/D 转换
- LCALL DELAY ;调用延时大于 A/D 转换的时间
- MOVX A,@DPTR ;取 A/D 转换后的十六进制数
- INC DPTR ;A/D 转换芯片的地址加一
- PUSH DPL ;压入堆栈
- PUSH DPH
- DEC R0 ;4 路转换的次数减一
- JZ SB2 ;判断是否是 0V
- MOV R4,A
- L1:MOV A,R1 ;进行十六进制到十进制的调整
- ADD A,50H ;每次加 19
- DA A
- MOV R1,A
- JC L2 ;如果溢出则跳转到 L2
- MOV A,R5 ;进行 0.5V 相加
- ADD A,54H
- DA A
- MOV R5,A
- JC L3 ;如果溢出则跳转到 L3
- SB1:DJNZ R4,L1 ;判断十六进制数是否转换完成,如果没有则循环
- MOV A,R5
- SWAP A
- ANL A,#0FH
- MOV B,R1
- ADD A,B
- DA A
- MOV R1,A
- SB2:LCALL DISP
- LCALL DJW
- DJNZ R3,SB2
- POP DPH
- POP DPL
- MOV A,53H
- INC A
- MOV 53H,A
- CJNE R0,#00H,L4
- LJMP MAIN
- L2: CLR C
- MOV A,R2
- ADD A,#01H
- DA A
- MOV R2,A
- LJMP SB1
- L3: CLR C ;0.5V 相加溢出后进位
- MOV A,R1
- ADD A,#01H
- DA A
- MOV R1,A
- LJMP SB1
- DISP:MOV A,R1 ;显示电压子程序
- SWAP A
- ANL A,#0FH
- MOV DPTR,#TAB1
- MOVC A,@A+DPTR
- CLR P3.0
- MOV P1,A
- LCALL DELAY
- SETB P3.0
- MOV A,R2
- ANL A,#0FH
- MOV DPTR,#TAB1
- MOVC A,@A+DPTR
- CLR P3.1
- MOV P1,A
- LCALL DELAY
- SETB P3.1
- MOV A,R2
- SWAP A
- ANL A,#0FH
- MOV DPTR,#TAB2
- MOVC A,@A+DPTR
- CLR P3.4
- MOV P1,A
- LCALL DELAY
- SETB P3.4
- RET
- DJW:MOV A,53H ;显示第几路转换电压子程序
- MOV DPTR,#TAB1
- MOVC A,@A+DPTR
- CLR P3.5
- MOV P1,A
- LCALL DELAY
- SETB P3.5
- RET
- INTV: PUSH ACC ;只显示其中一路中断
- PUSH 53H
- MOV 53H,#00H
- CX2: MOV R1,#00H
- MOV R2,#00H
- MOV R3,#0FFH
- MOV R4,#00H
- MOV DPH,51H
- MOV DPL,52H
- MOVX @DPTR,A
- LCALL DELAY
- MOVX A,@DPTR
- MOV R4,A
- JZ SB22
- L11: MOV A,R1
- ADD A,50H
- DA A
- MOV R1,A
- JC L22
- MOV A,R5 ;进行 0.5V 相加
- ADD A,54H
- DA A
- MOV R5,A
- JC L33
- SB11:DJNZ R4,L11
- MOV A,R5
- SWAP A
- ANL A,#0FH
- MOV B,R1
- ADD A,B
- DA A
- MOV R1,A
- SB22:LCALL DISP
- LCALL DJW
- JNB P3.3,EXIT
- DJNZ R3,SB22
- JNB P3.2,CX1
- LJMP CX2
- L22:CLR C
- MOV A,R2
- ADD A,#01H
- DA A
- MOV R2,A
- LJMP SB11
- L33:CLR C
- MOV A,R1
- ADD A,#01H
- DA A
- MOV R1,A
- LJMP SB11
- CX1:INC R7
- MOV A,53H
- INC A
- MOV 53H,A
- MOV DPH,51H
- MOV DPL,52H
- INC DPTR
- MOV 51H,DPH
- MOV 52H,DPL
- CJNE R7,#04H,CX2
- MOV R7,#00H
- MOV 53H,#01H
- MOV DPTR,#7FF8H
- MOV 51H,DPH
- MOV 52H,DPL
- LJMP CX2
- EXIT:POP 53H
- POP ACC
- RETI
- DELAY:MOV R6,#1H ; 延时子程序
- D1:MOV R5,#50H
- D2:NOP
- NOP
- DJNZ R5,D2
- DJNZ R6,D1
- RET
- TAB1:DB 3FH,06H,5BH,4FH,66H ;码表
- DB 6DH,7DH,07H,7FH,6FH
- TAB2:DB 0BFH,86H,0DBH,0CFH,0E6H ;小数点的段码表
- DB 0EDH,0FDH,87H,0FFH,0EFH
- END
复制代码 全部资料51hei下载地址:
基于单片机的数字电压表.zip
(29.46 KB, 下载次数: 32)
|