4*4矩阵键盘的扩展程序,P0口,线反转法,可是运行程序时,按下一个键时,数码管有乱显示,不知道为何

#include"at89x52.h"unsignedcharsection_choose[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82... #include"at89x52.h"
unsigned char section_choose[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
unsigned char temp;
unsigned char i=0;
void delay(unsigned int m)
{
unsigned base=0XFF;
for(;m;m--)
for(base=0XFF;base;base--);
}

void display()
{
P1=section_choose[i];
P2=0X7F;
delay(1);
}

unsigned char scan()
{
P0=0XF0;
delay(5);
temp=P0^0xF0;
switch(temp)
{
case 0X10:i=0;break;
case 0X20:i=1;break;
case 0X40:i=2;break;
case 0X80:i=3;break;
}
P0=0X0F;
delay(5);
temp=P0^0X0F;
switch(temp)
{
case 1:i=i; break;
case 2:i=i+4; break;
case 4:i=i+8; break;
case 8:i=i+12;break;
}
return i;

}

void keydown()
{
P0=0X0F;
delay(10);
if(P0!=0X0F)
{
delay(8);
scan();
}
}

main()
{
while(1)
{
P0=0XFF;
keydown();
display();
}
}
没有按键按下时数码管的显示也在变化,不知道为何,而且,当按下一个键时,会显示与之同列的相应的数字,不知道错在哪儿,纠结,麻烦高手帮忙改改,谢啦
展开
 我来答
百度网友6cffdb7
2010-08-15
知道答主
回答量:86
采纳率:0%
帮助的人:22.6万
展开全部
虽然有点看不太懂,但是可以给点建议,1.没有按键按下时数码管的显示也在变化,可能是你没有初始化,就是把显示的内容在while函数前先显示下。2.当按下一个键时,会显示与之同列的相应的数字,是不是和硬件电路有关系。纯属个人认为。祝你好运!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c730f2621
2010-08-15 · TA获得超过220个赞
知道答主
回答量:96
采纳率:0%
帮助的人:85.4万
展开全部
把i设置为unsigned char scan()函数的局部变量。然后将keydown()函数的返回值放到一个变量如keyvalue中,最后修改一下display()函数为
display(unsigned char i);。试试看
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式