键盘逐行扫描法和行列扫描法的区别
一、原理不同逐行扫描法的原理是由程序对键盘进行逐行扫描,通过检测到的列输出状态来确定闭合键。行列扫描法的原理是通过行列颠倒扫描来识别闭合键。在扫描每一行时,读列线;然后依次向列线扫描输出,读行线。二、端口不同逐行扫描法需要设置输入口、输出口各一个。行列扫描法需要提供两个可编程的双向输入/输出端口。扩展资料键盘的基本工作原理就是实时监视按键,将按键信息送入计算机。在键盘的内部设计中有定位按键位置的键位扫描电路、产生被按下键代码的编码电路以及将产生代码送入计算机的接口电路等等,这些电路被统称为键盘控制电路。根据键盘工作原理,可以把计算机键盘分为编码键盘和非编码键盘。键盘控制电路的功能完全依靠硬件来自动完成的,这种键盘称为编码键盘,它能自动将按下键的编码信息送入计算机。另外一种键盘,它的键盘控制电路功能要依靠硬件和软件共同完成,这种键盘称为非编码键盘。这种键盘响应速度不如编码键盘快,但它可通过软件为键盘的某些按键重新定义,为扩充键盘的功能提供了极大地方便,从而得到了广泛应用。参考资料来源:百度百科-键盘 (计算机输入设备)百度百科-逐行扫描
[create_time]2020-06-07 20:26:39[/create_time]2015-06-25 09:40:52[finished_time]1[reply_count]0[alue_good]小溪趣谈电子数码[uname]https://pic.rmb.bdstatic.com/bjh/user/9417b52e681bb0c79a059c51b9c9647f.jpeg[avatar]专注解答各类电子数码疑问[slogan]专注解答各类电子数码疑问[intro]1770[view_count]矩阵键盘扫描程序分析
矩形键盘扫描程序分析如下:
1、在键盘中按键数量较多时,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接;
2、一个端口就可构成16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键,由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的;
3、在单片机应用系统中,键盘扫描只是CPU的工作内容之一,CPU对键盘的响应取决于键盘的工作方式,键盘的工作方式应根据实际应用系统中CPU的工作状况而定,其选取的原则是既要保证CPU能及时响应按键操作,又不要过多占用CPU的工作时间,通常,矩形键盘的工作方式有三种,即编程扫描、定时扫描和中断扫描。
[create_time]2023-02-23 19:34:39[/create_time]2023-03-10 09:50:54[finished_time]1[reply_count]0[alue_good]科技二三事2333[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.b439385a.rwKqCWux1GSjHXMhuaeLHQ.jpg?time=6961&tieba_portrait_time=6961[avatar]TA获得超过132个赞[slogan]这个人很懒,什么都没留下![intro]16[view_count]
单片机中的4×4矩阵键盘的键值怎么求?
单片机书上应该有讲的哦,多查资料。
既然是4x4,即4行4列了,共需要8个I/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx。还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I/O口电平状态,每个按键需要两个I/O口,一端连接行(行4bit之一),一端连接列(列4bit之一);若此时按键的电平状态为0010 0001,即十六进制数据0x21,按下的按键所对应的键值编码即为0x21。当然为了使用方便,在确定了按下按键的编码后,可对其赋值,我要将它赋值为数字键8,方便后续编程使用。例:
//获取键值编码,由于确定哪个按键按下
uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l;//行列值
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线值
return(cord_h+cord_l);//键盘最后组合码值
}
}return(0xff); //返回该值
}
while(1)
{
key=keyscan();//调用键盘扫描,
//keyVal=0~15表示按键对应的功能
switch(key)
{
case 0x7e:keyVal=0;break;//0 按下相应的键显示相对应的码值
case 0x7d:keyVal=1;break;//1
case 0x7b:keyVal=2;break;//2
case 0x77:keyVal=3;break;//3
case 0xbe:keyVal=4;break;//4
case 0xbd:keyVal=5;break;//5
case 0xbb:keyVal=6;break;//6
case 0xb7:keyVal=7;break;//7
case 0xde:keyVal=8;break;//8
case 0xdd:keyVal=9;break;//9
case 0xdb:keyVal=10;break;//a
case 0xd7:keyVal=11;break;//b
case 0xee:keyVal=12;break;//c
case 0xed:keyVal=13;break;//d
case 0xeb:keyVal=14;break;//e
case 0xe7:keyVal=15;break;//f
}
[create_time]2018-01-31 17:24:20[/create_time]2018-04-18 20:02:11[finished_time]2[reply_count]1[alue_good]lysolq[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.d07c213c.ea4ggn6fgnlizbWX5fPFbQ.jpg?time=3028&tieba_portrait_time=3028[avatar][slogan]这个人很懒,什么都没留下![intro]5756[view_count]
单片机中的4×4矩阵键盘的键值怎么求?
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。原理如同矩阵数列的行列式可以用下述代码进行://*************************************************** //函数功能: //单片机驱动4*4键盘,读入键盘值并使用数码管静态 //显示按键键值,若没有数码管用8421码显示LED灯也可以的 //读入原理:先令单片机端口输出11110000读一次,然后 //再令单片机输出00001111读一次把两次的值相加,最后 //获取一个高位和低位分别有0的值即可判断键值, //如11101110 //*************************************************** #include #define uchar unsigned char #define uint unsigned int unsigned char code smg_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //************************************************ //延时函数,在12MHz的晶振频率下 //大约50us的延时 //************************************************ void delay_50us(uint t) { uchar j; for(;t>0;t--) for(j=19;j>0;j--); } void main() { uchar key_l,key_h; uchar key; while(1) { P1=0xf0; key_l=P1; //读P1端口的值 key_l=key_l&0xf0; //令低4位置位为0 if(key_l!=0xf0) //判断是否有按键按下 { delay_50us(100); if(key_l!=0xf0) { //若有按键按下,则切换高低4位判断键值 key_l=P1&0xf0; //11100000 获取第一次键值 key_l=key_l|0x0f;//11101111 P1=key_l; //反过来再读一次,由于人手按下按键的时间虽然短暂,但是 key_h=P1; //对于单片机来说,已经足够长,因此可以正反读取两次值 key_h=key_h&0x0f;//00001110 key_l=key_l&0xf0;//11100000 key=key_h+key_l; //11101110 } } switch (key) { case 0xee:P2=smg_d[0];break; case 0xde:P2=smg_d[1];break; case 0xbe:P2=smg_d[2];break; case 0x7e:P2=smg_d[3];break; case 0xed:P2=smg_d[4];break; case 0xdd:P2=smg_d[5];break; case 0xbd:P2=smg_d[6];break; case 0x7d:P2=smg_d[7];break; case 0xeb:P2=smg_d[8];break; case 0xdb:P2=smg_d[9];break; case 0xbb:P2=smg_d[10];break; case 0x7b:P2=smg_d[11];break; case 0xe7:P2=smg_d[12];break; case 0xd7:P2=smg_d[13];break; case 0xb7:P2=smg_d[14];break; case 0x77:P2=smg_d[15];break; } } }
[create_time]2018-05-28 22:47:45[/create_time]2018-01-24 15:01:35[finished_time]2[reply_count]0[alue_good]skystmm[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.e14b4620.nE63TPhyqNWyZpIuPEPSHw.jpg?time=2848&tieba_portrait_time=2848[avatar]TA获得超过1074个赞[slogan]这个人很懒,什么都没留下![intro]12[view_count]
矩阵键盘扫描工作原理
亲~很高兴为您解答[开心],据老师了解到矩阵键盘是一种常见的输入设备,它由多个按键组成,通常是一个矩形的排列。矩阵键盘的工作原理是通过扫描的方式来检测按键的状态。矩阵键盘通常由行和列两个方向的导线组成。每个按键都与一行和一列的导线相连。当按键按下时,对应的行和列导线会连接起来,形成一个电路。扫描过程是通过逐行或逐列的方式进行的。首先,所有的行导线都被设置为输出模式,并且输出低电平。然后,逐个检测每一列的状态。如果某一列的导线检测到低电平,说明该列有按键按下。接下来,将该列设置为输入模式,并且输出高电平。然后,逐个检测每一行的状态。如果某一行的导线检测到高电平,说明该行与之前检测到的列导线相连的按键被按下。通过逐行或逐列的扫描方式,可以检测到所有按键的状态。根据检测到的行和列的组合,可以确定具体哪个按键被按下。这样,就可以实现对矩阵键盘的输入检测和响应。【摘要】
矩阵键盘扫描工作原理【提问】
亲~很高兴为您解答[开心],据老师了解到矩阵键盘是一种常见的输入设备,它由多个按键组成,通常是一个矩形的排列。矩阵键盘的工作原理是通过扫描的方式来检测按键的状态。矩阵键盘通常由行和列两个方向的导线组成。每个按键都与一行和一列的导线相连。当按键按下时,对应的行和列导线会连接起来,形成一个电路。扫描过程是通过逐行或逐列的方式进行的。首先,所有的行导线都被设置为输出模式,并且输出低电平。然后,逐个检测每一列的状态。如果某一列的导线检测到低电平,说明该列有按键按下。接下来,将该列设置为输入模式,并且输出高电平。然后,逐个检测每一行的状态。如果某一行的导线检测到高电平,说明该行与之前检测到的列导线相连的按键被按下。通过逐行或逐列的扫描方式,可以检测到所有按键的状态。根据检测到的行和列的组合,可以确定具体哪个按键被按下。这样,就可以实现对矩阵键盘的输入检测和响应。【回答】
[create_time]2023-06-30 11:54:58[/create_time]2023-07-15 11:53:35[finished_time]1[reply_count]0[alue_good]Tss生活解答老师[uname]https://gips0.baidu.com/it/u=3362628919,3995765196&fm=3012&app=3012&autime=1688480788&size=b200,200[avatar][slogan]这个人很懒,什么都没留下![intro]6[view_count]