|
谢谢LS各位的回答
我现在的程序时这样的(这是一个4乘3的按键程序,我用的是伟福仿真器【89S51】,P1.0--P1.6作为输入口,P1.7接一个LED,想实现的功能就是:通过我做的键盘,当我按下相应的键时,能在我的仿真软件【KeilC】中显示出相应的数字,并且当我按下数字的时候,LED是亮的。但是一直得不到我想要的结果,不知道为什么。。。请问你能帮下忙吗?我现在都快急死了。。。)
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar num,temp,flag;
sbit P1_7=P1^7;
sbit P1_4=P1^4;
sbit P3_2=P3^2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Int0() interrupt 0
{
if(flag)
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xbe:num=1;
break;
case 0xde:num=2;
break;
case 0xee:num=3;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xbd:num=4;
break;
case 0xdd:num=5;
break;
case 0xed:num=6;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xbb:num=7;
break;
case 0xdb:num=8;
break;
case 0xeb:num=9;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xd7:num=0;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
flag=0; }
EX0=1;}
}
main()
{
flag=1;
EA=1; /*CPU开中断*/
IT0=1; /*脉冲触发方式(负跳变有效)*/
EX0=1; /*允许外部中断0中断*/
delay(100);
printf("%d",num);
while(1);
} |
|