
4X4键盘,假设接在P1口上,
void Key_ScanAndAnswer(void) {
unsigned char data commonVariable = 0;
unsigned char data keyValue = 0;
P1 = 0xf0;//置P1高4位为输入口
if( P1 != 0xf0 ) {
Delay(20);//ms
if( P1 != 0xf0 ) {
commonVariable = P1;
P1 = 0x0f;//交换输入和输出
if( P1 != 0x0f ) {
commonVariable |= P1;
}
}
}
//这里对commonVariable变量做键值分析处理
keyValue = GetKeyValue(commonVariable);
//这里根据需要看是否显示按下时的键值,添加显示代码
Disp_KeyValue(keyValue);
P1 = 0xff;//再次配置输入口
while( P1 != 0xff ) {
//这里可以添加按键时间长短检测代码,分析长短按键
;
}
//到这里,按键已松开,按键扫描和处理结束
}
额,这个就不知道了不好意思
用十进制形式显示字符位置的代码如下:
DSEG SEGMENT
msgi db "please input a string:$";显示信息,提示输入一串字符
buf db 50,0
table db 50 dup ();输入字符串缓冲区
msgd db 0dh,0ah,"the location is:$";显示信息,提示0所在位置
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG,es:DSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
mov es,ax
lea dx,msgi;显示信息,提示输入一串字符
mov ah,9
int 21h
lea dx,buf;输入字符串
mov ah,0ah
int 21h
lea si,buf
mov cl,[si+1];输入字符实际个数存入CX中
mov ch,0
lea di,table;输入字符起始地址存入DI
mov al,30h;要查找的字符0送AL
cld;置方向标志为地址增量
repnz scasb
jnz tj
lea dx,msgd;显示信息,提示0所在位置
mov ah,9
int 21h
sub di,offset table
mov bx,di
call disp;用十进制形式显示位置
tj:
mov ah,1;按任意键退出
int 21h
mov ax, 4c00h ;程序结束,返回到 *** 作系统系统
int 21h
MAIN ENDP
disp proc near
mov cx,10000d
call dec_div
mov cx,1000d
call dec_div
mov cx,100d
call dec_div
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div endp
disp endp
CSEG ENDS
END MAIN
STACK SEGMENT PARA STACK 'STACK'
DB 256 Dup(0) ;初始化堆栈大小为256
STACK ENDS
DATA SEGMENT PARA PUBLIC 'DATA' ;数据段:在此处添加程序所需的数据
MASSAGE DB ' USER KEYBOARD SUPPORT PROGRAM "ESC" TO QUIT',0DH,0AH,'$' ;显示提示信息
KBACKSPACE DB 08H,' ',08H,'$' ;退格删除BACKSPACE键功能定义
KTAB DB 09H,'$' ; TAB键定义
kF1 DB ' you press F1',0DH,0AH,'$' ;定义F1
kF2 DB ' you press F2',0DH,0AH,'$' ;定义F2
kF3 DB ' you press F3',0DH,0AH,'$' ;定义F3
kF4 DB ' you press F4 and after this use the number express F',0DH,0AH,'$' ;定义F4
BUFFER DB 10 DUP(0) ; 定义扫描码缓冲区
BUFPTR1 DW 0 ; 缓冲区显示调用指针
BUFPTR2 DW 0 ; 缓冲区存储中断指针
KSHIFT DW 0 ; SHIFT键标志
SCANTABLE DB 0 ; 以下为无SHIFT情况下的键盘ASCII表
DB 01H
DB '1234567890-='
DB 0EH,0FH ; 0EH BACKSPACE
; 0FH TAB
DB 'qwertyuiop[]'
DB 0DH,0 ; 0DH 回车
DB 'asdfghjkl;'
DB 27H ; '
DB 60H,0 ; `
DB '\'
DB 'zxcvbnm,/',0,'',0,' '
DB 0,3BH,3CH,3DH,3EH,'567890',0,0 ;上档键F1扫描码3BH
DB '789-456+1230'
SCANTABLE1 DB 0 ;以下为有SHIFT情况下的ASCII键盘表
DB 01H
DB '!@#$%^&()_+',0,0
DB 'QWERTYUIOP{}',0
DB 0
DB 'ASDFGHJKL:"'
DB '~',0
DB '|'
DB 'ZXCVBNM<>'
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CODE
PUSH DS ; 保留PSP的段地址
MOV AX,0 ; 保留PSP的IP
PUSH AX
以上就是关于请写出程序当键盘按键被按下和放开按键时的扫描码程序,能显示出来全部的内容,包括:请写出程序当键盘按键被按下和放开按键时的扫描码程序,能显示出来、用汇编语言编一个程序,要求如下:、在键盘上输入一个数字显示其对应上档键内容的汇编程序求解答等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)