各位大神们想请教一下51单片机矩阵键盘的问题

[复制链接]
查看11 | 回复3 | 2021-1-27 06:46:24 | 显示全部楼层 |阅读模式
我才开始学51单片机,在写矩阵键盘在数码管上由0-15显示的程序时,是将矩阵键盘每次按下的值预先保存在一个数组里,在用循环语句的,也不知道可不可以这样写。最后显示的值一直是0,按了键盘没有反应,不知道程序哪里错了
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitwela=P2^7;
sbitdula=P2^6;
uinti,temp,num;
uchara[]={
0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};//对每一个矩阵键盘编码
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//对数码管0-15编码
voiddisplay();
voiddelay(uintn);
voidmain()
{
while(1){
temp=P3;
for(i=0;i0)
for(j=110;j--;j>0);//延时
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:46:24 | 显示全部楼层
你的display()函数有问题,前三行代码刚把数码管点亮,后三行代码就把数码管熄灭了,这样人眼是啥变化都看不出来的!
回复

使用道具 举报

千问 | 2021-1-27 06:46:24 | 显示全部楼层
引用1楼family5love的回复:你的display()函数有问题,前三行代码刚把数码管点亮,后三行代码就把数码管熄灭了,这样人眼是啥变化都看不出来的!
另外,变量dela和wela,也就是说P2.6和P2.7管脚控制的是数码管的公共端吗?如果是公共端你这也有问题!
回复

使用道具 举报

千问 | 2021-1-27 06:46:24 | 显示全部楼层
我刚把你的程序拿到Proteus上模拟运行了下,用的是郭天祥的51开发版的仿真电路,可以正常显示啊。不知道楼主的硬件电路是怎么样的,如果也是用的郭天祥的开发版的话,要想获取键盘输入,需要按下两个键,其中一个相当于软件中的扫描功能,就是将某条电路拉低(或高,跟具体设计有关)。
然后,补充点,楼主的键盘消抖程序有瑕疵,并没有真正意义上的消抖,应该在第二个temp==a前,重新读取P3的值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行