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

📄 keyled1.asm

📁 利用键盘扫描程序把输入的数组在led上显示
💻 ASM
字号:
;BH-KEY-LED.ASM
 DATA    SEGMENT
 DA55    EQU 	318H	                          ;8255 A端口
 DB55    EQU 	319H	                          ;8255 B端口
 CTL     EQU 	31BH	                          ;8255控制口
 OUTBIT  EQU    310H                              ;位选码控制口
 OUTSEG  EQU    311H                              ;段码控制口 
 TABLE   DW 	0101H,0102H,0104H,0108H,0110H,0120H,0140H,0180H
         DW 	0201H,0202H,0204H,0208H,0210H,0220H,0240H,0280H		     
	     DW 	0401H,0402H,0404H,0408H                                            ;键值表
 XSM    DB 	39H,5EH,79H,71H,7CH,77H,6FH,7FH,66H,6DH,7DH,07H,4FH,5BH,06H,3FH    ;LED共阴极显示码:CDEFBA9845673210
 SHUZHI  DB     'C,D,E,F,B,A,9,8,4,5,6,7,3,2,1,0'
 CRT     DB 	'PLEASE INPUT THE NUMBER IN THE SMALL KEYBOARD! ',0AH,0DH,'$'
 LEDBUF  DB  10  DUP(?)                          ;显示缓冲区
 NUM     DB  6   DUP(?)                          ;显示的数据 
 COUNT   DB  ?
 DATA    ENDS

 STACK   SEGMENT  PARA STACK 'STACK'
 STA     DW 	50 DUP(?)
 STACK   ENDS

CODE    SEGMENT
MAIN     PROC FAR
 ASSUME  CS:CODE,DS:DATA
 START:  MOV 	AX,DATA
	 	 MOV 	DS,AX
	 	 MOV 	DX,OFFSET CRT
	 	 MOV 	AH,09
	 	 INT 	21H

         MOV BX,OFFSET LEDBUF
         MOV AH,01H                  ;从左边开始显示
AGAIN:   CALL KEY
         CALL DISPLAYLED
         JMP AGAIN
		 
		 MOV  AX,4C00H               ; 返回DOS
		 INT  21H
		 RET
MAIN  	 ENDP

DELAY    PROC NEAR                    ;延时子程序
         PUSH AX
         PUSH CX
         
         MOV AL,0
         MOV CX,AX
         LOOP $
         
         POP CX
         POP AX
         RET 
DELAY    ENDP

DISPLAYLED   PROC NEAR
         
         MOV BX,OFFSET LEDBUF
         MOV CL,6                  ; 共6个八段管
         MOV AH,01H                ; 从左边开始显示
 DLOOP:  
         MOV DX,OUTBIT
         MOV AL,0
         OUT DX,AL                 ; 关所有八段管
         
         MOV AL,[BX]
         MOV DX,OUTSEG
         OUT DX,AL           
         MOV AL,AH
         MOV DX,OUTBIT
         OUT DX,AL                  ; 显示一位八段管
        
         PUSH AX
         MOV AH,1
         CALL DELAY
         POP AX
         
         SHL AH,1
         INC BX
         DEC CL
         JNZ DLOOP
         
         MOV DX,OUTBIT
         MOV AL,0
         OUT DX,AL                  ; 关所有八段管
         RET
DISPLAYLED ENDP         
                  

KEY   	 PROC NEAR		             ;出口参数DL; 按键的ASCII码
 LP1:    MOV    AL,82H               ;输入方式状态字,8255 A口输出, B口输入
		 MOV 	DX,CTL
		 OUT 	DX,AL                ;设置8255方式控制字
				  			         ;PA口输出,PB口输入
 WAIT1:  MOV 	AL,00
	 	 MOV 	DX,DA55
	 	 OUT 	DX,AL                ;PA口输出00
	 	 MOV 	DX,DB55
	 	 IN 	AL,DX                ;从PB口获得列值
	 	 CMP	AL,0FFH
	 	 JZ 	WAIT1                ;没有按键按下,等待
	 	 PUSH   AX                   ;保存列值, 列值压栈
	 	 PUSH   AX
	 	 MOV 	CX,1000H             ;延时,去抖动

 LP2:    LOOP   LP2
	 	 MOV 	DX,CTL
	 	 MOV 	AL,90H               ;设置8255方式控制字
	 	 OUT 	DX,AL                ;PA口输入,PB口输出
	 	 MOV 	DX,DB55
	 	 POP 	AX
	 	 OUT 	DX,AL                ;从PB口输出列值
	 	 MOV 	DX,DA55
	 	 IN 	AL,DX                ;(AL) IS ROW DATA行值
	 	 POP 	BX
	 	 MOV 	AH,BL                ;(AH) IS COL DATA列值
	 	 NOT 	AX
	 	 MOV 	SI,OFFSET TABLE
	 	 MOV 	DI,OFFSET XSM
	 	 MOV    BP,OFFSET SHUZHI
	 	 MOV 	CX,16                ;共16个键
 LP3:    CMP 	AX,[SI]              ;CMP (COL,ROW) WITH EVERY WORD 查键值表
	 	 JZ 	LP4                  ;IN THE TABLE
	 	 DEC    CX
	 	 JZ     LP1					 ;查完键值表未查到
	 	 ADD    SI,2
	 	 INC    DI
	 	 INC    BP
	 	 JMP    LP3
 LP4:    MOV    AL,[DI]
         MOV    LEDBUF,AL
   
	 	 PUSH DX				     ;所按键的ASCII码压堆栈保存
	 	 MOV  AL,82H
	 	 MOV  DX,CTL
	 	 OUT  DX,AL                  ;设置8255方式控制字
				  		             ;PA口输出,PB口输入
 WAIT2:	 MOV AL,00
	 	 MOV DX,DA55
		 OUT DX,AL                   ;PA口输出 00
	 	 MOV DX,DB55
	 	 IN  AL,DX                   ;从PB口读入列值
	 	 CMP AL,0FFH
	 	 JNZ WAIT2                   ;WAIT UNTIL THE KEY IS UP等待按下的键未抬起
	 	 POP DX			             ;DL放按键的ASCII码
	 	 RET
KEY      ENDP

CODE     ENDS
END      START


⌨️ 快捷键说明

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