1、警灯警笛功能
蜂鸣器会根据输入的脉冲发声,脉冲频率不一样发出的声音也不一样。Proteus中提供有3种声音部件:BUZZER、SPEAKER、SOUNDER。输入的脉冲频率用延时函数实现。
2、设计方案
通过独立按键启动警灯警笛,控制报警灯旋转(旋转灯用8个LED灯实现如下图所示,旋转时低3位亮,然后每次左移一位形成旋转显示),并让蜂鸣器发出警报声(即通过定时产生两种不同频率的输入脉冲给蜂鸣器)。
3、PROTEUS中设计的电路图
4、源代码
#include <reg51.h>
#define u16 unsigned int
#define u8 unsigned char
sbit SPK=P2^3; //喇叭引脚
sbit p=P2^4;
u8 frq; //频率
void delay(u16 k) //延时函数
{ u16 a,b;
for(a=0;a<k;a++)
for(b=0;b<114;b++);
}
void main()
{
u16 i;
u8 data1[16]=
{0x1f,0xff,0x8f,0xff,
0xc7,0xff,0xe3,0xff,
0xf1,0xff,0xf8,0xff,
0x7c,0xff,0x3e,0xff
};
P1=0x00;
p=0;
TMOD=0x01;//M1M0=01,16位
TH0=0xfe; //前8位
TL0=0x00; //后8位
EA=1; //总开关
IT0 = 1; //下降沿除法
EX0 = 1;
ET0=1;
TR0=0;
while(1)
{
if(p==1)
{
for(i=0;i<16;i++)
{
P1=~data1[i];
delay(10);
frq++;
}
}
}
}
void timer0() interrupt 1
{
TH0=0xfe;
TL0=frq;
SPK=~SPK;
}
void intr0() interrupt 0
{
p=~p;
TR0=~TR0;
}
5、实验效果
效果视频展示