单片机矩阵键盘检测的疑问

我用的是MSP430单片机,做矩阵键盘实验时,忘记在键盘其中一端接VCC了,现在两端都是低电平,请问这时应该怎样检测?
玩51的时候是一端高电平,一端低电平,然后检测输出高电平IO是否变为低电平这样做的。
但是现在我的想法是先让一个IO输出高电平,然后另一个IO为输入状态(默认应该是低电平吧?)然后检测输入状态的IO是否变为高电平这样,但是实验过无效。。。。

第1个回答  2014-05-22
P3=0xfe; //P3=0b1111 1110,令P3.0=0,同时令高四位为高电平,作好读端口准备(51IO特点)
temp=P3; //读回P3口的状态
temp=temp&0xf0; //temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。
while(temp!=0xf0) //上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图)
{
delay(5);
temp=P3;
temp=temp&0xf0;//这三句跟上面重复,功能是软件消抖
while(temp!=0xf0) //延时一段时间后判断还有按键按下,说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。
{
temp=P3;
switch(temp).....

我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。追问

你这个是51单片机检测低电平,程序我懂,我说了我是用MSP430检测高电平

第2个回答  2016-04-18
我也用430做的

单片机矩阵键盘检测的疑问
temp=temp&0xf0; \/\/temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。while(temp!=0xf0) \/\/上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图){ delay(5);temp=P...

51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是什...

单片机矩阵检测时的若干疑问,困扰4年了!
这个图不完整,矩阵键盘需要上拉电阻的,这个上拉电阻可能在原理图其他部分。有上拉电阻的线路恒高的。1,一般不会烧的,IO管脚内阻很大,电流很小,一般直连电源都可以。常用做法是穿电阻限流,因为IO输入电流只要很小就可以了。2,P3.0可以控制的话,应该是P3.0-3没有上拉,P3.4-7上拉(没...

关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...

单片机矩阵键盘反转扫描问题
好吧,我觉得可能是这样的。1、A&B|B=(A&B)|B&(A|NOT A)=A&B)|(A&B)|notA & B =B 2、由于单片机的计算速度是微妙级的,所以在执行 while((KeyPort&0xf0)!=0xf0);之前可以认为按键都是被按下的,这样的话,由于被按下,即使人为的给KeyPort复值,他的有效周期大约只有一条语句的...

单片机4×4矩阵键盘扫描编程问题(里面详细,欢迎高手)
扫描第一行,就是将第一行电平置为低电平,其他的都为高,扫描哪一行就让哪一行的电平置零,其他行为高电平。这就是第一个问题。在没有键按下的时候,列线全部是高电平,有第一行的键按下的时候,相应的列线就为低电平了,n=P1;n&=0xf0;if(n!=0xf0)这几句就是判断有没有键按下。在第...

c51单片机 在矩阵键盘松手检测的原理是什么?为什么要加松手程序?不加又...
如果你不检测松开,你按下去的时间他整个程序扫描几遍了,会运行很快的,相当于只要是按着的,他就会检测 ,但是这按下去的这段时间他检测几遍了,就像你按了几次,如果加了,他就会检测按下去的键松开了没有,没有就会一直等待。

为什么51单片机的矩阵键盘不可以让单片机对整个p3进行扫描,例如判断p...
矩阵键盘,也就是行列式键盘。因为列线是共用的,行线也是共用。所以,只能逐行(或逐列)的检测。不能一次性全部读出。

单片机独立键盘和4*4矩阵键盘中松手检测的区别,为什么矩阵键盘不能...
一般来说,4*4矩阵键盘函数的返回值是:按键信息0~15,和没有按键的代码16。当有键按下后,还要反复检测按键,当得到返回值是16,才能认为全部按键都已经松手。独立键盘,while(key!=0);只是等待这个按键盘何时松手,其它键,假如仍然按着,程序也不管了。独立键盘的检测,实在是太简单了。

有木有大神啊,这是51单片机矩阵键盘的一个程序,其中的那个松手检测没...
单片机默认都是1。按键都是0。所以按下去单片机自然就是0。如果你检测是1的话。那你的按键就没有按下去。

相似回答