请问C51中关于4X4矩阵键盘的问题

leetow2006 2019-12-05 03:56:15
我把P0口接在矩阵键盘上的,当我按下矩阵键盘中的某个按钮时,我去检测
发现都是0xff,我感到很奇怪。矩阵键盘中的任一一个按钮的两端都与P0口
中的某两条线相连,当按下时,这两条线就会变成低电平,可是我去检测时
怎么会没有变化呢?
while(1)
{
if(P0 != 0xff)
{
//显示1;
}
else
{
//显示2;
}
}

这个例子中都是显示2,请问这是为什么?
...全文
159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leetow2006 2019-12-07
  • 打赏
  • 举报
回复
非常谢谢!!!
worldy 2019-12-06
  • 打赏
  • 举报
回复
引用 3 楼 leetow2006 的回复:
[quote=引用 2 楼 worldy 的回复:]
扫描必须将其中一位置0,否则必然都读回1

==================
能说说原因吗[/quote]

引用 3 楼 leetow2006 的回复:
[quote=引用 2 楼 worldy 的回复:]
扫描必须将其中一位置0,否则必然都读回1

==================
能说说原因吗[/quote]

给你说说扫描原理吧:
P0~3接行线、P4~7接列线。口设置为弱上拉
行线循环置0,即 1110、1101、1011、0111等4个节拍
如果没有按键按下,读P0口则会读到 1111_1110或1111_1101或1111_1011或1111_0111
如果某个按键按下,则对应的列线会被置0,比如第0行第0列按键按下则,4个节拍读回是1110_1110\1111_1101(不变)\1111_1011(不变)、、1111_0111(不变),因此你可以判断出第0行0列的按键按下,同理,你通过判断0出现的位置就可以知道哪个按键有动作,这就是扫描键盘的工作原理
koukou_1538725213 2019-12-06
  • 打赏
  • 举报
回复
p0是不是初始化不对,可以做内部上拉内部下拉试试,配置要配置成模拟输入
leetow2006 2019-12-06
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
扫描必须将其中一位置0,否则必然都读回1

==================
能说说原因吗
worldy 2019-12-05
  • 打赏
  • 举报
回复
扫描必须将其中一位置0,否则必然都读回1
  • 打赏
  • 举报
回复
p0口需要上拉电阻,通常不接在p0口。

27,382

社区成员

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

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