单片机4*4矩阵键盘扫描 问题
#include<reg52.h>voidmain(){unsignedchartempdata;P1=0xfe;tempdata=P1;while(1)if(tempd...
#include <reg52.h>
void main()
{ unsigned char tempdata;
P1=0xfe;
tempdata=P1;
while(1)if(tempdata==0xee)P1=0x00;
}
上面的代码我是,实验一下矩阵键盘1行1一列,那个按键能不能检测到已经按下,如果按下p1口连接的led灯全亮,可是有一些问题?
p1^0--p1^3连接的是矩阵的4行,p1^4--p1^7连接的是矩阵的4列
我先判断1行1列的按键是否可以用嘛,首先给p1^0--p1^3的最低位给0其他位给1
然后p1^4--p1^7全部给1,当按键按下的时候p1^4会变成0,
tempdata首先赋值的时候是0111 1111 但是当按键按下的时候不是会变成0111 0111(从高到底不是1110 1110)
转换成16不是ee吗?这样判断为什么上面不行?
下面的是原理图 展开
void main()
{ unsigned char tempdata;
P1=0xfe;
tempdata=P1;
while(1)if(tempdata==0xee)P1=0x00;
}
上面的代码我是,实验一下矩阵键盘1行1一列,那个按键能不能检测到已经按下,如果按下p1口连接的led灯全亮,可是有一些问题?
p1^0--p1^3连接的是矩阵的4行,p1^4--p1^7连接的是矩阵的4列
我先判断1行1列的按键是否可以用嘛,首先给p1^0--p1^3的最低位给0其他位给1
然后p1^4--p1^7全部给1,当按键按下的时候p1^4会变成0,
tempdata首先赋值的时候是0111 1111 但是当按键按下的时候不是会变成0111 0111(从高到底不是1110 1110)
转换成16不是ee吗?这样判断为什么上面不行?
下面的是原理图 展开
2个回答
展开全部
LZ 应该把tempdata=P1; 写在 while(1) 里面,而不是写在前面。
另外,如果松手了,P0 的灯怎么办?还是全亮不变?那效果就是你只能按一次,后面按的都没反应。
搞错,为什么 P1又是 按键 又是 LED灯呢?你是什么硬件连接啊?
另外,如果松手了,P0 的灯怎么办?还是全亮不变?那效果就是你只能按一次,后面按的都没反应。
搞错,为什么 P1又是 按键 又是 LED灯呢?你是什么硬件连接啊?
追问
我并不是要实现什么功能,我只是想按键按下,if(tempdata==0xee) 这一句能否判断出来,点亮led通知我,这个判断语句能够正确的判断,并且能够执行 后面的语句,但是为什么,判断不出来呢
追答
把tempdata=P1; 写在 while(1) 里面,而不是写在前面。
展开全部
4*4矩阵键盘扫描是一行一行(或一列一列)扫描的,每扫描一次有可以产生四和键盘状态,0111 1110.0111 1101,0111 1011,0111 0111
1011 1110.1011 1101,1011 1011,1011 0111
1101 1110.1101 1101,1101 1011,1101 0111
1110 1110.1110 1101,1110 1011,1110 0111
1011 1110.1011 1101,1011 1011,1011 0111
1101 1110.1101 1101,1101 1011,1101 0111
1110 1110.1110 1101,1110 1011,1110 0111
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询