矩阵键盘这个代码不懂了,

作者&投稿:华殃 (若有异议请与网页底部的电邮联系)
【求解释】单片机最简单的矩阵键盘代码(只有三句)~

这是完整的矩阵键盘代码没错,不过并不难理解,假设按下的是连接P1.1和P1.5的按键,那么各行代码的二进制结果为:
第一行:P1 = 1111 0000
第二行:KH = 1101 0000
第三行:P1 = 0000 1111
第四行:KL = 0000 1101
第五行:Key = 1101 0000 | 0000 1101 = 1101 1101
高位和低位“0”的位置不同,位或得到的结果也不同,这样就能得到不同的键值,作为判断按键位置的依据。

关键你是想用什么语言!这个是最简单的,学校里的学生都会的!

首先,第 一点,程序中有10ms的延时,采用了两个DELAY直接去用CPU延时,在正式的工程项目中,这绝对是不允许的。
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。

然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。
再说算法,最简单的做法应该是,
像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。

void Scan_Key(void)
{
if(read_status==0)
{
P1 = (P1 & 0x0F) | 0x01;Delay50us();
key_temp=(P1 & 0x0F) | 0x01;

}
else if(read_status==1)
{
P1 = (P1 & 0x0F) | 0x02;Delay50us();
key_temp=(P1 & 0x0F) | 0x02;

}
..........................
read_status++;
if(read_status>=4)read_status=0;

}


51单片机矩阵键盘(c语言) 求大神啊~
{k=13;break;} case 0x48:{k=14;break;} case 0x28:{k=15;break;} case 0x18:{k=16;break;} default:{k=0;break;} } return(k);} \/\/在主函数里面直接调用keyboard()函数,直接返回键值;然后在数码管显示。好好的研究下这个键盘程序,这种方式很程序很精炼、简单 绝对可以调出来。

51单片机矩阵键盘扫描程序,怎样判断当前按键式第几行的?
p3=fe就是扫描第一行,然后&上f0就是屏蔽低位高位不等于f0则有建按下,后面你那个12345678……就是第几个建,如你的例子,=ed的时候是发生在p3=fd的程序,fd是第二行手机打字欢迎追问

51单片机矩阵键盘程序问题求解?
你这个问题其实就是一个按下同一个键,根据不同的按下次数选择不同的函数的问题是吧?如果是这样的话,你可以不仅用key的值标记,同时加上用另一个记录该键按下次数的值进行标记,比如说你设置n作为按下次数的标记位,初始化为0.你每按下一次,n就加一。具体调用函数的时候只需要对n的值进行判断...

模块五:矩阵\\独立键盘
此时,通过行和列的位置确定,可以准确地识别出按键位置为S4。独立按键的实现相对简单,每个按键S4至S7分别对应P33、P32、P31和P30这四个I\/O口。当按键被按下时,对应的I\/O口会从高电平变为低电平,进而被识别为按键输入。矩阵按键的实现则是通过判断行和列的位置来确定按键位置。这种键盘设计将按键...

用行列反转法进行单片机矩阵键盘扫描,解释一下下面的程序
KeyPort=0x0f; \/\/行线输出全为0 cord_h=KeyPort&0x0f; \/\/读入列线值 这两句代码最后造成的结果就是使得cord_h=0x0f。这样的话,完全没有任何的意义呀,--- 不一定是 0f。有按键时,也可能是 07,也可能是 0d,也可能是 0e,也可能是 0b。

这个矩阵键盘的程序问什么只能够显示1,5 ,9号。其他的怎么不行了。
……case 108:---应该是128。几个地方,都错了。P0=table[7];break;default :break;……

矩阵键盘矩阵式键盘的按键识别方法
观察是否有键按下,键按下时对应的高四位中的一个会变为0。然后将P1口的高四位设为0,低四位设为1,查看低四位的变化,从而确定列位置。最后通过或运算确定键的具体位置。实际应用中,键盘处理是复杂的过程,它占据了应用程序的大部分代码,因此在编写之前,理解逻辑并设计合适的算法至关重要。

求矩阵键盘的C语言。我写的程序,矩阵键盘的第1,2,4行一点反应都没有,第...
void delay() \/\/延时子程序 { unsigned char n, m;for (n = 100; n > 0; n--)for (m = 300; m > 0; m--);} unsigned char Keycan(void) \/\/按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线 { unsigned char rcode, ccode;P1 = 0xF0; \/\/ 发全0行扫描...

单片机中的4×4矩阵键盘的键值怎么求?
这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I\/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。原理如同矩阵数列的行列式 可以用下述代码进行:\/\/*** \/\/函数功能...

有关4X4矩阵键盘FPGA的程序的分析,有谁帮我分析一下这个状态机的...
是应该还有col的输出,这才是整个扫描程序的重点。如果扫描的原理懂了的话,程序好像也没这么难理解啊,简单讲一下,在NO_KEY_PRESSED,col输出0000,如果有按键按下,当前行的row连接到col,则按下的那一行电平为0,转到SCAN_COL0。行值由row可知,开始逐列扫描以确定列值;在SCAN_COL0状态,col...

盈江县19643612152: 【求解释】单片机最简单的矩阵键盘代码(只有三句) -
别梁保法: 用手机提问最大的“优点”是不能给你源代码,因为长度会超标.我之前开发的有AVR/51开发板,里面有这个矩阵键盘带显示的程序,可是粘贴不上啊,字数限制.你可以给个邮箱发给你,或者登上百度Hi,直接给你.

盈江县19643612152: 关于单片机4*4矩阵键盘的程序,有好多地方不明白其用意啊. -
别梁保法: 闹明白这些问题,先要闹明白:P1是准双向口,读之前需要置1.P1内部有弱上拉,输出高电平的时候,可以被外部信号拉低.注意,整个按键扫描的过程中,P1.4~P1.7始终输出的是高电平,但这个高电平是弱上拉的,可以被外部信号拉低,...

盈江县19643612152: 自学单片机 c语言编程 写了个矩阵键盘扫描程序 老是不行,郁闷了两天了呀 请大侠指点下 -
别梁保法: void keyscan()//矩阵键盘扫描程序 { P0=0x0f;if(P0!=0x0f) //这里条件0,不会执行后面的程序吧 {delay (10);if(P0!=0x0f){ a=P0; P0=0xf0; b=P0; a= a|b; }; }; }

盈江县19643612152: 单片机矩阵按键操作不懂,在看程序时,这个按键扫描函数没看懂,注释后面的数值P3是我假设的,假设按键S5 -
别梁保法: 假设LZ 说的0xbe 就是S5 的键值,那么该程序有一处LZ没理解的地方,和一处错误地方,还有一处本人不赞同的地方.先说LZ没理解的地方,那就是 P3=cord_h|0xf0; //输出当前列线值P3=0xfe cord_l=P3&0xf0; //读入行线值cord_l=0xf0 最后的...

盈江县19643612152: 单片机矩阵键盘程序求解释和修正! -
别梁保法: 没有硬件电路,单从程序来看应该没错.我加了注释,你可以参考下.#include char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delayms(int xms) { int i,j; for(i=xms;i>0;i--) //i=...

盈江县19643612152: 单片机的 矩阵键盘问题 求讲解!!附程序了 -
别梁保法: 这程序,逻辑上,是有错的.------------------ if(key_l!=0xf0) //--不等于则....{ delay_50us(800);//键盘消抖 if(key_l!=0xf0) //--不等于则....…… ------------------ 在延时前、后的两个判断,所用的条件、变量内容,都是完全相同的.在前面如果满足条件,在后面,就也能满足.在前面,不满足条件,在后面,也一定不满足.实际上,后面的这个判断,并无任何用处.对于消抖,这程序仅仅是进行了延时而已.采纳答案中,没有指出这个缺点.http://wenwen.sogou.com/z/q765985689.htm 这才是正确的程序和正确的解释.

盈江县19643612152: STM32 4*4矩阵键盘的疑惑 程序中通过扫描方式实现,但不能实现功能.调用库函数时,有个函数不明白设置的 -
别梁保法: GPIO_Write(GPIOB,(GPIOB->ODR & 0xfff0 | 0xf)) 这个地方是说!你先把GPIOB口的输出寄存器低四位清零,让后在把他与0xf相与在把低四位置高.GPIOB是32位寄存器所以,0xfff0正好是32位,那个0xf是0x0f的意思!

盈江县19643612152: avr 矩阵键盘程序看不懂 -
别梁保法: 程序开始时将水平方向的端口置低电平,垂直方向的端口置高电平,(或者反过来);当某一按键按下时,置高电平的端口便被拉到低电平.这样可以从端口读出此时的电平情况,从而得知哪个键按下.

盈江县19643612152: 矩阵键盘程序解析,扫描和判断程序如下.求注释!!真心看不懂啊!4*4矩阵 -
别梁保法: 大体上看了一下你的程序, 就是一个很简单的键盘扫描~~ 你应该看看矩阵键盘的原理,再看这个的时候就很简单了~~我给你手写也有点累~ 处于责任心,给你写点吧!! 这个程序实现的是4*4的矩阵键盘,用高4位来进行扫描是否有键按下(高...

盈江县19643612152: 我用51调试4*4矩阵键盘时有这样一个例程,函数Keyscan()的功能是怎样实现的没看明白,请高手指教,多谢多谢 -
别梁保法: P0的高位和低位分别表示行值或者列值,值为0时表示有效, 行值和列值同时为零表示有按键按下假设高位表示行...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网