请问个关于C51上矩阵键盘的问题

leetow2006 2020-04-10 07:47:40
我看书上写矩阵键盘的代码时都是用扫描的方法,
然后根据获取的数据进行判断。我有个疑问:
为什么不可以直接通过读矩阵键盘的输出数据
进行判断?因为当按下某个矩阵键盘上的键,
那么对应的行、列都为低电平,可是不知道
为什么代码运行时检测不出来。请问为什么?
能说说理由吗?
请看我的代码(但是运行不能成功,不知道是为什么):
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void main()
{
while(1)
{
switch(P3) //P3口接在矩阵键盘上
{
case 0x7e:P0=table[0];break;
case 0xbe:P0=table[1];break;
case 0xde:P0=table[2];break;
case 0xee:P0=table[3];break;
case 0x7d:P0=table[4];break;
case 0xbd:P0=table[5];break;
case 0xdd:P0=table[6];break;
case 0xed:P0=table[7];break;
case 0x7b:P0=table[8];break;
case 0xbb:P0=table[9];break;
case 0xdb:P0=table[10];break;
case 0xeb:P0=table[11];break;
case 0x77:P0=table[12];break;
case 0xb7:P0=table[13];break;
case 0xd7:P0=table[15];break;
case 0xe7:P0=table[15];break;
default:P0=table[15];break;
}
}
}
...全文
446 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
这个妹子很酷 2020-04-13
  • 打赏
  • 举报
回复
我是来看热闹的,哈哈
luj_1768 2020-04-13
  • 打赏
  • 举报
回复
键盘有机械的和电容的,哪种更好一些?
  • 打赏
  • 举报
回复
我是来看热闹的,哈哈
leetow2006 2020-04-12
  • 打赏
  • 举报
回复
非常感谢各位
AI666_ 2020-04-12
  • 打赏
  • 举报
回复
试一下这个:
skdnjfhksndnsd
sjgduhwidbwijjd
ndjbfhdifnmidkh
kdiwomshdhkfn
ldkndomrnnsofj
ldkenifnkjfnslfjk
skeindkqpdmkwj
dmwldowjdkwd
  • 打赏
  • 举报
回复
就这种对蛋骗鸡和电脑不明就里的思想不足为奇,实话我当初就有这样念头,后来多看一些关于计算机组成,电子电路,数字电路,就渐渐明白其中道理,像蛋骗鸡和电脑这种有逻辑的电子电路,需要写程序去驱动它才能工作,按程序逻辑驱动其工作。
  • 打赏
  • 举报
回复
假设已有一块蛋骗鸡芯片在手不给任何程序通电看哪个IO口电平会变动一下,假设已有电脑连主板驱动程序都不给装系统程序也不给装通电看能玩出花?
liys2010 2020-04-12
  • 打赏
  • 举报
回复
学习了,都是大佬
  • 打赏
  • 举报
回复
硬件电路是死物,它知道你按下就给个低电平啊!如果它能知道还要程序猿干嘛?
还是去补习硬件知识。
leetow2006 2020-04-11
  • 打赏
  • 举报
回复
引用 10 楼 智者知已应修善业 的回复:
意思是高电平连接高电平=低电平?有这样的道理?该去补习电路知识。

不是说高电平连接高电平=低电平,而是说当按下键时,该键对应的行、列自动拉低到低电平
  • 打赏
  • 举报
回复
64键盘用16个IO道理也是一样的,8个IO高8个IO低,纵横交错按键按下读取IO的值作为判断使用。
  • 打赏
  • 举报
回复
为何要给8个IO赋值就是让4个IO高电平4个IO低电平,当按下按钮时被拉到低电平,这样2次转换就能判断是哪个按键按下。
  • 打赏
  • 举报
回复
意思是高电平连接高电平=低电平?有这样的道理?该去补习电路知识。
leetow2006 2020-04-11
  • 打赏
  • 举报
回复
当按下时,被按的键的行、列不就变成低电平了吗?
worldy 2020-04-11
  • 打赏
  • 举报
回复
比如 1、2、3、4 是行线 A\B\C\D是列线 1、2、3、4分别输出0,你现在1A的按键按下,则读入了1110 1110 你可以判断1A有按键,其他都是1111 1111,你可以判断出1A按键 如果你同时输输出0,则每次都读入0000 1110 那你如何判断是1A,还是2A还是3A还是4A?
leetow2006 2020-04-11
  • 打赏
  • 举报
回复
引用 15 楼 worldy 的回复:
你的键盘如果是行列模式,行线不能同时输出低电平,必须分时输出、输入
如果你每个按键对应一个IO线,你确实可以一次性读入,无需扫描(这种情况,也没有什么可以扫描)

行列线不能同时输出低电平,请问这是为什么?按下的时候,对应键的行列不是就是低电平了吗?
worldy 2020-04-11
  • 打赏
  • 举报
回复
你的键盘如果是行列模式,行线不能同时输出低电平,必须分时输出、输入 如果你每个按键对应一个IO线,你确实可以一次性读入,无需扫描(这种情况,也没有什么可以扫描)
  • 打赏
  • 举报
回复
矩阵键盘扫描其实很简单就是分别使行列的IO口赋值高电平后判断低电平去确认哪个按钮按下而已.如果不进行赋值,那么IO口的电平就是随机的,因此无法确认按键是哪个.
  • 打赏
  • 举报
回复
8个IO口都是高电平?那么,按下按钮哪来的低电平?
  • 打赏
  • 举报
回复
我说错了,是8个io口。
加载更多回复(5)

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧