单片机:外部中断0,小弟做得,就是没反应,大家帮帮忙!

外部中断0电平方式进行数据采集,将外部中断0的次数读入单片机并从P0输出显示,

#include "reg51.h"
unsigned char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char num;
sbit k=P3^2;
void Int0() interrupt 0
{
P0=duan[num];
}
void main()
{ EA=1;
EX0=1;
while(1)
{
P0=0xc0;
do
{
num++;
}
while (!k);
do
{
num=0;
}
while (num==9) ;
}
}

第1个回答  2012-01-06
程序有问题
do
{
num++;
}
while (!k);
do
{
num=0;
}
while (num==9) ;

改为:
if(k == 0)
num++;
if(num == 9)
num=0;

------------------------------------
严格来说还有个问题,按键的消抖的问题
------------------------------------
楼上说的很对,按键的查询方式和中断方式只能选一种
要就不要开中断,要就吧num++放到中断里面
第2个回答  2012-01-06
#include "reg51.h"
#include "intrins.h"
unsigned char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char num;
sbit k=P3^2;
void Int0() interrupt 0
{
P0=duan[num];
}
void main()
{ EA=1;
EX0=1;
IT0=1; //设置INT0中断类型
while(1)
{
INT0=1; 准备读INTO口
P0=0xc0;
do
{
_nop_();
_nop_();
num++;
}
while (!k);
do
{
num=0;
}
while (num==9) ;
}
}本回答被网友采纳
第3个回答  2012-01-06
P0口加上拉电阻再试试,另外那个加1需要放在中断里面。
第4个回答  2012-01-06
程序有问题
void Int0() interrupt 0
{
num = (num + 1) % 10;
P0=duan[num];
}
void main()
{
EA=1;
EX0=1;
P0=0xc0;
while(1){
}
}
第5个回答  2012-01-06
加1需要放在中断里面
相似回答