关于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条回答
sxp雨落2
1楼-- · 2019-07-17 13:05
如果一直按着开关,可能数字就不会变化,只按一下的话,就会在执行完中断程序后再去执行主函数
Saturday_。
2楼-- · 2019-07-17 18:20
 精彩回答 2  元偷偷看……
星星ARM
3楼-- · 2019-07-17 20:57
本帖最后由 星星ARM 于 2013-2-17 12:21 编辑

我特意在发烧友论坛下载一个Proteus为你做了数码管的中断工程,相信你这次能看懂。有程序(keil编译的)和Proteus编写的数码管工程,我相信这次你肯定能看懂了。

http://bbs.elecfans.com/jishu_311315_1_1.html这个帖子是我针对你的问题专门写了一个帖子真心你好心的看看,我相信这次你肯定能看懂。。哦,补充一点就是你不是用的直拨开关接地么,我的那个按键一直鼠标按着跟你呢个直拨开关接地是一样的。
Saturday_。
4楼-- · 2019-07-18 02:56
在你把开关置于低电平的时候,响应中断,点亮LED等,执行完中断服务程序后,系统返回while循环,执行响应中断前的任务,因为是电平触发,又一次进入中断、中断服务程序、返回,重复这个顺序。这种中断叫做咬尾中断,中断来临压栈、中断服务程序执行完出栈返回主循环,连续两个中断处理之间有时间间隔,这个间隔时间主程序在运行,因为主程序每次只执行很短的时间,所以你看到的现象就是缓慢变化。、

这是我觉得比较满意的答案。。。
1玍去守护你
5楼-- · 2019-07-18 06:59
有这样的资料学习起来太方便了

一周热门 更多>