📄 ad.txt
字号:
TEMPHIGH EQU 35H
TEMPLOW EQU 34H
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
ACALL LCDINITIAL
MOV 30H, #00H ;采样单元初始化
MOV 31H, #00H
MOV 32H, #00H
MOV 33H, #00H
LOOP:
ACALL ADCON
ACALL HEXTBCD
ACALL LCDDISP
AJMP loop
;////////////////////////
;/////LCD初始化
;////
;////////////////////////////
LCDINITIAL:
MOV DPTR,#7FFCH
ACALL BUSYRD
MOV A,#38H ;系统设置,8位,二行,5×7点阵
MOVX @DPTR,A
ACALL BUSYRD
MOV A,#01H ;清屏
MOVX @DPTR,A
ACALL BUSYRD
MOV A,#02H ;光标回到第一行第一列
MOVX @DPTR,A
ACALL BUSYRD
MOV A,#06H ;显示地址加1模式
MOVX @DPTR,A
ACALL BUSYRD
MOV A,#0FH ;DISPLAY ON
MOVX @DPTR ,A
RET
BUSYRD: ;读忙信号
PUSH DPL
PUSH DPH
MOV DPTR,#7FFDH
READ:
MOVX A,@DPTR
JB ACC.7,READ
POP DPH
POP DPL
RET
;///////////////////////////////////////
;/ AD转换程序,利用查询方式,实时采样四路数据,
;/ 并分别存入30H~33H四个单元中
;///////////////////////////////////////
ADCON:
MOV DPTR,#0DFF8H ;通道0的地址
MOV R7,#4 ;共四路数据
MOV R1,#30H
ADLOOP:
MOVX @DPTR,A ;启动AD转换
nop
nop
JB P3.2,$ ;查询转换是否结束
MOVX A,@DPTR
MOV @R1,A ;存入相应单元
INC R1
INC DPTR
DJNZ R7,ADLOOP
RET
;////////////////////
; / 显示预处理子程序,TEMPHIAH TEMPLOW存放AD转换值与20的乘积
; / R3为转换时所用循环次数16
; /R4 R5分别存放BCD码的低位和高位
;/处理后的结果分别存放入38H~3FH
;/////////////////////////
HEXTBCD:
PUSH ACC ;内容保护
PUSH PSW
MOV R0,#30H ;存放AD转换值的首地址
MOV R1,#38H ;存放BCD码的首地址
MOV R2,#4 ;要转化的AD转换值的个数
HTBCD:
MOV R3,#16 ;一次转化循环次数
MOV R4,#0 ;暂存转化结果的低位
MOV R5,#0 ;;暂存转化结果的高位
CLR C
MOV A,@R0 ;取要转化的AD转换值
MOV B,#20 ;×20
MUL AB
MOV TEMPLOW,A ;积低位存入TEMPLOW单元
MOV TEMPHIGH,B ;积高位存入TEMPHIGH单元
HEX: ;转化程序
MOV A,TEMPLOW
RLC A
MOV TEMPLOW,A
MOV A ,TEMPHIGH
RLC A
MOV TEMPHIGH ,A
MOV A ,R4
ADDC A ,R4
DA A
MOV R4 ,A
MOV A ,R5
ADDC A ,R5
DA A
MOV R5 ,A
DJNZ R3 , HEX ;判断一组数据是否转化完毕
MOV A,R5
MOV @R1 ,A ;存入相应单元
INC R1
MOV A,R4
MOV @R1 ,A
INC R1
INC R0 ;R0指向下一要转化的数据
DJNZ R2 ,HTBCD ;判断是否全部数据都已转化完毕
POP PSW ;完毕,则恢复现场
POP ACC
RET
;///////////////////////////////////////////////
;/LCD显示程序
;///////////////////////////////////////////////
LCDDISP:
MOV R1,#40H
MOV R0 ,#38H
MOV R7 ,#31H ; 编号
ACALL DISPMANAGE
MOV DPTR,#7FFCH ;第一个数据的显示
ACALL BUSYRD
MOV A, #80H ;第一行第一列
MOVX @DPTR,A
ACALL DISP ;显示数据显示缓冲区内的六组数据
INC R7
MOV R1 ,#40H
ACALL DISPMANAGE
MOV DPTR,#7FFCH ;第二个数据的显示
ACALL BUSYRD
MOV A, #88H ;第一行第九列
MOVX @DPTR,A
ACALL DISP ;显示数据显示缓冲区内的六组数据
INC R7
MOV R1 ,#40H
ACALL DISPMANAGE
MOV DPTR,#7FFCH ;第三个数据的显示
ACALL BUSYRD
MOV A, #0C0H ;第二行第一列
MOVX @DPTR,A
ACALL DISP ;显示数据显示缓冲区内的六组数据
INC R7
MOV R1 ,#40H
ACALL DISPMANAGE
MOV DPTR,#7FFCH ;第四个数据的显示
ACALL BUSYRD
MOV A ,#0C8H ;第二行第九列
MOVX @DPTR,A
ACALL DISP ;显示数据显示缓冲区内的六组数据
RET
;////////////////////////////////////////////////
;/把相应单元中的双字节BCD码转化为相应的显示数字,并
;/分别存入40H 41H 42H 43H 44H 45H
;///////////////////////////////////////////////
DISPMANAGE :
MOV R6,#2
MOV A,R7
MOV @R1,A ;写入编号
INC R1
MOV @R1,#3AH ;写入“:"
INC R1
MLOOP:
ACALL ONETOTWO ;一个字节BCD码分为两个字节中
INC R0
INC R1
DJNZ R6,MLOOP
RET
;//////////////////////////////////////////////////
;/把一个BCD码拆为两个BCD码,并转化为要显示的数据代码
;/如一个字节内容为35H,则要转化为33H(3的ACALL码)和35H(5的ACALL码)
;//////////////////////////////////////////////////
ONETOTWO:
MOV A,@R0
SWAP A
ANL A,#0FH
ADD A,#30H
MOV @R1,A
INC R1
MOV A,@R0
ANL A ,#0FH
ADD A,#30H
MOV @R1,A
RET
;///////////////////////////////////////////////////
;/ 显示数据缓冲区的相关内容,共6个 数据
;/////////////////////////////////////////////////////
DISP:
MOV R1,#40H
MOV R2,#6
MOV DPTR,#7FFEH ;写入数据
DISPLOOP:
ACALL BUSYRD
MOV A,@R1
MOVX @DPTR,A
INC R1
DJNZ R2,DISPLOOP
RET
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -