在看郭天祥的51单片机c语言教程,在看到矩阵键盘检测的时候有点不懂
首先是他的显示外部函数
#define uchar unsigned char//定义uchar
sbit dula=P2^6;//申明U1锁存器的锁存端
void display(uchar num)
{
P0=table[num];
dula=1;
dula=0;
}//这里为什么是先给P0赋值了?以前编关于数码管的显示的时候都是先打开U1锁存器再赋值,再关闭U1锁存器的,还是说这两种顺序效果是一样的?
另外,检测矩阵键盘的语句他是这么写的
uchar temp.key;
P3=0xfe;//将第一行线置低电平,其余行线置高电平
temp=P3;//读取P3口当前状态值赋给临时变量temp
temp=temp&0xf0;(注:P3高四位接列,低四位接行)
后面的就不写了,疑问就出在这里.
首先,P3=0xfe怎么做到只给行线赋值的,0xfe换为二进制不是11111110么,这么说就是高四位也被置高电平了.
其次,且不管上面那个问题,就算temp是现在P3口的状态值,将其与0xf0进行"与"运算,说是得出值是0xf0的话就是第一行没有按键被按下.但是0xf0不是11110000么?那么与P3的第一行线已经被置为低电平也就是0了,它们进行"与"运算的话最低位是1啊,怎么会与0xf0相等呢?
才开始学单片机,如果问题幼稚了,还请见谅
51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是什...
关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...
单片机矩阵检测时的若干疑问,困扰4年了!
1,一般不会烧的,IO管脚内阻很大,电流很小,一般直连电源都可以。常用做法是穿电阻限流,因为IO输入电流只要很小就可以了。2,P3.0可以控制的话,应该是P3.0-3没有上拉,P3.4-7上拉(没图,不能具体确定,反正不可控的4位全是高,可控的4位可高可低),P3.0是0变1,P3.4还是1 付个...
单片机矩阵键盘检测的疑问
temp=P3; \/\/读回P3口的状态 temp=temp&0xf0; \/\/temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。while(temp!=0xf0) \/\/上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不...
51单片机的矩阵键盘检测问题
扫描按键有没有释放,如果释放再加个消抖延时,再扫描有没有释放,如果按键释放则确认已经松手了。我是这么做的,可以用
帮忙看看这个51单片机的计数器程序哪里出问题了吧,用矩阵键盘控制的
1、数码管显示部分的问题,没有消 0 ,C 语言中变量初值都是 0 ,所以一开始就会显示 0 如果你不想让显示 0 ,那就要写消 0 的程序,就加两句话,很简单的 2、键盘处理部分的问题,如果确认你的键盘检测是对的,那么就是键值处理部分的问题了 3、51都是加法计数器,如果你要想进行减法计数的...
关于51单片机,c51编程,矩阵键盘翻转扫描的问题。请解释下图片中与,或...
是位运算,&位与运算,|位或运算。0x表示十六进制。0x0f转换成二进制是00001111。0xff转换成二进制是11111111。&运算,当相同位置都为1时才为1,否则为0。如00011010&00001111=00001010。|运算,当相同位置有一个为1则为1,否则都为0时则为0,如 00101010|00001100=00101110。
51单片机矩阵键盘怎么检测啊
给按键的一端一个低电平,当按键按下时,相当于一个通路,会将低电平返回到另外一端,所以我们只要判断另外一端是否返回低电平来检测按键是否被按下!
关于51单片机制作矩阵键盘简易电子琴的,代码如下,其他都正常,但第三...
程序没有错?你检查下你的按键有没有问题,可以加个led检测下,ps有按键的情况下最好加松手检测程序
51单片机矩4X4阵键盘的第一排按键没反应。
你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试