本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
谁帮我看看我的数字直流电压表乱码怎么回事
这是我的程序代码 原理图见附件
- CLK BIT P3.5;定义CLK
- ORG 0000H
- LJMP MAIN ;转入主程序
- ORG 0013H
- LJMP AGA ; ;中断TNT1,用于读取转换后的数据
- ORG 001BH
- LJMP WQ ;T1中断入口,用于产生时钟和显示
- ;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ORG 0030H
- MAIN: MOV TMOD,#10H ;工作方式1
- MOV TH1,#0FFH ;产生500HZ
- MOV TL1,#38H
- SETB EA ;开总中断.
- SETB ET1 ; 开T1中断
- SETB TR1 ;启动T1
- SETB EX1 ;开外部中断1
- SETB IT1 ; 边沿触发
- MOV DPTR ,#1FFFH ;指向通道INC0
- MOVX @DPTR,A ;启动转换
- LOOP: LCALL DISPLAY ;调用显示程序.
- SJMP LOOP
- ;;;;;;;;外部1中断,;显示数据转为3位BCD码子程序
- ;;显示数据转为3位BCD码存入33H,34H,35H(最大值约为5.00V);;;;;;;;;
- AGA: MOV DPTR,#1FFFH
- MOVX A,@DPTR ;读取转换后的数据.
- MOV B,#51 ;255÷51=5.00V运算
- DIV AB
- MOV 33H,A ; ;个位数放入33H
- MOV A,B ; ;余数大于19H,F0为1,乘法溢出,结果加5
- CLR F0
- SUBB A,#1AH
- MOV F0,C
- MOV A,#10
- MUL AB
- MOV B,#51
- DIV AB
- JB F0,LOOP2
- ADD A,#5
- LOOP2: MOV 34H,A ; ;小数后第一位放入34H
- MOV A,B
- CLR F0
- SUBB A,#1AH
- MOV F0,C
- MOV A,#10
- MUL AB
- MOV B,#51
- DIV AB
- JB F0,LOOP3
- ADD A,#5H
- LOOP3: MOV 35H,A ; ;小数后第二位放入35H
- MOVX @DPTR,A ; 启动转换
- RETI
- ;;;;;;;;;;;;显示程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- DISPLAY: MOV R1,#33H ;指向显示数据首址
- MOV R0,#0FEH ;扫描控制字初值
- PLAY: MOV A,R0 ;扫描字放入A
- MOV P2,A ;从P2口输出
- MOV A,@R1 ;取显示数据到A
- MOV DPTR,#TAB ;取段码表地址
- MOVC A,@A+DPTR ;查显示数据对应段码
- CJNE R0,#0FEH,PAP ; 查看是第一位否.
- ORL A,#80H ;是,则取小数点.
- PAP: MOV P1,#0FFH ;防闪烁.
- RL A ;A中数据循环左移
- MOV R0,A ;放回R5内
- AJMP PLAY ;跳回PLAY循环
- ENDOUT: RET
- TAB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 延时程序
- ;1MS延时程序,LED显示程序用
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- DL1MS: MOV R6,#14H
- DL1: MOV R7,#19H
- DL2: DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- ;;T1定时器中断服务程序,用于给ADC0809产生时钟周期;;;
- WQ: MOV TH1,#0FFH
- MOV TL1,#38H
- CPL CLK ;取反.
- RE: RETI
- END
复制代码 |
-
-
小数点1.rar
70.5 KB, 下载次数: 11, 下载积分: M币 -5
数字电压表
|