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

📄 dyb.asm

📁 双路数字电压表
💻 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 + -