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

📄 dianyabiao.asm

📁 电压表
💻 ASM
字号:
SCLK BIT P1.2;A/D,D/A转换时钟
DIO BIT P1.3;A/D转换数据输出及D/A转换的数字量输出
ADCS BIT P1.4;A/D转换器的使能
ADTEMP EQU 30H
;下面四个地址用于存放测得电压转换后的电压值的四位
VOL0 EQU 31H;整数位
VOL1 EQU 33H;最高小数位
VOL2 EQU 34H
VOL3 EQU 35H

;用36H-45H的存储空间存储AD采样的数据,并且42H存最小值,49H
;存最大值
ADDATAH EQU 46H
ADDATA EQU 47H

ORG 2000H
DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 06H,05H,04H,03H,02H,01H,00H,38H

ORG 0000H
LJMP START


START:
   MOV SP,#60H

   MOV 31H,#00H
   MOV 32H,#2EH;小数点对应lcd的字符码
   MOV 33H,#00H
   MOV 34H,#00H
   MOV 35H,#00H
   LCALL LCDINI
   LCALL WCG
LOOP:
   ;LCALL AD
   LCALL GETAD
   LCALL FILTER
   LCALL TRANSDATA
   LCALL WDD
   LCALL DELAY
   LCALL DELAY
   LJMP LOOP

BF:;检测忙标志BF
   CLR A
   MOV DPTR,#0A001H
   MOVX A,@DPTR
   JB ACC.7,BF
   RET

;写数据到指令寄存器IR
;R1:暂存指令码
WI:
   MOV A,R1
   MOV DPTR,#0A000H
   MOVX @DPTR,A
   RET

;写数据到数据寄存器DR
;R2:暂存字符码或字符字模数据	
WD:
   MOV A,R2
   MOV DPTR,#0A002H
   MOVX @DPTR,A
   RET

DELAY:
   MOV R7,#0FFH
LOOP0:
   MOV R6,#0FFH
   DJNZ R6,$
   DJNZ R7,LOOP0
   RET

;写自定义字符字模数据到CGRAM
WCG:
   MOV R1,#40H
   LCALL BF
   LCALL WI
   MOV R4,#00H
LOOP4:
   MOV DPTR,#TAB
   MOV A,R4
   MOVC A,@A+DPTR
   MOV R2,A
   LCALL BF
   LCALL WD
   INC R4
   CJNE R4,#3FH,LOOP4
   RET

;指令初始化模块
LCDINI:
   MOV R3,#03H
INITO:
   MOV R1,#30H; 功能设置
   LCALL WI
   DJNZ R3,INITO
   MOV R1,#01H;清显示
   LCALL BF
   LCALL WI
   MOV R1,#06H;  输入方式设置:AC自动加1
   LCALL BF
   LCALL WI
   MOV R1,#0CH;   开显示
   LCALL BF
   LCALL WI
   RET


WDD:
LOOP2:
   MOV R1,#80H
   LCALL BF
   LCALL WI
   MOV R0,#31H
LOOP1:
   MOV A,@R0
   MOV R2,A
   LCALL BF
   LCALL WD
   INC R0
   CJNE R0,#36H,LOOP1
   RET


ADDELAY:
   MOV R5,#20
ADDELAY1: DJNZ R5,ADDELAY1;延时24个振荡周期
   RET

AD:
   SETB ADCS
   ACALL ADDELAY
   CLR ADCS
   ACALL ADDELAY
   MOV R2,#10
RR0:
   SETB SCLK
   NOP
   CLR SCLK
   DJNZ R2,RR0
   ACALL ADDELAY
   MOV A,#00
   MOV C,DIO
   RLC A
   SETB SCLK
   NOP
   CLR SCLK
   MOV C,DIO
   RLC A
   MOV ADDATAH,A
   MOV R2,#8
   MOV A,#00
RR2:
   SETB SCLK
   NOP
   CLR SCLK
   MOV C,DIO
   RLC A
   DJNZ R2,RR2
   MOV ADDATA,A
   RET

GETAD:;获取八组AD数据,间隔1152个机器周期
   LCALL AD
   MOV 36H,ADDATA
   MOV 37H,ADDATAH
   LCALL GETDELAY
   LCALL AD
   CLR C
   MOV A,36H
   SUBB A,ADDATA
   MOV A,37H
   SUBB A,ADDATAH
   JNC GETAD00
   MOV 44H,ADDATA
   MOV 45H,ADDATAH
   SJMP GETAD01
GETAD00:
   MOV 44H,36H
   MOV 45H,37H
   MOV 36H,ADDATA
   MOV 37H,ADDATAH
GETAD01:
   LCALL GETDELAY

   MOV R0,#38H
GETONE:
   LCALL AD
LOWER:
   CLR C
   MOV A,36H
   SUBB A,ADDATA
   MOV A,37H
   SUBB A,ADDATAH
   JC BIGGER
   MOV @R0,36H
   INC R0
   MOV @R0,37H
   INC R0
   MOV 36H,ADDATA
   MOV 37H,ADDATAH
   SJMP CONTINUE
BIGGER:
   CLR C
   MOV A,44H
   SUBB A,ADDATA
   MOV A,45H
   SUBB A,ADDATAH
   JNC MIDDLE
   MOV @R0,44H
   INC R0
   MOV @R0,45H
   INC R0
   MOV 44H,ADDATA
   MOV 45H,ADDATAH
   SJMP CONTINUE
MIDDLE:
   MOV @R0,ADDATA
   INC R0
   MOV @R0,ADDATAH
   INC R0
CONTINUE:
   LCALL GETDELAY
   CJNE R0,#44H,GETONE
   RET

GETDELAY:
   MOV R5,#6FH
GETDELAY0:
   NOP
   NOP
   DJNZ R5,GETDELAY0
   RET

FILTER:;滤波子程序
   MOV R0,#38H
   MOV 48H,#00H;存放中间的余数
   MOV ADDATA,#00H
   MOV ADDATAH,#00H
CONFIL0:
   MOV A,@R0
   MOV B,#06H
   DIV AB
   ADD A,ADDATA
   MOV ADDATA,A
   MOV A,B
   ADD A,48H
   MOV 48H,A
   INC R0
   MOV A,@R0
   ADD A,ADDATAH
   MOV ADDATAH,A
   INC R0
   CJNE R0,#44H,CONFIL0
   MOV A,48H
   MOV B,#06H
   DIV AB
   ADD A,ADDATA
   MOV ADDATA,A
   MOV A,ADDATAH
   MOV B,#06H
   DIV AB
   MOV ADDATAH,A
   MOV A,B
   JZ FILOUT
   MOV B,#43
   MUL AB
   CLR C
   ADDC A,ADDATA
   MOV ADDATA,A
   MOV A,ADDATAH
   ADDC A,#00H
   MOV ADDATAH,A
FILOUT:
   RET


TRANSDATA:;用于将数字量转换为电压值
   MOV A,ADDATA
   ANL A,#01H
   MOV B,#05H
   MUL AB
   ADD A,#30H;转化为lcd的显示字符码
   MOV VOL3,A
   MOV VOL0,ADDATAH;本来是addatah*1
   MOV A,ADDATAH
   MOV B,#02H
   MUL AB
   MOV VOL1,A
   MOV A,ADDATAH
   MOV B,#08H
   MUL AB
   MOV VOL2,A
   MOV A,ADDATA
   ANL A,#0FEH
   RR A
   MOV B,#10
   DIV AB
   ADD A,VOL1
   MOV VOL1,A
   MOV A,B
   ADD A,VOL2
   MOV B,#10
   DIV AB
   ADD A,VOL1
   MOV VOL1,A
   MOV A,B
   ADD A,#30H;转化为lcd的显示字符码
   MOV VOL2,A
   MOV A,VOL1
   MOV B,#10
   DIV AB
   ADD A,VOL0
   ADD A,#30H;转化为lcd的显示字符码
   MOV VOL0,A
   MOV A,B
   ADD A,#30H;转化为lcd的显示字符码
   MOV VOL1,A
   RET











TAB:
DB 1FH,00H,00H,00H,00H,00H,00H,00H
DB 00H,1FH,00H,00H,00H,00H,00H,00H
DB 00H,00H,1FH,00H,00H,00H,00H,00H
DB 00H,00H,00H,1FH,00H,00H,00H,00H
DB 00H,00H,00H,00H,1FH,00H,00H,00H
DB 00H,00H,00H,00H,00H,1FH,00H,00H
DB 00H,00H,00H,00H,00H,00H,1FH,00H
DB 00H,00H,00H,00H,00H,00H,00H,1FH


END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -