|
各位大神:我用30個(gè)按鍵來(lái)控制5個(gè)電平輸出,每個(gè)按鍵對(duì)應(yīng)一個(gè)電平,1號(hào)鍵對(duì)應(yīng)0xfe,2號(hào)鍵對(duì)應(yīng)0xfd,以此類推,按鍵按下后恢復(fù)按鍵延時(shí)10ms輸出全部為高電平,現(xiàn)在出現(xiàn)第一次按鍵總是輸0xfe,按其他按鍵總是會(huì)把前面按過(guò)按鍵的信息帶上,要第二次才輸出正確。請(qǐng)哪位大神幫我看看程序如下
單片機(jī)源程序:
#include <reg52.h>
#define uchar unsigned char
uchar code tab[]={0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,0xef,
0xee,0xed,0xec,0xeb,0xea,0xfe9,0xe8,0xe7,
0xe6,0xe5,0xe4,0xeb3,0xe2,0xe1,0xeff};//輸出二進(jìn)制庫(kù)
//輸出為11110 11101 到00001
uchar temp,num,n1;
void display();
keyscan();
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
keyscan() //矩陣鍵盤掃描程序
{
P1=0xfe;
if(P2!=0xff)
{
delay(10);
if(P2!=0xff)
{
temp=P2;
switch(temp)
{
case 0x7f : num=31;break;
case 0xbf : num=30;break;
case 0xdf : num=29;break;
case 0xef : num=28;break;
case 0xf7 : num=27;break;
case 0xfb : num=26;break;
case 0xfd : num=25;break;
case 0xfe : num=24;break;
}
while(temp!=0xff)
{
temp=P2;
display();
}
}
}
delay(10);
P1=0xfd;
if(P2!=0xff)
{
delay(10);
if(P2!=0xff)
{
temp=P2;
switch(temp)
{
case 0x7f : num=23;break;
case 0xbf : num=22;break;
case 0xdf : num=21;break;
case 0xef : num=20;break;
case 0xf7 : num=19;break;
case 0xfb : num=18;break;
case 0xfd : num=17;break;
case 0xfe : num=16;break;
}
while(temp!=0xff)
{
temp=P2;
display();
}
}
}
delay(10);
P1=0xfb;
if(P2!=0xff)
{
delay(10);
if(P2!=0xff)
{
temp=P2;
switch(temp)
{
case 0x7f : num=15;break;
case 0xbf : num=14;break;
case 0xdf : num=13;break;
case 0xef : num=12;break;
case 0xf7 : num=11;break;
case 0xfb : num=10;break;
case 0xfd : num=9;break;
case 0xfe : num=8;break;
}
while(temp!=0xff)
{
temp=P2;
display();
}
}
}
delay(10);
P1=0xf7;
if(P2!=0xff)
{
delay(10);
if(P2!=0xff)
{
temp=P2;
switch(temp)
{
case 0x7f : num=7;break;
case 0xbf : num=6;break;
case 0xdf : num=5;break;
case 0xef : num=4;break;
case 0xf7 : num=3;break;
case 0xfb : num=2;break;
case 0xfd : num=1;break;
case 0xfe : num=0;break;
}
while(temp!=0xff)
{
temp=P2;
display();
}
}
}
delay(10);
return num;
}
void display()
{
{
P0=tab[n1];
}
}
void main()
{
while(1)
{
n1=num;
P0=0xff;//使輸出全部為高電平
keyscan();
}
}
test.rar
(77.03 KB, 下載次數(shù): 7)
2019-3-13 16:12 上傳
點(diǎn)擊文件名下載附件
|
|