电路图见截图,右边是两个数码管。
我想实现的功能是按下按钮后上面的数码管显示该按键的行数,下面的显示列数。可是运行结果很奇怪,本人初学51,请大家帮帮忙看看哪里有问题。
附件是电路图的proteus仿真文件。多谢了
代码如下:
#include<reg51.h>
#include<stdio.h>
void delayms(int temp);
int scancode,keycode;
int i,n1,n2;
void keyinterrupt() interrupt 2
{
delayms(10); //延时
if(INT1==1) //消抖
return;
EX1=0; //关闭外部中断1
scancode=0xef;
while(1)
{
P1=scancode;
keycode=P1;
if((keycode&0x0f)!=0x0f)
break;
scancode=(scancode<<1)|0x0f;
}
for(i=0;i++;i<4)
{
if(keycode^i==0)
n1=i+1; //列
}
for(i=4;i++;i<8)
{
if(keycode^i==0)
n2=i-3; //行
}
P2=n1<<4+n2;
EX1=1;
return;
}
void main()
{
IE=0;
EX1=1;
EA=1;
P2=0xff;
P1=0x0f;
while(1);
}
void delayms(int temp)
{
int i,j;
for(i=temp;i>0;i--)
for(j=110;j>0;j--);
}
此帖出自
小平头技术问答
一周热门 更多>