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

📄 静态显示led100.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
字号:
  ORG 0000H
LJMP MAIN

 ORG 0013H ;中断1的调用
;;;;;;;;;INC R2
LJMP LOOP1

         ORG 050H
MAIN:    ;;;;;;;;;;;;;;;;;;;;MOV R2,#00H  ;R2作中断计数器
         MOV R4,#64 ;全显测灯
 DIR:    SETB P1.0
         CLR P1.1   ;全显测
         SETB P1.1
         DJNZ R4,DIR
         MOV R3,#00H   ;R3作为位选择计数器
         MOV R5,#00H


 START1:       ;;;;;;;;;;;;;;MOV R2,#00H  ;R2作中断计数器
START:
             
               MOV R1,#09H
               MOV R0,#30H
               ;;;;;;;;;;;;;;;MOV R2,#00H  ;R2作中断计数器
PACE:          CLR P1.2  ;初始化74LS164使它的Q0~Q7电位为0
               CLR P1.3
               SETB P1.3
               DJNZ R1,PACE
               CLR RS1 ;选择工作寄存器组
               CLR RS0
               SETB IT1 ;设置为中断1为跳沿触发
               SETB EA  ;打开总中断开关
               SETB EX1 ;打开中断1
               CLR  EX0
               CLR  ET0
               CLR  ET1
               MOV SP,#60H
               MOV R1,#09H
               MOV R0,#30H
               SJMP START
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP1: CLR EA                                   ;关闭中断
       SETB P3.3 ;;为P3.3输入数据做准备
       LCALL WAIT                               
       JB p3.3,STATION1                            

       MOV R1,#09H
PACE5: SETB P1.2                                 ;初始化74LS164使它的Q0~Q7电位为0
       CLR P1.3
       SETB P1.3
       DJNZ R1,PACE5

      CLR A                                         
      SETB P3.3   
      CLR P1.2
      CLR P1.3
      SETB P1.3
      INC A
      JNB P3.3,LOOP2                                         ;;;;;;;;;;;;JNB P3.3,LOOP2;;;;;;;;;;;;;;;
      SETB P3.3   
LOOP3:SETB P1.2
      CLR P1.3
      SETB P1.3
      INC A
      SETB P3.3   ;;为P3.3输入数据做准备
      JNB P3.3,LOOP2
      SJMP LOOP3

LOOP2:    MOV R6,A                        ;使用到R6寄存器
          XRL A,#08H   ;功能键识别区
          JZ  KEY14
          MOV A,R6
          XRL A,#01H  
          JZ STATION1
          MOV A,R6
          XRL A,#02H   
          JZ STATION1
         ;;;;;;;;;;;;;;;;;;;;;;;;;;;
           MOV A,R6     ;此区跳往查表区
          XRL A,#03H
          JZ  X1   ;跳往POCESS处理
           MOV A,R6
          XRL A,#04H
          JZ  X2

           MOV A,R6
          XRL A,#05H
          JZ X3
            MOV A,R6
          XRL A,#06H
          JZ X4
           MOV A,R6
          XRL A,#07H
          JZ X5
      ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
         ;;;;;;;;;;;;;;; ;MOV A,R2   ;判断停止输入数据;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;; ;XRL A,#02H
          ;;;;;;;;;;;;;;XRL A,#01H
         ;;;;;;;;;;; ;;JZ KEY
         ;; ;;;;;;;;;;;;;;;;;;JZ  STATION  ;判断停止输入数据

STATION1:         RETI         ;返回中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          
         
      X1: CJNE R3,#00H,WINDOWS
        
          LCALL SAMSUNG1
          RETI
      X2: CJNE R3,#00H,WINDOWS1
          LCALL SAMSUNG2
          RETI                                   ;功能键区查表
      X3: INC R3 
          LCALL SAMSUNG3
          RETI
      X4: RETI
      X5: RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WINDOWS:LJMP JUAN
        RETI
WINDOWS1:LJMP BOOK
        RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;STATION: LJMP KEY13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY14:  SETB P3.3     ;;为P3.3输入数据做准备
       JNB P3.3,KEY14 
       MOV A,R3
       XRL A,#00H  ;;;;;;;;;;;
       JZ KEY0     ;;;;;;;;;;
       MOV R3,#00H  ;;;;;;;;;;;
       RETI        ;;;;;;;;;;;
      
KEY0:
                      ;此区为输录数字区
        MOV R1,#09H
        SETB P1.4
        SETB P3.3

PACE1:  CLR P1.2  ;初始化74LS164使它的Q0~Q7电位为0
        CLR P1.3
        SETB P1.3
        DJNZ R1,PACE1

KEY1:   SETB P1.4  ;;为P1.4输入数据做准备
        SETB P3.3;;为P3.3输入数据做准备
        JNB P1.4,KEY2  
        JNB P3.3,KEY8  
        SJMP KEY1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY2:  LCALL WAIT   ;延时消抖
       SETB P1.4    ;为P1.4输入数据做准备
       JB P1.4,KEY1 ;;;;;;;;;;;;;;;;;;;;;;;;;;
       MOV R1,#09H

PACE2: SETB P1.2  ;该区使74LS164使它的Q0~Q7电位为1
       CLR P1.3
       SETB P1.3
       DJNZ R1,PACE2

KEY3: CLR  A         ;数字键区扫描
      SETB P1.4
      CLR P1.2
      CLR P1.3
      SETB P1.3
      SETB P1.4   ;为P1.4输入数据做准备
      JNB P1.4,KEY17 ;跳往KEY17数字处理区(如果此时P1.4为0则A里的数为0)



      CLR A
KEY4: SETB P1.2
      CLR P1.3
      SETB P1.3
      INC  A
      SETB P1.4  ;为P1.4输入数据做准备
      JNB P1.4,KEY17 ;跳往KEY17数字处理区
      JB P1.4,KEY4

KEY17: SETB P1.4  ;为P1.4输入数据做准备
       JNB P1.4,KEY17  
       JB P1.4,KEY7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEY8:  SETB P3.3 ;为P3.3输入数据做准备
       LCALL WAIT
       JB P3.3,KEY1 ;;;;;;;;;;;;;;;;;;;;;;;

       MOV R1,#09H

PACE3: SETB P1.2  ;该区使74LS164使它的Q0~Q7电位为1
       CLR P1.3
       SETB P1.3
       DJNZ R1,PACE3

KEY9: MOV A,#08H      ;功能键区数字键扫描
      SETB P3.3
      CLR P1.2
      CLR P1.3
      SETB P1.3
      SETB P3.3 ;为P3.3输入数据做准备
      JNB P3.3,KEY18   ;跳往KEY18按键处理区(如果此时P3.3为0则A里的数为0)

      SETB P1.2
      CLR P1.3
      SETB P1.3
      INC A
      SETB P3.3 ;为P3.3输入数据做准备
      JNB P3.3,KEY18

KEY20: SETB P1.2
       CLR P1.3
       SETB P1.3
       INC A
       SETB P3.3  ;为P3.3输入数据做准备
       JNB P3.3,SAMSUNG
       JB P3.3,KEY20

KEY21:  LJMP KEY0    

KEY18: SETB P3.3  ;为P3.3输入数据做准备
       JNB P3.3,KEY18 
       JB P3.3,KEY7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SAMSUNG: SETB P3.3   ;为P3.3输入数据做准备
        JNB P3.3,SAMSUNG 
        JB P3.3,SAMSUNG10

SAMSUNG10:XRL A,#0FH    
          JZ  KEY13   ;判断停止输入数据;
          JNZ  KEY21    ;判断停止输入数据;

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY7:  CLR IE1    ;软件清除中断1请求标志位 (保险)

      MOV @R0,A  ;此时@R0里的数据就是所按的数字键代表的数字
      INC R0     ;使R0指向下一字节
      LCALL LIGHT ;调用显示
      MOV A,R0
      XRL A,#38H
      JZ  KEY13
      LJMP KEY0

KEY13: CLR IE1    ;软件清除中断1请求标志位 (保险)
       MOV R1,#040H

       MOV A,R0
       MOV R2,A  ;使用到R2寄存器
KEY16: DEC R0
       MOV A,@R0 
       MOV @R1,A
       INC R1
       CJNE R0,#030H, KEY16


       RETI   ;返回中断
;;;;;;;;;;;KEY11:
       ;;;;;;;;RETI   ;返回中断

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIGHT: MOV R1,#040H  ;输入数据显示子程序
       MOV A,R0        
       MOV R6,A        ;使用到R6寄存器
LIGHT2:MOV @R1,#00001010B
       INC R1
       CJNE R1,#048H,LIGHT2
       MOV R1,#040H        
LIGHT1: DEC R0
       MOV A,@R0 
       MOV @R1,A
       INC R1
       CJNE R0,#030H, LIGHT1
       MOV A,R6
       MOV R0,A

       LCALL LED


RET


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED:  MOV R1,#40H   ;串显示数据传送子程序
      MOV R5,#08H
LED1:MOV DPTR,#044CH
     MOV A,@R1
     MOVC A,@A+DPTR
     MOV R4,#08H
LED2: RLC A
      MOV P1.0,C
      CLR P1.1
      SETB P1.1
      DJNZ R4,LED2
      INC R1
      DJNZ R5,LED1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WAIT: MOV R7,#142     ;延时子程序 (35.074ms)
WAIT1: MOV R6,#122
WAIT2:DJNZ R6,WAIT2
DJNZ R7,WAIT1
RET

ORG 044CH
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H  ;0--9的七段码(共阴) 和消影
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SAMSUNG1: SETB P3.3
          JNB P3.3,SAMSUNG1                 
          MOV A,R2 ;此时R2保存上次输入数据的的下一个地址
          MOV R0,A
WEI:DEC R0
    INC @R0
    SJMP WEI1


WEI15:MOV A,R2
      MOV R0,A
      LCALL LIGHT
      RET ;返回调用程序

WEI1:MOV A,R2
     MOV R0,A
WEI2:DEC R0    ;扫描进位
     MOV A,@R0
     XRL A,#0AH
     JZ WEI3
WEI4: CJNE R0,#30H,WEI2
      SJMP WEI15

WEI3:  MOV @R0,#00H
       DEC R0
       INC @R0
       INC R0
       SJMP WEI4
 ;;;;;;;;;;;;;;;;;;;;;;


SAMSUNG2: SETB P3.3
          JNB P3.3,SAMSUNG2 
          MOV A,R2
          MOV R0,A
EN: DEC R0  ;先对个位减1处理
    DEC @R0
    SJMP EN1
EN5:MOV A,R2
    MOV R0,A
    LCALL LIGHT
    RET  ;返回调用程序



EN1: MOV A,R2    ;;扫描借位
     MOV R0,A
EN2: DEC R0
     MOV A,@R0
     XRL A,#0FFH
     JZ EN3
EN4:CJNE R0,#30H,EN2
    SJMP EN5

EN3: MOV @R0,#09H
     DEC R0
     DEC @R0
     MOV A,@R0
     XRL A,#0FFH
     JZ EN11

EN16:  INC R0
      SJMP EN4


EN11: DEC R0    ;;扫描它的高位是否都为0位
      MOV A,@R0
      XRL A,#00H
      JNZ EN16
      CJNE R0,#30H,EN17
EN17: MOV A,R2
      MOV R0,A
EN18: DEC R0
      MOV @R0,#00H
      CJNE R0,#30H,EN18
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




SAMSUNG3: SETB P3.3
          JNB P3.3,SAMSUNG3 
YU:       
          MOV R4,#00H  ;使用到R4
LAI2:     MOV A,R2 ;
          MOV R0,A
          MOV R1,#40H
          LCALL LIGHT  ;显示上次输入的数据
          LCALL TIME 
       
       MOV R1,#40H  
LAI3:MOV @R1,#00001010B  ;消影区
       INC R1
       CJNE R1,#048H,LAI3      
       
       MOV R1,#40H  
LAI1:  DEC R0
       MOV A,@R0 ;倒序存放数据
       MOV @R1,A
       INC R1
       CJNE R0,#030H, LAI1
       
       MOV A,R3
       ADD A,#39H
       MOV R1,A
       MOV @R1,#00001010B
       LCALL LED
       LCALL TIME
       INC R4 
       CJNE R4,#08H,LAI2
       MOV R3,#00H
       RET 
       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
JUAN:  SETB P3.3
       JNB P3.3,JUAN 
       INC R3 
       SJMP YU1 
JUAN20:CLR C
       MOV A,R2 ;此时R2保存上次输入数据的的下一个地址
       SUBB A,R3
       MOV R0,A
       INC @R0
       SJMP JUAN1


JUAN15:MOV A,R2
       MOV R0,A
       LCALL LIGHT 
       RET ;返回调用程序

JUAN1:MOV A,R2
     MOV R0,A
JUAN2:DEC R0    ;扫描进位
     MOV A,@R0
     XRL A,#0AH
     JZ JUAN3
JUAN4: CJNE R0,#30H,JUAN2
      SJMP JUAN15

JUAN3:  MOV @R0,#00H
       DEC R0
       INC @R0
       INC R0
       SJMP JUAN4        
         
;;;;;;;;;;;;;;;;;;;;;;;;;           
YU1:       
          MOV R4,#00H  ;使用到R4
LIU2:     MOV A,R2 ;此时R2保存上次输入数据的的下一个地址
          MOV R0,A
          MOV R1,#40H
          LCALL LIGHT  ;显示上次输入的数据
          LCALL TIME 
       
        MOV R1,#40H  
LIU3:MOV @R1,#00001010B  ;消影区
       INC R1
       CJNE R1,#048H,LIU3      
       
       MOV R1,#40H  
LIU1:  DEC R0
       MOV A,@R0 ;倒序存放数据
       MOV @R1,A
       INC R1
       CJNE R0,#030H, LIU1
       
       MOV A,R3
       ADD A,#39H
       MOV R1,A
       MOV @R1,#00001010B
       LCALL LED
       LCALL TIME
       INC R4 
       CJNE R4,#02H,LIU2
       SJMP JUAN20     
          
     
          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BOOK:   SETB P3.3
       JNB P3.3,BOOK
       INC R3
       SJMP YU2
         
ROOM: CLR C
      MOV A,R2  ;此时R2保存上次输入数据的的下一个地址
      SUBB A,R3
      MOV R0,A
      DEC @R0 
      SJMP ROOM1
ROOM5:MOV A,R2
      MOV R0,A
      LCALL LIGHT
      RET  ;返回调用程序



ROOM1: MOV A,R2    ;;扫描借位
     MOV R0,A
ROOM2: DEC R0
     MOV A,@R0
     XRL A,#0FFH
     JZ ROOM3
ROOM4:CJNE R0,#30H,ROOM2
    SJMP ROOM5

ROOM3: MOV @R0,#09H
     DEC R0
     DEC @R0
     MOV A,@R0
     XRL A,#0FFH
     JZ ROOM11

ROOM16:  INC R0
      SJMP ROOM4


ROOM11: DEC R0    ;;扫描它的高位是否都为0位
      MOV A,@R0
      XRL A,#00H
      JNZ ROOM16
      CJNE R0,#30H,ROOM17
ROOM17: MOV A,R2
      MOV R0,A
ROOM18: DEC R0
      MOV @R0,#00H
      CJNE R0,#30H,ROOM18
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
YU2:       
          MOV R4,#00H  ;使用到R4
CATE2:     MOV A,R2 ;此时R2保存上次输入数据的的下一个地址
          MOV R0,A
          MOV R1,#40H
          LCALL LIGHT  ;显示上次输入的数据
          LCALL TIME 
       
        MOV R1,#40H  
CATE3:MOV @R1,#00001010B  ;消影区
       INC R1
       CJNE R1,#048H,CATE3      
       
       MOV R1,#40H  
CATE1:  DEC R0
       MOV A,@R0 ;倒序存放数据
       MOV @R1,A
       INC R1
       CJNE R0,#030H, CATE1
       
       MOV A,R3
       ADD A,#39H
       MOV R1,A
       MOV @R1,#00001010B
       LCALL LED
       LCALL TIME
       INC R4 
       CJNE R4,#02H,CATE2
       SJMP ROOM    
          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SAMSUNG4:
SAMSUNG5:




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME: MOV R5,#10           ;延时0.303S的子程序
TIME3:MOV R6,#200
TIME2:MOV R7,#125
TIME1:DJNZ R7,TIME1
      DJNZ R6,TIME2
      DJNZ R5,TIME3  
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
               

END

⌨️ 快捷键说明

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