安防监控知识
电气知识|键盘I/O
2017-03-09  浏览:54
安防之家讯:一、键的类型 键盘是计算机最基本的一种输入设备,用以输入信息,以达到人机对话的目的

键盘提供了三种基本类型的键

1)字符键:传送一个ASCII码字符给计算机。如A~Z,0~9,%,$ 等。

2)扩展功能键:产生一个动作。如Home,End,Enter等,不能用标准ASCⅡ码表示的特殊键或组合键。

F1~F10:3B~44H

↑ ↓ ← → :48 50 4B 4DH

PgDn PgUpIns Del: 50 48 4B 4D 52 53H

3)组合功能键:改变其它键所产生的字符码。如Alt,Ctrl,Shift等

二、字符码与扫描码

字符码与扫描码

BIOS的键盘中断:当8259A的21H端口第1位(D1)为0,就允许键盘中断,在键盘上“按下”或“放开”一个键时都会产生一个类型号为9的中断。并转入BIOS的键盘中断处理程序。

1)扫描码:键盘中断处理程序从8255的60H端口读取一个字节,该字节的低7位就是键的扫描码。键盘上的每一个键对应一个扫描码,从01H~51H。

通码:“按下”时取得的字节为通码,D7位=0。

断码:“放开”时取得的字节为断码,D7位=1。

2)字符码:BIOS键盘处理程序将所取得的扫描码转换成相应的字符码。大部分键的字符码为ASCII码,没有ASCII码的键其字符码为0或一个指定的操作(如屏幕打印等)。

BIOS数据区的键盘缓冲区KB_BUFFER :一个先进先出(FIFO)并具有双指针的循环队列。存放转换成的字符码和扫描码(扫描码存放在字的高8位上)。当CPU想要得到键盘输入时,就调用BIOS键盘例行程序,它按其接收时的次序从缓冲区取出字符和扫描码,回送给CPU。键盘缓冲区结构如下:

0040:001ABUFF_HEADDW? ;键盘缓冲区的首地址指针

0040:001CBUFF_TAIL DW? ;键盘缓冲区的末地址指针

0040:001EKB_BUFFER DW16 DUP (?) ;16个输入量的空间

0040:003EKB_BUFFER_END LABELWORD

3)BIOS键盘中断:INT 16H调用(从键盘缓冲区输入)。

AH=0:从键盘读一字符。此时一直要等到键盘缓冲区有输入才返回。返回时AL=字符码,AH=扫描码。

AH=1:读键盘缓冲区的字符。如ZF=1则键盘缓冲区空;ZF=0则AL=字符码,AH=扫描码。

AH=2:取键盘状态字节。AL=键盘状态字节(KB_FLAG:0040:0017H单元)。

键盘状态字节KB_FLAG:内存的0040:0017H单元,由类型 9的硬件键盘中断置入键盘的对应状态到该单元。低4位是Alt、Ctrl、Shift左、Shift右的标志位,这4位在相应键按下时置位,该键一抬起即复位。KB–FLAG的高4位是Ins、Caps Lock、Num Lock、Scroll Lock键的标志位,这些位在相应键奇次按下时置位,偶次按下时复位。具体含义如下:



键盘的其它标志区:

KB–FLAG1:0040:0018H单元如下。



其中的高4位是Ins、Caps Lock、Num Lock、Scroll Lock锁定功能键的动态(临时)标志位,即这些键按下时该位置1,键释放即被置0。这4位动态标志位用于对这些键本身进行处理,而KB–FLAG中的这4位静态标志位反映了它们的锁定状态,用于控制其它键的键意确认。KB–FLAG1中的D3位为Hold–State保持状态位,Ctrl+Num键按下时该位置1;非Num键的任一键按下就使其复位。暂停过程就是将该位置1后进入一个无限循环过程,判断该位是否变为“0”,一但为“0”,即退出循环。

ALT–INPUT:0040:0019H单元。此单元不是标志单元,而是寄存单元。在按着Alt键不释放的条件下,连续按下小键盘(右区)的数字键×××(1~255)时,此1~3位的十进制数的二进制编码即在此生成。当Alt键释放时,第一字节为ALT–INPUT单元中的代码、第二字节为00H的两个字节存入键盘缓冲区,ALT–INPUT单元又被清0。若打入的数字键大于255数值,则以256为模产生结果。这是一种直接在键盘缓冲区建立所期望的ASCII代码的一种方法,第二字节为00H就与其它键所建立的ASCII代码相区别。

BIOS–BREAK:0040:0071H单元。此单元是中止或称为间断标志单元。Ctrl+Scroll键按下时,该标志字节置为80H,否则为00H,Ctrl+Scroll键的按下还清除键盘缓冲区,并以两个全0字节为其ASCII码,存入键盘缓冲区。此标志和特征码均可被其他软件用来证实“间断”键的按下。但是ROM–BIOS并不直接提供间断功能,在键盘中断服务程序中,对该组合键的按下提供了一条INT 1BH指令。在ROM–BIOS中类型1BH中断的服务程序只是一条中断返回指令IRET,其它什么都不做。其它软件只需将其“间断”功能程序的入口地址重新写入中断向量表的1BH×4的位置中去即可。因而即对其它软件提供了查询处理的方便,也提供了中断处理的方便,用以实施“间断”功能。

RESET–FLAG:0040:0072H单元。是两字节的复位标志。当Ctrl+Alt+Del组合键按下时,就以1234H代码填入,然后转移到复位初始化程序,这就是热启动复位。

Shift+Prtsc组合键:是打印屏幕的特殊操作。按下时由键盘中断服务程序执行软件中断指令INT 5产生的。这个组合键既不向键盘缓冲区存代码,也不建立标志,但是INT 5软件中断服务程序使用STATUS–BYTE标志单元(0050:0000),使在打印屏幕过程中再按下Shift+Prtsc键将不被理睬。

三、DOS键盘功能调用

(用BIOS键盘缓冲区输入)设置AH,执行INT 21H的DOS功能调用实现从键盘输入字符。

单字符输入:输入的字符在AL寄存器中返回。

AH=1:从键盘输入一个字符并回显在屏幕上,并检验是否按下了Ctrl_Break键,如按下则自动调用INT 23H并结束程序。返回时AL=字符。

AH=6:读键盘字符,入口时DL=0FFH。如果准备好,AL=字符,未准备好,AL=0。

AH=7:从键盘输入一个字符不回显,也不检验是否按下了Ctrl_Break键。返回时AL=字符。

AH=8:除不回显以外,同功能1。

注意:若要求程序能接收功能键及具有键扩展码的组合键必须进行两次DOS功能调用,第一次回送00,第二次回送扫描码。

输入字符串:AH=0AH。从键盘输入一串字符并存入用户定义的缓冲区中(DS:DX=缓冲区首地址)。

缓冲区的第一字节给出能输入的最大字符数。由用户程序给出。如下:



第二字节为调用后实际输入的字符数。由功能0AH调用填入,不含回车符。

第三字节开始为调用后实际输入的字符串。由功能0AH填入,不含回车符。

DOS调用后,保持DS:DX=缓冲区首地址不变。

清除键盘缓冲区:AH=0CH。清除后并再调用一种键盘功能。被调用的键盘功能号(只能是1、6、7、8、0AH)作为入口信息放在AL寄存器中。

检验键盘状态:AH=0BH。返回时AL=0FFH表示有键入,AL=00则无键入。返回后执行下一条指令。

四、键盘输入

1、BIOS的键盘中断

(1)字符输入

mov ah,o

int 16h

(2)读键盘状态

mov ah,2

int 16h

xor ah,ah

mov bx,ax

mov ch,4

rotate:

mov cl,4

rol bx,cl

mov al,bl

and al,0fh

add al,30h

cmp al,3ah

jlprint

add al,7

print:

mov dl,al

mov ah,2

int 21h

dec ch 

jnz rotate

2、DOS字符输入功能调用

(1)读入单字符

mov ah,1

int 21h

(2)字符串输入

Maxlen db N

Actlen db ?

string db N dup(?)

lea dx,Maxlen

。。。

mov ah,0ah

int 21h

xor bh,bh

mov bl,Actlen

mov string[bx],0;作文件名

或 mov string[bx],‘$’ ;显示

安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 安防监控 的产品:
  • 安防监控资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved