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();
}
}
没有按键按下时数码管的显示也在变化,不知道为何,而且,当按下一个键时,会显示与之同列的相应的数字,不知道错在哪儿,纠结,麻烦高手帮忙改改,谢啦 展开
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();
}
}
没有按键按下时数码管的显示也在变化,不知道为何,而且,当按下一个键时,会显示与之同列的相应的数字,不知道错在哪儿,纠结,麻烦高手帮忙改改,谢啦 展开
2个回答
展开全部
虽然有点看不太懂,但是可以给点建议,1.没有按键按下时数码管的显示也在变化,可能是你没有初始化,就是把显示的内容在while函数前先显示下。2.当按下一个键时,会显示与之同列的相应的数字,是不是和硬件电路有关系。纯属个人认为。祝你好运!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询