⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.txt

📁 基于弹片机的数字电压表的程序设计
💻 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 + -