实验14
小喇叭警报器实验
声音是由震动所产生的,
一定频率的震动就产生了一定频率的声音。这个实验是喇叭里发出滴答一长一短的报警声音,送出的端口是p3.3输出1khz,2khz变频信号报警,每一秒交换一次。
相关原理:

程序运行照片:
接线方法:
用一根1PIN数据线一端插入CPU部份JP53(P3口)的P3.3另外一端插入小喇叭部份的输入端JP16。
程序流程图:

汇编语言参考程序:
ORG 0080h
dlv: mov r2,#08h ;1kz持续时间
dlv1: mov r3,#0fah
dlv2: cpl p3.3 ;输出1khz方波
lcall d5ms ;调用延时程序1
djnz r3,dlv2 ;持续1秒
djnz r2,dlv1
mov r2,#10h ;2khz持续时间
dlv3: mov r3,#0fah
dlv4: cpl p3.3 ;输出2khz方波
lcall d25ms ;调用延时程序2
djnz r3,dlv4
djnz r2,dlv3
sjmp dlv ;反复循环
d5ms: mov r7,#0ffh ;延时子程序1
loop: nop
nop
djnz r7,loop
ret
d25ms: mov r6,#0ffh ;延时子程序2
lin:djnz r6,lin
ret
end
c语言参考程序:
#include<reg51.h>
//头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
sbit BUZZER=P3^3; //定义P3.3为喇叭驱动端
void delay_500us(void)
//500us延迟函数,用于产生1KHZ信号
{
unsigned char a,b;
for(b=71;b>0;b--)
for(a=2;a>0;a--);
}
void delay_250us(void)
//250us延迟函数,用于产生2KHZ信号
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=5;a>0;a--);
}
char code SST516[3] _at_ 0x003b;
//仿真器插入代码
main() //主函数
{
uint i=0; //定义一变量,用于控制喇叭响的时间
while(1)
{
while(i<=2000) //1KHZ响1S
{
delay_500us(); //延迟500us
BUZZER=~BUZZER; //喇叭驱动位取反
i++; //取反次数加1
}
i=0; //清时间控制变量
while(i<=4000) //2KHZ响1S
{
delay_250us(); //延迟250US
BUZZER=~BUZZER; //喇叭驱动位取反
i++; //取反次数加1
}
i=0; //清时间控制变量
}
} |