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

📄 8.asm

📁 电压显示 proteus仿真,keil编写程序
💻 ASM
字号:
;8个数码管无扩展芯片移位显示
;*****************************************************************************************************
      kEY       EQU       10H
      KEYBUF    EQU       20H
      FLAG0     EQU       11H
                ORG       0000H
                AJMP      START
                ORG       100H
       START:   MOV       30H,#00H;1位
                MOV       31H,#00H;2位
                MOV       32H,#00H;3位
                MOV       33H,#00H;4位
                MOV       34H,#00H;5位
                MOV       35H,#00H;6位
                MOV       36H,#00H;7位
                MOV       37H,#00H;8位
           LOOP:LCALL     DISPLAY;
                LCALL     KEYINPUT
                MOV       A,FLAG0 ;
                JZ        LOOP    ;检测有无按键
                MOV       37H,36H ; 移位变换
                MOV       36H,35H
                MOV       35H,34H
                MOV       34H,33H
                MOV       33H,32H ;
                MOV       32H,31H ;
                MOV       31H,30H ;
                MOV       30H,KEY ;
                LJMP      LOOP    ;移位完成显示和检测键盘扫描
 ;*********************************************************************************************
 ;键盘扫描
      KEYINPUT: MOV         FLAG0,#00H
                MOV         P0,#0FFH
                CLR         P0.4
                MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH          ;有键按下吗?
                JZ          NOKEY1
                LCALL       DELY10US
                MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH          ;真的有键按下吗?异或:相同为0,不同为1
                JZ          NOKEY1          ;扫描下一行
                MOV         A,P0
                ANL         A,#0FH
                CJNE        A,#0EH,NK1      ;键码的值是多少?P1.4xP1.0
                MOV         KEYBUF,#0
                LJMP        DK1
           NK1: CJNE        A,#0DH,NK2      ;键码是P1.4xP1.1 ?
                MOV         KEYBUF,#1
                LJMP        DK1
           NK2: CJNE        A,#0BH,NK3      ;键码是P1.4xP1.2 ?
                MOV         KEYBUF,#2
                LJMP        DK1
           NK3: CJNE        A,#07H,NK4      ;键码是P1.4xP1.3 ?
                MOV         KEYBUF,#3
                LJMP        DK1
           NK4: NOP

           DK1: MOV         A,KEYBUF
                MOV         DPTR,#TAB
                MOVC        A,@A+DPTR       ;查表,取键值
                MOV         KEY,A
                MOV         FLAG0,#1        ;FLAG0=1

          DK1A: MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH          ;按键有没有松开?
                JNZ         DK1A
                RET
        NOKEY1: MOV         P0,#0FFH
                CLR         P0.5
                MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH
                JZ          NOKEY2
                LCALL       DELY10US
                MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH
                JZ          NOKEY2
                MOV         A,P0
                ANL         A,#0FH
                CJNE        A,#0EH,NK5
                MOV         KEYBUF,#4
                LJMP        DK2
           NK5: CJNE        A,#0DH,NK6
                MOV         KEYBUF,#5
                LJMP        DK2
           NK6: CJNE        A,#0BH,NK7
                MOV         KEYBUF,#6
                LJMP        DK2
           NK7: CJNE        A,#07H,NK8
                MOV         KEYBUF,#7
                LJMP        DK2
           NK8: NOP
           DK2: MOV         A,KEYBUF
                MOV         DPTR,#TAB
                MOVC        A,@A+DPTR
                MOV         KEY,A
                MOV         FLAG0,#1        ;FLAG0=1

         DK2A:  MOV         A,P0            ;判断是否释放按键
                ANL         A,#0FH
                XRL         A,#0FH
                JNZ         DK2A
                RET
        NOKEY2: MOV         P0,#0FFH
                CLR         P0.6
                MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH
                JZ          NOKEY3
                LCALL       DELY10US
                MOV         A,P0
                ANL         A,#0FH
                XRL         A,#0FH
                JZ          NOKEY3
                MOV         A,P0
                ANL         A,#0FH
                CJNE        A,#0EH,NK9
                MOV         KEYBUF,#08h
                LJMP        DK3
    NK9:        CJNE        A,#0DH,NK10
                MOV         KEYBUF,#09h
                LJMP        DK3
    NK10:       CJNE        A,#0BH,NK11
                MOV         KEYBUF,#0AH
                LJMP        DK3
    NK11:       CJNE        A,#07H,NK12
                MOV         KEYBUF,#0BH
                LJMP        DK3
    NK12:       NOP
    DK3:
               MOV         A,KEYBUF
               MOV         DPTR,#TAB
               MOVC        A,@A+DPTR
               MOV         KEY,A
               MOV         FLAG0,#1        ;FLAG0=1

   DK3A:       MOV         A,P0             ;按键有没有松开?
               ANL         A,#0FH
               XRL         A,#0FH
               JNZ         DK3A
               RET
  NOKEY3:
               MOV         P0,#0FFH
               CLR         P0.7
               MOV         A,P0
               ANL         A,#0FH
               XRL         A,#0FH
               JZ          NOKEY4
               LCALL       DELY10US
               MOV         A,P0
               ANL         A,#0FH
               XRL         A,#0FH
               JZ          NOKEY4
               MOV         A,P0
               ANL         A,#0FH
               CJNE        A,#0EH,NK13
               MOV         KEYBUF,#0Ch
               LJMP        DK4
        NK13:  CJNE        A,#0DH,NK14
               MOV         KEYBUF,#0DH
               LJMP        DK4
        NK14:  CJNE        A,#0BH,NK15
               MOV         KEYBUF,#0EH
               LJMP        DK4
        NK15:  CJNE        A,#07H,NK16
               MOV         KEYBUF,#0Fh
               LJMP        DK4
        NK16:  NOP
         DK4:  MOV         A,KEYBUF
               MOV         DPTR,#TAB
               MOVC        A,@A+DPTR
               MOV         KEY,A
               MOV         FLAG0,#1        ;FLAG0=1

       DK4A:   MOV         A,P0            ;按键有没有松开?
               ANL         A,#0FH
               XRL         A,#0FH
               JNZ         DK4A
               RET
     NOKEY4:   MOV        A, FLAG0
               CLR        A
               MOV        FLAG0,A
               RET

       TAB:    DB    	01H,02H,03H,0aH	;<--显示码|内码-->/*键盘码00,01,02,03,*/
               DB	04H,05H,06H,0bH	;/*键盘码04,05,06,07,*/
               DB	07H,08H,09H,0cH	;/*键盘码08,09,0a,0b,*/
               DB	0eH,00H,0fH,0dH	;/*键盘码0c,0d,0e,0f*/
;**********************************************************************************************************

;************************************************************************************************************
;8位数码管显示程序
        DISPLAY: MOV    P1,#0FFH
                 MOV    A,30H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.0
                 LCALL  DELAY1MS
                 SETB   P2.0
                
                
                 MOV    A,31H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.1
                 LCALL  DELAY1MS
                 SETB   P2.1
                   
                 MOV    A,32H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.2
                 LCALL  DELAY1MS
                 SETB   P2.2 
  
                 MOV    A,33H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.3
                 LCALL  DELAY1MS
                 SETB   P2.3 

                 MOV    A,34H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.4
                 LCALL  DELAY1MS
                 SETB   P2.4

                 MOV    A,35H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.5
                 LCALL  DELAY1MS
                 SETB   P2.5

                 MOV    A,36H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.6
                 LCALL  DELAY1MS
                 SETB   P2.6

                 MOV    A,37H
                 MOV    DPTR,#TAB1
                 MOVC   A,@A+DPTR
                 MOV    P1,A
                 CLR    P2.7
                 LCALL  DELAY1MS
                 SETB   P2.7
                
                 RET
          TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H
                 DB  92H,82H,0F8H,80H,90H
                 DB  88H,83H,0C6H,0A1H,86H
                 DB  8EH,89H,8CH
  ;******************************************************************************************************
  ;延时程序
      DELAY1MS:  MOV R4,#14H
           DL1:  MOV R5,#19H
           DL2:  DJNZ       R5,DL2
                 DJNZ       R4,DL1
                 RET
      DELY10US:  MOV       R6,#10
                 DJNZ      R6,$
                 RET
                 END

⌨️ 快捷键说明

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