📄 liuweiwei.asm
字号:
COM EQU 50H
DAT EQU 51H
E EQU P2.3
RW EQU P2.2
RS EQU P2.1
ORG 0000H
LJMP START
ORG 000BH
LJMP ADC ;50M秒 做一次AD转化
START: MOV TMOD, #01H ;定时器T0设为方式1
MOV TH0 , #3CH
MOV TL0 , #80H
MOV TCON, #00H ; 电平触发方式
MOV SP,#60H
LCALL SETLCD
MOV IE,#82H ;开中断 , 定时器T0允许中断
SETB TR0 ;启动定时器
LCALL N1
LOOP: MOV A,46H ;46H=AD转换后的数字量
CJNE A,47H,LOP1 ;不等于跳转
LCALL XS
LJMP LOOP
LOP1: LCALL MUL_BCD
LCALL XS
LJMP LOOP
MUL_BCD: MOV 47H,46H
MOV A,47H
;乘法 加 BCD 转化
MOV B,#196
MUL AB
MOV R7,A
MOV R6,B
NOP
;入口条件:待转换的双字节十六进制整数在 R6 、 R7 中。
;出口信息:转换后的三字节BCD码整数在 R3 、 R4 、 R5 中。
;影响资源: PSW 、 A 、 R2 ~ R7 堆栈需求: 2字节
HB2: CLR A;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到 CY 中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
NOP ;BCD转化完毕,以下是对显示数据的处理
;把压缩BCD码 变成BCD码,存入40——43 显示缓存
MOV A,R3
ADD A,#30H
MOV 40H,A ;个位
MOV 41H,#0A5H
MOV A,R4
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 42H,A ;小数 0.
MOV A,R4
ANL A,#0FH ;小数0.0
ADD A,#30H
MOV 43H,A
MOV A,R5
SWAP A
ANL A,#0FH ;小数0.00
ADD A,#30H
MOV 44H,A
MOV A,R5
ANL A,#0FH ;小数0.00
ADD A,#30H
MOV 45H,A
RET
ADC: PUSH A
PUSH 00H
CLR TR0
MOV R0,#70
CLR E
MOV DPTR,#0EFH ;0809地址
MOV A,#0 ;选通道0
MOVX @DPTR,A ; 启动AD转换
LCALL DEL ;等待AD转换
MOVX A,@DPTR ;读取数据
MOV 46H,A
MOV TH0 , #3CH
MOV TL0 , #80H
SETB TR0
POP A
POP 00H
RETI
DEL: DJNZ R0,DEL
MOV R0,#70
RET
DEL1:MOV R7,#250
DEL2:MOV R6,#200
DJNZ R6,$
DJNZ R7,DEL2
RET
SETLCD: MOV COM,#38H ;8位总线,双行显示,5×7点阵
LCALL PR1
MOV COM,#01H ;光标复位,清屏
LCALL PR1
MOV COM,#06H ;光标右移,字不动
LCALL PR1
MOV COM,#0FH;0CH ;开显示,开光标,光标闪
LCALL PR1
RET
;从第一行第N个位置开始显示
N1: MOV COM,#80H ;从第一行第N个位置开始显示
LCALL PR1
MOV R0,#00H ;显示字符串
MOV R1,#16
N2: MOV DPTR,#CHAR
MOV A,R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R0
LCALL DEL1
DJNZ R1,N2
;从第2行第N个位置开始显示
MOV COM,#0C0H
LCALL PR1
MOV R0,#00H ;显示字符串
MOV R1,#15
N3: MOV DPTR,#CHAR1
MOV A,R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R0
LCALL DEL1
DJNZ R1,N3
MOV COM,#0CH ;开显示,开光标,光标闪
LCALL PR1
RET
XS: MOV COM,#089H ;从第一行第10个位置开始显示
LCALL PR1
MOV R1,#40H
LOP5: MOV DAT,@R1
LCALL PR2
INC R1
CJNE R1,#46H,LOP5
RET
PR1: SETB E
MOV p0,#080h ;准备写指令
CLR RS
SETB RW
MOV A,P0
CLR E
JB ACC.7,PR1 ;查询是否为忙 ,等于1跳转
CLR RW
SETB E
MOV P0,COM
CLR E
RET
;写数据
PR2: SETB E
MOV p0,#080h ;查询是否为忙
CLR RS
SETB RW
MOV A,P0
CLR E
JB ACC.7,PR2
SETB RS
CLR RW
SETB E
MOV P0,DAT ;8位总线,双行显示,5×10点阵
CLR E
RET
CHAR: DB "Voltage= ****** " ;定义字符串
CHAR1: DB"DQ-10501-LiuWei"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -