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

📄 keyboard.asm

📁 包含串行通行的收发程序、电子钟、AD、DA转换、LED按键显示等的源代码
💻 ASM
字号:

data segment
port equ 280H 
b0 db 7fh,6fh,77h,7ch,39h,5ch,79h,71h
b1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h 
b2 db 0,0,0,0,'R','P','M','G'
Scan_code db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh
msg db 0dh,0ah,'input from keyboard:$'
data ends

code segment  
 	assume cs:code,ds:data,es:data
main proc far
		mov ax,data
		mov ds,ax
   
   
		lea dx,msg			;显示提示信息
		mov AH,9			;DOS 9号系统功能调用,输出字符串
        int 21H
   
		mov dx,port+3		;初始化8255,使工作于方式0,A输入
		mov al,10010000b
		out dx,al
   
key_in: mov al,0			;置PC0-PC2为低
       	mov dx,port+2
       	out dx,al
       
       	mov dx,port			;读PA口数据
       	in al,dx
       	cmp al,0ffh			;A口=0FFH?
       	je key_in			;相等说明无键按下,跳转到key_in
       
       	call qudou			;调用去抖动子程序
       
       	mov al,0feh
       	mov dx,port+2		;PC口
       	out dx,al			;PC0置低电平
       
      	mov dx,port			;读PA口数据
       	in al,dx
       
		lea bx,b0			;扫描PC0行对应的列线
 		cmp al,0ffh			;A口=0FFH?
       	jne disp			;不相等说明有键按下,跳转到disp显示子程序
       
       	mov al,0fdh
       	mov dx,port+2		;PC口
      	out dx,al			;PC1置低电平

      	mov dx,port			;读PA口数据
       	in al,dx       
       	
       	lea bx,b1			;扫描PC1行对应的列线
        cmp al,0ffh			;A口=0FFH?
        jne disp			;不相等说明有键按下,跳转到disp显示子程序
       
        mov al,0fbh
       	mov dx,port+2		;PC口
       	out dx,al			;PC1置低电平
       	
      	mov dx,port			;读PA口数据
       	in al,dx
       
       	lea bx,b2			;扫描PC2行对应的列线
       	cmp al,0ffh			;A口=0FFH?
       	je key_in			;相等说明无键按下,跳转到key_in
        
        cmp al,0dfh			;判断按键是否为'P'
        je exit				;若是,则退出程序
        
disp:	mov si,0
       	mov cx,8
       
		push bx				;bx入栈保护
again:	lea bx,Scan_code
        cmp al,[bx][si]
        je found			;相等标明找到相应的扫描码
        inc si
        loop again			;未找到则循环
        
        jmp key_in			;循环结束仍未找到则跳转到key_in
 
found:	pop bx				;bx出栈
  
        mov al,20h			;选择一只数码管
        mov dx,2b0h
        out dx,al
       
        mov dx,2b1h			;将七段显示值写入2b1h
        mov al,[bx][si]
        out dx,al
       
		jmp key_in			;跳转到key_in
		
exit:	mov ah,4ch
        int 21h
main endp
   
qudou proc near				;去抖动子程序,延时10MS
		mov ah,0ffh
d2:		mov al,0ffh
d1:		dec al
  		jnz d1
  		dec ah
  		jnz d2
  		ret
qudou endp 
 
code ends
   end main

⌨️ 快捷键说明

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