我拼起来的一个程序,流水灯中断执行蜂鸣器但是实现不了我要的效果
#include <reg52.h>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
#define LED P2
void delay(u16 c)
{
while (c--);
}
void int0() interrupt 0
{
u8 h;
for (h=0;h<200;h++)
{
beep=~beep;
delay (10);
}
}
void intint0 ()
{
IT0=1;
EA=1;
EX0=1;
}
void liusuiden ()
{
u8 i=0;
LED=0xfe;
delay(5000);
while(1)
{
for(i=0;i<7;i++)
{
LED=_crol_(LED,1);
delay(50000);
}
intint0 ();
for(i=0;i<7;i++)
{
LED=_cror_(LED,1);
delay(50000);
}
}
}
void main()
{
liusuiden ();
}
外部中断不是这么用的,需要外部触发信号,已舍弃中断。
#include <reg52.h>
#include <intrins.h>
#define LED P2
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
void delay(u16 c)
{
while (c--);
}
void main()
{
u16 i;
LED=0xfe;
delay(5000);
while(1)
{
for(i=0;i<7;i++)
{
LED=_crol_(LED,1);
delay(50000);
}
for (i=0;i<400;i++)
{
beep=~beep;
delay (20);
}
for(i=0;i<7;i++)
{
LED=_cror_(LED,1);
delay(50000);
}
for (i=0;i<400;i++)
{
beep=~beep;
delay (20);
}
}
}
顶楼上
恩,谢了
恩,谢了
其实很简单,主函数里做你的流水循环,配置一个标志位Flag,一次流水结束了配置Flag为1;
主函数中加一个函数。检测Flag的标志位,为1了就拉响一段时间的蜂鸣器,然后清除Flag。
上面这种方法就是效果可以实现,但是效率会比较低一些。高效的方法就要去掉delay,合理分配任务了,就不细说了~
我其实是想玩一下中断,不过也谢谢你给我其他的思路