第12章输入设备的工作原理与接口技术本章重点1.键盘的基本工作原理2.键的识别:行扫描法和行反转法识别原理3.计算机的键盘子系统4.扩展键盘扫描电路的工作原理5.主机键盘接口的功能和构成6.09H键盘中断处理程序对各类键的处理7.16H键盘中断处理程序的功能第12章输入设备的工作原理与接口技术12.1键盘的基本工作原理12.2键的识别12.3计算机的键盘子系统12.4键盘中断处理程序12.1键盘的基本工作原理最简单的键盘结构键盘的矩阵式结构12.2键的识别识别闭合键的方法:1.行扫描法2.行反转法行线与列线分别接到两个并行端口的示意图1.行扫描法的原理(1)检查是否有键按下;(2)若有,分行扫描,确定哪个键被按下。程序判断是否有按键被按下WAIT:MOVAL,00HMOVDX,OUTPORTOUTDX,AL;往所有行线上输出低电平MOVDX,INPORTINAL,DX;读取列值CMPAL,0FFH;是否有列线为低电平JZWAIT;否,则循环等待DONE:CALLDELAY;是,则延迟10-15ms去抖动…判断哪一个键被按下的流程PROG:MOVBL,00H;键号初值为0MOVCL,0FEH;送扫描初值11111110OUTDL,8;计数值为行数FROW:MOVAL,CLOUTROWPORT,AL;扫描一行ROLAL,1;扫描值循环左移一位MOVCL,AL;修改扫描值INAL,COLPORT;读取列值CMPAL,0FFH;判是否有列线为低电平JNZFCOL;有,则转FCOLADDBL,8;无,则使键号=键号+列数/行DECDLJNZFROW;所有行都扫完否?否,则扫下一行JMPDONE;是,则转DONEFCOL:RCRAL,1;列值循环右移一位JNCPROCE;如此列为低电平,则转PROCEINCBL;键号加1JMPFCOL;如未找到键为低电平的列线,则继续PROCE:…;键命令处理程序DONE:…;后续处理程序判断哪个键按下了2.行反转法的原理(1)行线、列线分别接并行口,行线输出,列线输入;(2)列线输出读到的值,读行线输入的值;(3)根据读得的行值和列值确定闭合的按键位置。例.标号为5的键闭合:(1)在行线上输出0000B,读列线的值为1011B(2)在列线上输出1011B,读行线的值为1101B(3)行线和列线的值合起来为11011011B,即DBH是唯一的,对应键5。因此,可以将各个键的代码放在一个表里,通过查表确定按下了什么键。例.8×8=64键的键盘连接及按键识别。图12.6行反转法的程序流程图ST:MOVAL,82H;设控制字,A口输出,B口输入OUTPORT1,AL;假设8255的控制口地址为PORT1WAIT1:MOVAL,0OUTPORTA,AL;将行线置为低电平INAL,PORTB;读列线值CMPAL,0FFHJZWAIT1;有键闭合否,否,则等待PUSHAXPUSHAX;保存列值CALLDELAY;去抖动MOVAL,90HOUTPORT1,AL;设控制字,A口输入,B口输出POPAXOUTPORTB,AL;将读得的列值在列线上输出INAL,PORTA;读入行值MOVAH,ALPOPBXMOVAL,BL;将读得的行值和列值存入AH和AL中用行反转法识别闭合键程序MOVSI,TABLE;取键码表首地址MOVCX,40H;CX为键数计数器,共64=40H个键LOOP1:CMPAX,[SI+0];行值列值和键码表比较JZKEYPRO;相等则转键命令处理INCSIINCSI;修改指针DECCX;修改键计数器JNZLOOP1;未比较完,则继续比较JMPST;在键码表中未找到相同码,则为重键;重判有键按下否KEYPRO:…TABLE:DW0FEFEH;键码表开始K0键DW0FEFDH;K1键DW0FEFBH;K2键DW0FEF7H;K3键…用行反转法识别闭合键程序12.3计算机的键盘子系统键盘子系统由两部分组成:键盘本身主机的键盘接口图12.7键盘子系统的示意图1.扩展键盘、键盘扫描码和系统扫描码(1)扩展键盘:83键以上标准键盘:83键(2)键盘扫描码:接通扫描码、断开扫描码标准键盘:其通码与其键号一致,断码是通码加80H,即通码最高位为0,断码最高位为1。扩展键盘:通码和键号不同,断码为通码前加F0H,为2字节。(3)系统扫描码标准键盘:其系统扫描码就是其接通码扩展键盘:同一个键的系统扫描码相同2.扩展键盘的工作原理图12.816行×8列的键盘扫描电路3.主机的键盘接口(1)主机键盘的接口功能接收键盘的串行扫描码将串行扫描码转为并行扫描码,再转为系统扫描码向CPU发中断请求接收CPU的键盘自检命令或复位命令,并传输到键盘(2)主机的键盘接口09H键盘中断处理程序16H键盘中断处理程序12.4键盘中断处理程序1.键的分类特殊键第一类ASCII码键第二类ASCII码键不能用ASCII码表示的组合键和功能键特殊命令键(1)对特殊键设置标志位09H中断处理程序对特殊键设置如下:D0右Shift键按下为1,否则为0D1左Shift键按下为1,否则为0D2Ctrl键按下为1,否则为0D3Alt键按下为1,否则为0D4ScrollLock键按奇数次为1,否则为0D5NumLock键按奇数次为1,否则为0D6CapsLock键按奇数次为1,否则为0D7Ins键按奇数次为1,否则为0(2)对第一类ASCII码键第一类键:ASCII码0-127处理方法:将系统扫描码转换为ASCII码低位字节为ASCII码,高位字节为系统扫描码(3)对第二类ASCII码键第二类键:对应ASCII码128-255处理方法:直接将数字作为ASCII码低位字节为ASCII码,高位字节为0(4)对于不能用ASCII码表示的组合键和功能键第三类键:组合键和功能键处理方法:用0作为低位字节,扩展码作为高位字节(5)对于特殊命令键第四类键:特殊命令键处理方法:不形成代码,而直接完成相应操作2.16H键盘中断处理程序表12.116H中断处理程序的功能调用