关于51单片机矩阵键盘的问题。

作者&投稿:谈亭 (若有异议请与网页底部的电邮联系)
关于51单片机的问题,独立键盘和矩阵键盘怎么同时使用?懂的来帮帮忙啊!~

你是不是按下下方的四个按键也会让1,2,3,4灯亮起来?
你可以不要定义在同一个引脚上连起来一个引脚的四个按键,你试试控制8个单片机不同引脚上的按键编程一下试一试。
程序上,你的独立按键程序和矩阵键盘程序要分开,独立键盘的程序高低四位判断是相反的,这个一定要注意。你可以让独立按键在那里扫描,矩阵键盘用标志位扫描一下,一旦标志位置位才扫描矩阵,就差不多了。
最好事前检查一下你电路连接方式,分析一下,看不见你的原理图,不太好说,先试试上面的方法吧。
一孔之见,希望对你有帮助吧。

…… P1=0xdf; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay10ms(); temp=P1; P1=temp&0x0f;--错了 if(temp!=0x0f) { temp=P1;……应为: temp=temp&0x0f;

(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。
(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于这一行的四个按键变成了四个独立按键,在读取列线的值就知道了究竟哪个按键被按下了。 此时P3口就出现了特定的电平组合,相当于特征码了,然后再认为映射一下功能就可以了。

大概看了下 ,你这个矩阵键盘是4x4的键盘,P3口的高四位和低四位组成的行列键盘,其实这个比较简单,P3=FE=11111110,这段是判断按键是否在第一行(假定低四位为行,高四位为列),依次类推,P3=FD=11111101,这段是判断按键是否在第二行,直到低四位扫描完,就确定了是在哪一行按下的键,接下来判断哪里列,原理还一样,这样就把哪个按键确定下来了,中间那个DELAY(5)你应该知道是防抖动的延时程序

单片机矩阵键盘,如上述是 4x4 的矩阵键盘,
P3=0xfe; //比如这里 1111 1110 这是扫描第一组 4 个键,按下 4 个键 读到的数据为
1110 1110 (0xee)、1101 1110 (0xde)、1011 1110 (0xbe)、0111 1110 (0x7e)
P3=0xfd; //比如这里 1111 1101 这是扫描第二组 4 个键,按下 4 个键 读到的数据为
1110 1101 (0xed)、1101 1101 (0xdd)、1011 1101 (0xbd)、0111 1101 (0x7d)
P3=0xfb; //比如这里 1111 1011 这是扫描第三组 4 个键,按下 4 个键 读到的数据为
1110 1011 (0xeb)、1101 1011 (0xdb)、1011 1011 (0xbb)、0111 1011 (0x7b)
P3=0xf7; //比如这里 1111 0111 这是扫描第二组 4 个键,按下 4 个键 读到的数据为
1110 0111 (0xe7)、1101 0111 (0xd7)、1011 0111 (0xb7)、0111 0111 (0x77)
这样可以得到 16 个键值。如果不用 4 次扫描 就不能得到 16 种状态。

当检测按键时用的是它的输入功率,先把按键的一端接地,另一端与单片机的某个I/0口相连,开始时先给该I/0口赋一高电平,然后让单片机不断地检测该I/0口是否变为低电平,当按键闭合时,即相当于该I/0口通过按键与地相连,变成低电平,程序一旦检测到I/0变为低电平则说明按键被按下,然后执行相应的指令。

51单片机矩阵键盘全是高电平,怎么解决?
答:自己置任意一个端口低电平就是,因为线与的关系,按下与该端口连接的按键,另一个连接这个按键的端口的电平也会拉低,所以这个按键按下的事件就可以被检测到了

51单片机跪求解答这个键盘问题
答:矩阵键盘这个东西是很简单的,就是利用“线与”。说明白点就是开关的一端接P1一端接P5,当开关按下时P1和P5同时被置1.同理,当程序检测到P1,P5被置1之后知道是该按键被按下。至于4*3还是4*4都是一样的

C 51单片机 矩阵按键
答:首先记住,你的是矩阵键盘,就是说一个按键A的一端接单片机的一个脚(假设P00),另一个也接一个脚(假设P07),GPIO_KEY=0x0f; 当没有按下的话,GPIO_KEY还是等于0x0f的,假设按下A按键,由于按键两边一个接高电平,一个接低电平,按下后,高电平被低电平拉成低电平,也就是说按键A两侧都...

51单片机矩阵键盘检测,怎么5—f都显示,只有0~3按键不显示数字?
答:恩,如果程序没问题,那肯定是你第一排电路走线出了问题,按键坏了的可能性很小

51单片机P0口接矩阵键盘可以吗?
答:但由于接了mos管电路(如图),松开按键后,VCC的电流不会导通到地线,所以IO口会恢复高电平,可以进行下次逻辑判断。结论:P0口只有在用于IO驱动时才需要加上拉电阻,键盘不需要 ps:这些你可以下个仿真软件研究,proteus,它可以把keil生成的工程文件虚拟烧录到单片机中,用法很简单,和multisim一样 ...

关于一个c51单片机的4*4矩阵键盘扫描程序,我用keil运行,总是有错误...
答://电路说明如下。//单片机:使用51系列兼容的即可;//4×4矩阵键盘:接在P1口;//两位数码显示器: P0口输出七段码,P2口输出位选码。//=== //C语言程序如下。/ 文件名: KEY_LED.c 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。/ include <reg51.h> include <intrins.h...

一个51单片机矩阵键盘控制发光二极管的问题。
答:如果用的是Keil编译器,你的位取反表达式是错误的,请参考以下程序段改动:while(1){ LED = 0;//将这句安排在这里,原case后面的那些LED = 0;就可以全部不要了。LED=keyscan();switch(LED){ case 1:D1=~D1;break;case 2:D2=~D2;break;case 3:D3=~D3;break;case 4:D4=~D4;br...

用51单片机让1602液晶连续的显示矩阵键盘按键值,连续按下的数都回被显...
答:先根据你要显示数字的个数定义一个unsigned char型的字符数组,调用扫描键盘函数,扫描到哪个键被按下的同时将键值存进对应的数组元素中,再调用液晶显示程序显示,液晶显示程序中显示的位数可变,可以定义一个变量来记录已按下的位数,显示的程序中实参为已按下按键的个数,这样就能实时显示数字了。

51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上
答:你好!!你做矩阵键盘检测的时候,会触发相关的IO口的状态,通过分析IO口,就能知道那个键按下;定义一个变量,将按下的键值赋给变量就行了

C51单片机串口通信问题,按下矩阵键盘则单片机向电脑传相应数据。_百度...
答:有2种原因,1.按键消抖的问题 2.串口接收程序的问题,换个其他软件试试问题是否重现