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

📄 键盘.asm

📁 本科优秀毕业设计,倒车雷达,用单片机和c51实现的!
💻 ASM
字号:
      ORG 0000H
	  JMP MAIN


MAIN:   MOV SP,#4FH
		MOV P0,#0FFH
		MOV P1,#0FFH
		MOV P2,#0FFH
		MOV 40H,#00H
		MOV 41H,#00H
		MOV 42H,#00H
		MOV 43H,#00H
		MOV 44H,#00H
		MOV 45H,#00H
		MOV 46H,#00H
		MOV 47H,#00H

KEY_SCAN1:                          ;识别键盘有无键按下子程序
           
		   MOV  P2,#0F0H           ;置列线为0,行线为1
           
		   MOV  A,P2               ;读P2口
           ANL  A,#0F0H            ;取出高四位
           MOV  B,A                ;暂存到B
           MOV  P2,#0FH            ;置列线为1,行线为0
           
		   MOV  A,P2               ;读P2口
           ANL  A,#0FH             ;取出低四位
           ORL  A,B                ;高四位与低四位逻辑或运算重新组合
           CJNE A,#0FFH,KEY_IN1_1    ;0FFH为无按键按下
           JMP KEY_SCAN1

KEY_IN1_1:                           ;识别具体按键值子程序
           MOV  B,A                ;将按键的特征编码暂存于B
           MOV  DPTR,#KEY_TABLE
           MOV  R3,#0FFH           
KEY_IN1_2:  
           INC  R3                 ;顺序码加1
           MOV  A,R3
           MOVC  A,@A+DPTR         ;查表
           CJNE  A,B,KEY_IN1_3       ;比较,若相同则找到按键的特征编码。
           MOV  A,R3               ;找到特征编码后,取顺序码
           
   	       MOV  43H,A              ;存入43H单元
           CALL DISPLAYKEY_1
		   MOV  42H,43H
		   MOV  43H,#0AH
		   
		   CJNE R3,#10,KEY_SCAN2	   ;输入是否结束
		   JMP EXIT
KEY_IN1_3: 
           CJNE  A,#00H,KEY_IN1_2     ;末完,继续查
           ;CALL KEY_PLAER1
		   JMP KEY_SCAN1                 ;00H为结束码

KEY_SCAN2:                          ;识别键盘有无键按下子程序
           
		  
		   MOV  P2,#0F0H           ;置列线为0,行线为1
           
		   MOV  A,P2               ;读P2口
           ANL  A,#0F0H            ;取出高四位
           MOV  B,A                ;暂存到B
           MOV  P2,#0FH            ;置列线为1,行线为0
          
		   MOV  A,P2               ;读P2口
           ANL  A,#0FH             ;取出低四位
           ORL  A,B                ;高四位与低四位逻辑或运算重新组合
           CJNE A,#0FFH,KEY_IN2_1    ;0FFH为无按键按下
           JMP KEY_SCAN2

KEY_IN2_1:                           ;识别具体按键值子程序
           MOV  B,A                ;将按键的特征编码暂存于B
           MOV  DPTR,#KEY_TABLE
           MOV  R3,#0FFH           
KEY_IN2_2:  
           INC  R3                 ;顺序码加1
           MOV  A,R3
           MOVC  A,@A+DPTR         ;查表
           CJNE  A,B,KEY_IN2_3       ;比较,若相同则找到按键的特征编码。
           MOV  A,R3               ;找到特征编码后,取顺序码
           
   	       MOV  43H,A              ;存入43H单元
          
		   
		   CJNE R3,#10,OUT2	   ;输入是否结束
		   MOV  43H,42H
		   MOV  42H,#0AH
		   MOV  41H,#0AH
		   JMP EXIT
		   
OUT2:	   
		   CALL DISPLAYKEY_1
		   MOV  41H,42H
		   MOV  42H,43H
		   MOV  43H,#0AH
           
		   JMP 	KEY_SCAN3
		   
		  
		   
KEY_IN2_3: 
           CJNE  A,#00H,KEY_IN2_2     ;末完,继续查
           ;CALL KEY_PLAER1
		   JMP KEY_SCAN2                      ;00H为结束码
    
KEY_SCAN3:                          ;识别键盘有无键按下子程序
		   
		   
		   MOV  P2,#0F0H           ;置列线为0,行线为1
           
		   MOV  A,P2               ;读P2口
           ANL  A,#0F0H            ;取出高四位
           MOV  B,A                ;暂存到B
           MOV  P2,#0FH            ;置列线为1,行线为0
           
		   MOV  A,P2               ;读P2口
           ANL  A,#0FH             ;取出低四位
           ORL  A,B                ;高四位与低四位逻辑或运算重新组合
           CJNE A,#0FFH,KEY_IN3_1    ;0FFH为无按键按下
           JMP KEY_SCAN3

KEY_IN3_1:                           ;识别具体按键值子程序
           MOV  B,A                ;将按键的特征编码暂存于B
           MOV  DPTR,#KEY_TABLE
           MOV  R3,#0FFH           
KEY_IN3_2:  
           INC  R3                 ;顺序码加1
           MOV  A,R3
           MOVC  A,@A+DPTR         ;查表
           CJNE  A,B,KEY_IN3_3       ;比较,若相同则找到按键的特征编码。
           MOV  A,R3               ;找到特征编码后,取顺序码
           
   	       MOV  43H,A              ;存入43H单元
           

		   CJNE R3,#10,OUT3	   ;输入是否结束
		   
		   MOV 43H,42H
		   MOV 42H,41H
		   MOV 41H,#0AH
		   JMP EXIT
		   
OUT3:	   CALL DISPLAYKEY_1
		  
		   JMP EXIT     

KEY_IN3_3: 
           CJNE  A,#00H,KEY_IN3_2     ;末完,继续查
           ;CALL KEY_PLAER1
		   JMP KEY_SCAN3                      ;00H为结束码

EXIT: 
	  NOP
      NOP
LOOP: CALL DISPLAYKEY_2
	  JMP LOOP




;====================================================
;键值显示子程序
;====================================================


DISPLAYKEY_1: MOV R1,#40H 
			MOV R5,#07FH
PLAY_1:       MOV A,R5     
            MOV P0,#0FFH
			MOV P1,A
			MOV A,@R1

			MOV DPTR,#TABLE
            MOVC A,@A+DPTR 
            MOV P0,A   
			CALL DELAY1
            INC R1            
            MOV A,R5 
			JNB ACC.0,ENDOUT_1
            RR A                  
            MOV R5,A              
           	JMP PLAY_1
ENDOUT_1:     MOV P1,#0FFH
			MOV P0,#0FFH            
            
			RET                      ;显示完成,返回
           
		  

DISPLAYKEY_2:MOV R1,#40H 
			MOV R5,#07FH
PLAY_2:       MOV A,R5     
            MOV P0,#0FFH
			MOV P1,A
			MOV A,@R1

			MOV DPTR,#TABLE
            MOVC A,@A+DPTR 
            MOV P0,A   
			CALL DL1MS
            INC R1            
            MOV A,R5 
			JNB ACC.0,ENDOUT_2
            RR A                  
            MOV R5,A              
           	JMP PLAY_2
ENDOUT_2:   MOV P1,#0FFH
			MOV P0,#0FFH            
            
			RET                      ;显示完成,返回


     	   
;;晶振12MHZ,延时0.25秒



DELAY1:MOV 72H,#100
LOOP1_3:MOV 71H,#100
LOOP1_1:MOV 70H,#10
LOOP1_0:DJNZ 70H,LOOP1_0
      DJNZ 71H,LOOP1_1
      MOV 70H,#46
LOOP1_2:DJNZ 70H,LOOP1_2
      NOP
      DJNZ 72H,LOOP1_3
      MOV 70H,#48
LOOP1_4:DJNZ 70H,LOOP1_4 

	  RET

;;晶振12MHZ,延时1秒

DELAY2:MOV 72H,#100
LOOP2_3:MOV 71H,#100
LOOP2_1:MOV 70H,#47
LOOP2_0:DJNZ 70H,LOOP2_0
      NOP 
      DJNZ 71H,LOOP2_1
      MOV 70H,#46
LOOP2_2:DJNZ 70H,LOOP2_2
      NOP
      DJNZ 72H,LOOP2_3
      MOV 70H,#48
LOOP2_4:DJNZ 70H,LOOP2_4 

    RET


DL1MS:      MOV R6,#14H
DL1:		MOV R7,#19H
DL2:  		DJNZ R7,DL2
			DJNZ R6,DL1

			RET
; 特征编码与顺序编码的对应关系表
KEY_TABLE:DB  07DH		             ;0          顺序码
          DB  0EEH,0EDH,0EBH         ;1,2,3      顺序码
          DB  0DEH,0DDH,0DBH         ;4,5,6      顺序码
          DB  0BEH,0BDH,0BBH         ;7,8,9      顺序码
          DB  077H					 ;D          输入结束确认
		  DB  00H                    ;结束码

TABLE:DB 03H,9FH,25H,0DH,99H,49H,41H,01FH,01H,09H,0FFH  	 ;0--9,"全灭"
END

⌨️ 快捷键说明

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