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

📄 8255与8253实现按键显示.txt

📁 8255与8253实现按键显示,初始化控制字,判断有无按键
💻 TXT
字号:

code segment
    assume cs:code,ds:code
start:
        push cs
    	pop ds
    
     	mov ax,data
	mov ds,ax
	lea si,ledtab

	mov al,81h
	mov dx,203h
	out dx,al;初始化控制字
	
  
        mov dx,202h
	mov al,0fh
	out dx,al;判断有无按键,使所有列线为低电平
	in al,dx;读取行值
	and al,0fh
	cmp al,0fh
	jz exit;无按键闭合结束程序,即跳出


	call delay;延时12ms消抖


	mov dx,202h
	mov al,0fh
	out dx,al;判断有无按键,使所有列线为低电平
	in al,dx;读取行值
	and al,0fh
	cmp al,0fh
	jz exit;无按键闭合结束程序
	


	mov bl,0efh;初始化列码
	mov bh,0;初始化列计数器

again:	mov dx,202h
	mov al,bl
	out dx,al;输出列码
	in al,dx;读取行值
	and al,0fh
	cmp al,0fh
	jz next;该列无键闭合,准备下一列扫描

	cmp al,0eh;判断该列是否第一个键闭合
	jnz two
	mov al,0
	jmp free
two:cmp al,0dh;判断该列是否是第二个键闭合
	jnz three
	mov al,1
	jmp free
three:cmp al,0bh;判断该列是否是第三个键闭合
      	jnz four
	mov al,4
	jmp free
four:	cmp al,07h;判断该列是否是第四个键闭合
	jnz next
	mov al,7
free:	push ax
wait1:  mov dx,202h;判断按键是否结束
	mov al,0fh
	out dx,al;判断有无按键,使所有列线为低电平
	in al,dx;读取行值
	and al,0fh
	cmp al,0fh


	jnz wait1
	pop ax

      
	add al,bh; ;此时al中存放要显示的值扫描键值+列计数值
	
	mov ah,0
	add si,ax;将显示值设置为相应的段码

	mov al,[si]
	mov dx,200h
	out dx,al;送到端口显示
	
    	mov al,08h
        mov dx,202h
        out dx,al;设置位码
    
next:	inc bh;列计数值加1
	rol bl,1 ;列码循环左移一位
	cmp bl,0feh;判断该轮键扫描是否结束
	jnz again
exit:mov ah,4ch
     	int 21h


delay proc near
	push bx
	push cx
	mov bx,2000
del1:mov cx,5000
del2:loop del2
	dec bx 
	jnz del1
	pop cx
	pop bx
	ret
delay endp

;定义数据段
data segment
 ledtab db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
data ends

code ends
end start
	
		    
    
    
  
	

⌨️ 快捷键说明

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