📄 dyb.asm
字号:
ORG 0000H
CE EQU P0.4 ;伪指令定义ISD25120管脚
PD EQU P0.5
PR EQU P0.7
EOM EQU P0.6
AJMP MAIN
MAIN: MOV 20H,#00H ;定义按键防抖动寄存器初值
LCALL CAIJI ;调用数据采集子程序
LCALL TV ;调用显示子程序
AJMP MAIN
;*****************************************************************
;
; 以下为子程序
;
;*****************************************************************
;*******************************************************
; 电压采集程序 CAIJI
; 输入数据:P1.3-P1.0
; 位选:P1.7-P1.4
; 出口参数:数据存放在10H-13H
;******************************************************
CAIJI: MOV R3,#01FH;循环采集次数
CAI: MOV P0,#0FH;屏蔽高位
MOV P1,#0FFH
NOP
MOV A,P1
JB ACC.4,LOOP1;判断是否千位
JB ACC.5,LOOP2;判断是否百位
JB ACC.6,LOOP3;判断是否十位
JB ACC.7,LOOP4;判断是否个位
AJMP LOOP5
LOOP1: MOV 13H,A;千位值放入13H中
AJMP LOOP5
LOOP2: MOV 12H,A;百位值放入12H中
AJMP LOOP5
LOOP3: MOV 11H,A;十位值放入11H中
AJMP LOOP5
LOOP4: MOV 10H,A;个位值放入10H中
LOOP5: LCALL DELAY1
DJNZ R3,CAI
NOP
RET
;************************************************************
; 显示子程序 TV
; 入口参数:10H-13H
;*************************************************************
TV: MOV P1,#0FH;定义P1口为输入
MOV P0,10H;
MOV P3,#0F7H;显示个位
LCALL DELAY1;延时
MOV P0,11H
MOV P3,#0BH;显示十位
LCALL DELAY1
MOV P0,12H
MOV P3,#0FDH;显示百位
LCALL DELAY1
MOV P0,13H
MOV P3,#0FEH;显示千位
LCALL DELAY1
NOP
KEY: INC 20H
JNB P3.4,HH;判断是否有读音键按下
LJMP TV
HH: MOV A,20H
CJNE A,#30H,KEY;去抖动
LCALL DELAY
LCALL DUYIN;有键按下,调用读音程序
RET
;**********************************************************
; 延时程序
; DELAY1-延时1MS
; DELAY-延时0.1s
;***********************************************************
DELAY1: MOV R7,#02H
K1: MOV R6,#0FFH
K2: DJNZ R6,K2
DJNZ R7,K1
RET
DELAY: MOV R7,#0FFH
K5: MOV R6,#0FFH
K6: DJNZ R6,K6
DJNZ R7,K5
RET
;******************************************
;
; 读音程序 DUYIN
; 入口参数:要读数据放入10H-13H中
;
;******************************************
DUYIN: ANL 10H,#0FH
ANL 11H,#0FH
ANL 12H,#0FH
ANL 13H,#0FH;屏蔽高位
MOV R2,#04H;地址转换4次
MOV R1,20H;转换后地址放入20H-23H中
MOV R0,#10H;数据放在10H-13H中
MOV A,@R0 ;数据给A
MOV DPTR,#TABLE
MOVC A,@A+DPTR;查表
MOV @R1,A;送数
INC R0
DJNZ R2,DUYIN
;***************************************************************
MOV R2,#00H
LCALL DUYIN1;读“现在电压”
LCALL DELAY
;*************************************************************
MOV R2,23H
LCALL DUYIN1;读千位
LCALL DELAY
;***************************************************************
MOV R2,22H
LCALL DUYIN1;读百位
LCALL DELAY
;****************************************************************
MOV R2,#6EH
LCALL DUYIN1;读小数点
LCALL DELAY
;****************************************************************
MOV R2,21H
LCALL DUYIN1;读十位
LCALL DELAY
;****************************************************************
MOV R2,20H
LCALL DUYIN1;读个位
LCALL DELAY
;********************************************************************
MOV R2,#78H
LCALL DUYIN1;读“伏与谢谢使用,请加测试电压”
LCALL DELAY
RET
;********************************************************************
DUYIN1: CLR PR
NOP
NOP
SETB PR
NOP
NOP
MOV P2,R2
NOP
NOP
CLR PD
NOP
NOP
SETB CE
NOP
NOP
CLR CE
NOP
NOP
NOP
SETB CE
NOP
K9: JNB P0.6,K10
AJMP K9
K10: SETB P0.6
NOP
NOP
SETB PD
NOP
RET
;**************************************************************
TABLE:DB 0AH, 14H, 1EH, 28H, 32H
DB 3CH, 46H, 50H, 5AH, 64H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -