关于51单片机C语言电平触发,跪求答案

2019-07-16 02:30发布

程序很简单就是P0口控制数码管从0到F,加了一个中断控制LED灯,这是一个电平触发
我想问的是当我用指拨开关使P3.2置低电平,那么这个程序应该只在中断程序运行数码管应该不会在改变,可实际上数码管却在缓慢从0到F变化,这是问什么???


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={//0到F的列表
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,
};
sbit d1=P2^0;// 控制LED
void delay(uint);
uchar num;
void main()
{  EA=1;// 中断总开关
   EX0=1;//开启外部中断0
   IT0=0;//外部中断0 电平触发
   while(1)
   {  
       for(num=0;num<16;num++)
       { P1=table[num];
           delay(1000);//一秒的延时
            d1=1;
           }
   }
}
void delay(uint z)//延时程序
{  uint x,y;
   for(x=z;x>0;x--)
     for(y=123;y>0;y--);
}
void it0() interrupt 0//中断程序
{ d1=0;
}




]0HVLBAD`}(6{9DCV5N3A83.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
hughqfb
1楼-- · 2019-07-16 04:05
首先你的LED是P1^0,不是P2^0!
程序是先从主函数开始执行的,所以一直在执行while(1)这个死循环。
就算你后来在下拨码开关也没用的。
hughqfb
2楼-- · 2019-07-16 04:05
程序中擅用死循环!一般要要加上条件。
songyangdllg
3楼-- · 2019-07-16 09:40
当程序进入中断后,执行完毕中断服务程序后,又从中断返回,继续执行数码管显示的功能,如果你一直按着按钮,就会频繁进入中断,数码管显示的速率会变慢,但是还会执行!
Saturday_。
4楼-- · 2019-07-16 11:32
 精彩回答 2  元偷偷看……
Saturday_。
5楼-- · 2019-07-16 14:09
Saturday_。 发表于 2013-2-8 10:51
也就说这个程序没有一直在中断,是在中断一直进进出出是吗???
这个是不是和中断在第几个机器周期扫描 ...

void exter0()interrupt 0
{  d1=1;
delay(10);
}
这是加了一个延时的中断程序。。。
Saturday_。
6楼-- · 2019-07-16 18:58
hughqfb 发表于 2013-2-8 10:15
程序中擅用死循环!一般要要加上条件。

恩恩,因为我是初学者,想进一步理解单片机,谢谢啦。。。

一周热门 更多>