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

📄 ketset.asm

📁 4*4键盘扫描实验程序 请提出意见(本人刚学单片机)
💻 ASM
字号:
LED1 EQU 20H
LED2 EQU 21H
LED3 EQU 22H
LED4 EQU 23H
LLED EQU 25H
   ORG  0000H
   
  LCALL START

 ORG	000BH			;定时器0中断入口
 
	PUSH	ACC
	PUSH	PSW

          MOV 22H,R4
          MOV  R0,#20H  ;指向显示数据首址
          MOV  R5,#0EFH      ;扫描控制字初值
    PLAY: MOV  A,R5       ;扫描字放入A
          MOV  P2,A          ;从P2口输出
          MOV  A,@R0         ;取显示数据到A
          MOV  DPTR,#TAB     ;取段码表地址
          MOVC A,@A+DPTR     ;查显示数据对应段码
          MOV  P0,A          ;段码放入P0口
          LCALL TIME10M        ;显示1MS
          INC   R0           ;指向下一地址
          MOV   A,R5       ;扫描控制字放入A
          JNB   ACC.7,ENDOUT    ;ACC.7=0时一次显示结束
          RL    A               ;A中数据循环左移
          MOV   R5,A            ;放回R5内
          AJMP  PLAY            ;跳回PLAY循环
  ENDOUT: SETB  P2.7           ;一次显示结束,P3口复位
                               ;P1口复位
        MOV	TH0,#0dcH
	MOV	TL0,#000H

	POP	PSW	
	POP	ACC       
     		       
       RETI                      ;子程序返回


START:
   MOV SP,#50H
   MOV LED1,#1
   MOV LED2,#2
   MOV LED3,#3
   MOV LED4,#4
   MOV R3,#11101111B
   MOV R4,#00
   MOV P1,#0FFH

	MOV	TMOD,#01H	;设定T0为工作方式2,八位自动重载。
	MOV	TH0,#0dcH	;
	MOV	TL0,#000H	;256-(250*11.0592/12)=256-230.4=25.6   250us(11.0592)
				;用25时,中断时间为250.6510417us
				;
	SETB	TR0		;开定时器0
	SETB	ET0		;致能定时0中断
	CLR	TF0		;清定时0中断标志
	SETB	EA		;开总中断
      
KEY_1: 
      
      MOV A,R3
      MOV R3,A
      MOV P1,A
      MOV A,P1
      XRL A,#11111111B
      CJNE A,#16,E1
      LCALL KEY_OUT
 E1:  CJNE A,#88H,E2
      LCALL KEY1
 E2:  CJNE A,#84H,E3
      LCALL KEY2
 E3:  CJNE A,#82H,E4
      LCALL KEY3
 E4:  CJNE A,#81H,E5
      LCALL KEY4
 E5:  CJNE A,#48H,E6
      LCALL KEY5
 E6:  CJNE A,#44H,E7
      LCALL KEY6
 E7:  CJNE A,#42H,E8
      LCALL KEY7
 E8:  CJNE A,#41H,E9
      LCALL KEY8
 E9: CJNE A,#28H,E10
      LCALL KEY9
 E10: CJNE A,#24H,E11
      LCALL KEY10
 E11: CJNE A,#22H,E12
      LCALL KEY11
 E12: CJNE A,#21H,E13
      LCALL KEY12
 E13: CJNE A,#18H,E14
      LCALL KEY13
 E14: CJNE A,#14H,E15
      LCALL KEY14
 E15: CJNE A,#12H,E16
      LCALL KEY15
 E16: CJNE A,#11H,E17
      LCALL KEY16
      
    
 E17:MOV A,R3
     RL A
     MOV R3,A
     JNB  ACC.0,E18
     LCALL KEY_OUT
 E18:MOV R3,#11101111B
     LCALL KEY_OUT
KEY_OUT: 
     
      LCALL KEY_1

KEY1: LCALL TIME10M
      MOV R4,#1
     
      LCALL KEY_2
KEY2: LCALL TIME10M
      MOV R4,#2       
     
      LCALL KEY_2
KEY3: LCALL TIME10M
      MOV R4,#3 
     
      LCALL KEY_2
KEY4: LCALL TIME10M
      MOV R4,#4 
      
      LCALL KEY_2
KEY5: LCALL TIME10M
      MOV R4,#5    
     
      LCALL KEY_2
KEY6: LCALL TIME10M
      MOV R4,#6  
     
      LCALL KEY_2
KEY7: LCALL TIME10M
      MOV R4,#7  
     
      LCALL KEY_2
KEY8: LCALL TIME10M
      MOV R4,#8 
     
      LCALL KEY_2
KEY9: LCALL TIME10M
      MOV R4,#9  
     
      LCALL KEY_2
KEY10: LCALL TIME10M
      MOV R4,#10 
      
      LCALL KEY_2
KEY11: LCALL TIME10M
      MOV R4,#11  
     
      LCALL KEY_2

KEY12: LCALL TIME10M
      MOV R4,#12 
      
      LCALL KEY_2
KEY13: LCALL TIME10M
      MOV R4,#13
      
      LCALL KEY_2
KEY14: LCALL TIME10M
      MOV R4,#14 
      
      LCALL KEY_2
KEY15: LCALL TIME10M
      MOV R4,#15   
      
      LCALL KEY_2
KEY16: LCALL TIME10M
      MOV R4,#16 
      
      LCALL KEY_2


KEY_2:MOV A,P1
      ANL A,#00001111B
      XRL A,#00001111B
      JNZ KEY_2
   LCALL KEY_1


TIME10M:
      MOV R7,#20
  D2: MOV R6,#150
  D1: DJNZ R6,D1
      DJNZ R7,D2
     RET


TAB:    DB	00101000B	;0
	DB	11101011B	;1
	DB	00110010B	;2
	DB	10100010B	;3
	DB	11100001B	;4
	DB	10100100B	;5
	DB	00100100B	;6
	DB	11101010B	;7
	DB	00100000B	;8
	DB	10100000B	;9
	DB	00101000B	;0
	DB	01100000B	;A
	DB	00100101B	;b
	DB	00111100B	;C
	DB	00100011B	;d
	DB	00110100B	;E
	DB	01110100B	;F
	DB	11110111B	;-
	DB	11111111B	;


      END

⌨️ 快捷键说明

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