📄 dyb.asm
字号:
;********************************************************************************
;* 标题: 数字电压表 *
;* 显示单元地址: 33H~通道指示,32H~个位,31H~十分位,30H~百分位. *
;********************************************************************************
LED EQU P0
AD_CS BIT P3.4
AD_CLK BIT P3.3
AD_DAT BIT P3.2
SDATA BIT P0.1
SCLK BIT P0.0
K1 BIT P3.0
CH_XZ BIT 40H
ORG 0000H
AJMP START
;--------------------------------------------------------
START: MOV SP,#60H
MOV A,#00H
MOV 20H,A
MOV 30H,A
MOV 31H,A
MOV 32H,A
MOV 33H,A
MOV P0,#0FFH
START2: JB K1,START3
CPL CH_XZ
JNB K1,$
START3: LCALL AD_CONV
LCALL AD_CHULI
LCALL ADPLAY
AJMP START
;---------------------------------------------------------
AD_CONV: SETB AD_CS ;ADC0832初始化,一个转换周期开始
CLR AD_CLK
NOP
NOP
CLR AD_CS ;CS置0,片选有效
NOP
SETB AD_DAT ;DI置1,起始位
SETB AD_CLK ;第一个脉冲
NOP
NOP
CLR AD_DAT ;在负跳变之前加一个DI反转操作
CLR AD_CLK
SETB AD_DAT ;DI置1,设为单通道
NOP
NOP
SETB AD_CLK ;第二个脉冲
NOP
NOP
CLR AD_CLK
NOP
JB CH_XZ,CH1_IN
CLR AD_DAT ;DI置0,选择通道0
MOV 33H,#0AH
NOP
AJMP NEXT
CH1_IN: SETB AD_DAT
MOV 33H,#0BH
NEXT: NOP
SETB AD_CLK ;第三个脉冲
NOP
NOP
CLR AD_CLK
SETB AD_DAT
NOP
NOP
SETB AD_CLK ;第四个脉冲
NOP
NOP
MOV R1,#8 ;计数器初值,读取8位数据,
AD_READ: CLR AD_CLK ;下降沿时,串行数据移出1位
NOP
NOP
MOV C,AD_DAT ;读取DO端数据
RLC A ;C移入A,高位在前
SETB AD_CLK ;下一个脉冲
NOP
NOP
DJNZ R1,AD_READ ;没读完继续
SETB AD_CS
CLR AD_CLK ;拉低CLK端
SETB AD_DAT ;拉高数据端,回到初始状态
MOV 20H,A ;转换结果发给20H
RET
;------------------------------------------------------
AD_CHULI: MOV A,20H
MOV B,#51
DIV AB
MOV 32H,A
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,AD_CHULI1
ADD A,#5
AD_CHULI1: MOV 31H,A
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,AD_CHULI2
ADD A,#5
AD_CHULI2: MOV 30H,A
RET
;---------------------------------------------------
ADPLAY: MOV R0,#30H ;获得显示单元首地址
MOV R4,#7FH ;从第一个数码管开始
MOV DPTR,#TAB
DISP: MOV LED,#0F0H
MOV A,@R0
MOVC A,@A+DPTR
MOV 21H,R4
JB 21H.5,WORD
SETB ACC.7
WORD: MOV R5,#8
NEXTB: RLC A
MOV SDATA,C
SETB SCLK
NOP
CLR SCLK
DJNZ R5,NEXTB
INC R0
MOV A,R4
ANL LED,A
LCALL DELAY1MS
RR A
MOV R4,A
JB ACC.3,DISP ;4位数码管
RET ;显示完成,返回
;---------------------------------------------------
DELAY1MS: MOV R6,#5 ;延时子程序
DEL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
;---------------------------------------------------
TAB: DB 3FH,06H,5BH,4FH,66H ;0~4
DB 6DH,7DH,07H,7FH,6FH ;5~9
DB 01H,08H ;通道指示符号
;---------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -