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

📄 1.asm

📁 采用ADC0809制作数字电压表
💻 ASM
字号:
;********************************
;端口定义
;********************************
       EOC      EQU     P2.0H      ;定义ADC0809控制端口
       ALE      EQU     P3.3H
       ST       EQU     P3.4H
       OE       EQU     P3.5H

       SHUMA_4  DATA    41H       ;定义数码显示各位的读取代码
       SHUMA_3  DATA    42H
       SHUMA_2  DATA    43H
       SHUMA_1  DATA    44H
;********************************
;开始
;********************************

                ORG     0000H
                LJMP    START
                ORG     0003H
                RETI               ;中断返回
                ORG     000BH
                RETI
                ORG     0013H
                RETI
                ORG     001BH
                RETI
                ORG     0023H
                RETI
                ORG     002BH
                RETI
                ORG     0030H

;********************************
;主程序
;********************************

START:          CLR     P3.0H
                SETB    P3.1H
                CLR     P3.2H

MAIN:           LCALL   CLEAN
                LCALL   KEY
                CLR     EA         ;禁止所有中断
                LCALL   ADCCAIJI   ;采集数据
                LCALL   SJCL       ;处理数据
                LCALL   DISP       ;显示数据
                AJMP    MAIN

;********************************
;初始化所有变量
;********************************

CLEAN:          MOV     P0,#0FFH
                MOV     P1,#0FFH
                MOV     P2,#0FFH
                CLR     ALE
                CLR     ST
                CLR     OE

                
                RET
                

;********************************
;检测按建
;********************************                

KEY:            
                
                JNB     P2.3H,KEY1
                JNB     P2.2H,KEY2
                JNB     P2.1H,KEY3
                RET
                
KEY1:           LCALL   DELAY
                JNB     P2.3H,KEY11
                RET
KEY11:          CLR     P3.0H
                SETB    P3.1H
                CLR     P3.2H
                RET

KEY2:           LCALL   DELAY
                JNB     P2.2H,KEY22
                RET
KEY22:          SETB    P3.0H
                CLR     P3.1H
                CLR     P3.2H
                RET
                
KEY3:           LCALL   DELAY
                JNB     P2.1H,KEY33
                RET
KEY33:          CLR     P3.0H
                CLR     P3.1H
                CLR     P3.2H
                RET                
                   
                 
;********************************
;采集数据
;********************************

ADCCAIJI:       SETB    ALE
                NOP
                NOP
                NOP
                CLR    ALE
                SETB   ST
                NOP
                NOP
                NOP
                CLR    ST

WAIT:           JB      EOC,MOVD  ;等待AD转换结束
                AJMP    WAIT

MOVD:           SETB    OE         ;开启采集
                MOV     A,P1
                MOV     21H,A

                MOV     P0,#0FFH   ;端口复位
                MOV     P1,#0FFH
                MOV     P2,#0FFH
                

                RET


;********************************
;数据处理
;********************************

SJCL:           MOV     A,21H
                MOV     B,#0C4H        ;乘以196(5V/255*10000)
                MUL     AB
                MOV     31H,A         ;将低4位数据存放于31H
                MOV     32H,B         ;将高4位数据存放于32H

;***********************************
;将所读入的二进制数转化成BCD码
;***********************************
BCD:       MOV     R3,#10H
           MOV     35H,#00H     ;最低两位存放地址
           MOV     36H,#00H     ;中间两位存放地址
           MOV     37H,#00H     ;最高两位存放地址

BCD0:      CLR     C
           MOV     A,31H
           RLC     A
           MOV     31H,A
           MOV     A,32H
           RLC     A
           MOV     32H,A

           MOV     A,35H
           ADDC    A,35H
           DA      A
           MOV     35H,A

           MOV     A,36H
           ADDC    A,36H
           DA      A
           MOV     36H,A

           MOV     A,37H
           ADDC    A,37H
           DA      A
           MOV     37H,A

           DJNZ    R3,BCD0        ;2个字节转化16次
;***********************************
; 获得数码显示数据的代码
;***********************************
           MOV     A,35H          ;获得数码显示第4位数据的代码
           ANL     A,#0F0H
           SWAP    A
           MOV     SHUMA_4,A      ;存放在41H

           MOV     A,36H          ;获得数码显示第3位数据的代码
           ANL     A,#0FH
           MOV     SHUMA_3,A      ;存放在42H

           MOV     A,36H          ;获得数码显示第2位数据的代码
           ANL     A,#0F0H
           SWAP    A
           MOV     SHUMA_2,A      ;存放在43H

           MOV     A,37H          ;获得数码显示第1位数据的代码
           ANL     A,#0FH
           MOV     SHUMA_1,A      ;存放在44H

           RET


;********************************
;数码显示
;********************************

DISP:
           MOV     P2,#0FFH       ;端口初始化
           MOV     P0,#0FFH

           MOV     P2,#0EFH      ;开通P2.7(COM1)
           MOV     A,SHUMA_4
           MOV     DPTR,#TAB
           MOVC    A,@A+DPTR
           MOV     P0,A
           LCALL   DL1MS
           MOV     P2,#0FFH       ;端口初始化
           MOV     P0,#0FFH

           MOV     P2,#0DFH      ;开通P2.6(COM2)
           MOV     A,SHUMA_3
           MOV     DPTR,#TAB
           MOVC    A,@A+DPTR
           MOV     P0,A
           LCALL   DL1MS
           MOV     P2,#0FFH       ;端口初始化
           MOV     P0,#0FFH

           MOV     P2,#0BFH      ;开通P2.5(COM3)
           MOV     A,SHUMA_2
           MOV     DPTR,#TAB
           MOVC    A,@A+DPTR
           MOV     P0,A
           
           LCALL   DL1MS
           MOV     P2,#0FFH       ;端口初始化
           MOV     P0,#0FFH

           MOV     P2,#07FH      ;开通P2.4(COM4)
           MOV     A,SHUMA_1
           MOV     DPTR,#TAB
           MOVC    A,@A+DPTR
           MOV     P0,A
           CLR     P0.7
           LCALL   DL1MS
           MOV     P2,#0FFH       ;端口初始化
           MOV     P0,#0FFH

           RET

;********************************
;数据
;********************************
TAB:       DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H


;********************************
;延时程序
;********************************

DL1MS:     MOV R6,#14H
  DL1MS1:  MOV R7,#19H
    DL1MS2:DJNZ R7,DL1MS2
           DJNZ R6,DL1MS1
           RET

DL10MS:    MOV R1,#30H
  DL10MS1: MOV R0,#0FFH
   DL10MS2:DJNZ R0,DL10MS2
           DJNZ R1,DL10MS1
           RET


DS1S:     MOV  R5,#25H
  DL1S1:   MOV  R4,#40H
  DL1S2:   MOV  R3,#250H
  DL1S3:   DJNZ  R3,DL1S3
           DJNZ  R4,DL1S2
           DJNZ  R5,DL1S1
           RET
           
DELAY:
            MOV R6,#10
D1:         MOV R7,#248
            DJNZ R7,$
            DJNZ R6,D1
            RET           

           END

⌨️ 快捷键说明

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