永发信息网

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

答案:3  悬赏:50  手机版
解决时间 2021-01-23 23:53

uchar keyscan()
{
P3=0xfe; //比如这里
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfd;//比如这里
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfb;//比如这里
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xf7;//比如这里
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;

}
最佳答案
单片机矩阵键盘,如上述是 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 种状态。
全部回答
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。 (2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于这一行的四个按键变成了四个独立按键,在读取列线的值就知道了究竟哪个按键被按下了。 此时P3口就出现了特定的电平组合,相当于特征码了,然后再认为映射一下功能就可以了。
大概看了下 ,你这个矩阵键盘是4x4的键盘,P3口的高四位和低四位组成的行列键盘,其实这个比较简单,P3=FE=当检测按键时用的是它的输入功率,先把按键的一端接地,另一端与单片机的某个I/0口相连,开始时先给该I/0口赋一高电平,然后让单片机不断地检测该I/0口是否变为低电平,当按键闭合时,即相当于该I/0口通过按键与地相连,变成低电平,程序一旦检测到I/0变为低电平则说明按键被按下,然后执行相应的指令。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
卡莱尔汽修美容俱乐部地址在什么地方,我要处
中国联通(西城街道盛豪御景对面)地址在什么地
生活中处处有物理:如图所示,治病输液时,药
中国联通(二台营业厅)(中国联通)地址好找么,
荣翔摩托车行地址有知道的么?有点事想过去!
2016哈尔滨顺迈高中考试内容
三直线ax+2y+8=0,4x+3y=10,2x-y=10相交于一
一首女声合唱的中国风大气纯音乐,歌词只有阿
对方把我QQ删了,或者拉黑了,我发信息。给他
中国联通(南关营业厅)(辰州南路20-99号楼附近
铭子星辰汽车服务有限公司地址有知道的么?有
11月19日西安限车牌尾号是多少
完成一次膝跳各结构的顺序是[________]______
中国联通(团山营业厅)(团山办事处团山村中国
点A(-5,y1)、B(-2,y2)都在直线y=-2x上
推荐资讯
丁香花传奇世界flashMTV
东北哪里最多木皮刨切厂
小儿便秘挂什么科室
呼市敬业学校地址有知道的么?有点事想过去
孔店村村地址有知道的么?有点事想过去
港仔化妆品连锁店怎么样?
醉吧酒吧地址好找么,我有些事要过去
在n个CO2分子和n个CO分子中含有相同的 A氧原
庄河星秀特色农家地址有知道的么?有点事想过
永鑫汽车美容养护中心地址好找么,我有些事要
类似混沌之戒的仙侠手机单机游戏
仁寿县为什么还没有搞新农村建议,有计划吗,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?