全球旧事资料 分类
数据口的值即可知道是否有键被按下,或按下了哪个键。2)行列式键盘的结构与工作原理。键数较多时,独立式键盘结构需要占用很多IO口线,会浪费许多资源,这时,常采用行列式键盘结构,即将键盘排列成行、列矩阵式,如图64所示。
f图64中,每一水平线行线与垂直线列线的交叉处连接一个按钮开关,即开关的两端分别接在行线和列线上,N个行线和M个列线可组成M×N个按键的键盘。工作原理为所有行线输出为高电平,所有列线输出为低电平,读行线,若有键闭合,读回的行线值不全为高。对按键的识别方法如下:第一步:确定是否有键被按下。具体方法为所有的行线输出高电平,所有的列线输出低电平,读行线,若行线中有低电平,延时20ms再读一次行线(去抖动),若仍为低电平说明有键闭合,把读到的四位行线状态保存起来;第二步:当确认有键闭合时,使所有的行线输出低电平,所有的列线输出高电平,然后,读列线状态;第三步:将第一次读得的四位行线值作为低4位,第二次读得的4位列线值做为高4位组成一个字节,然后,将该字节取反得到的值称为键值。键值和键号是两个不同的概念,键值即当有键按下时,单片机读得的值,键号是印在键帽上的值,两者存在一一对应的关系。如在图64中,设键号为“6”的键闭合,则第一次读的行线P13、P12、P11、P10的状态为1101;第二次的列线P17、P16、P15、P14的状态为1011,列、行状态组合后为10111101B,取反后为01000010B,以十六进数计为42H,即键号为“6”的键对应的键值为42H。同理可以求出图64中的其它键号与键值的对应关系如表61所示:
f表61中的键值由两位16进制数组成,高位和低位分别为闭合键所在列号和行号,1、2、4、8分别表示第1、2、3、4行或列,如果需要可以通过软件将键值转成键号。【例61】设某单片机系统的键盘电路如图64所示,编写程序当有键闭合时,将闭合键的键号存于键盘缓冲KEYBUFF单元,并将按键标志KPRESSED置1。解:设键盘缓冲KEYBUFF为30H单元,按键标志KPRESSED的位地址为00H,系统的晶体振荡器频率为6MHz,子程序段如下:KEYBUFFEQU30HKPRESSEDEQU00HKEYHAND:MOVMOVANLXORJZACALLMOVANLMOVXORJZMOVMOVANLORLCPLP10FHAP1A0FHA0FHNOKEYDLY20MSAP1A0FHKEYBUFFAA0FHNOKEYP10F0HAP1A0F0HAKEYBUFFA;得到键值;;没键闭合,退出;列线为高电平,行线为低电平;NOkeypressed,退出;延时20ms执行去抖动操作;行线为高电平,列线为低电平
fMOVMOVROW:CLRRRCJCXCHADDXCHSJMPLINE:MOVSWAPLIr
好听全球资料 返回顶部