51单片机实现蜂鸣器警车、救护车、消防车声.doc
《51单片机实现蜂鸣器警车、救护车、消防车声.doc》由会员分享,可在线阅读,更多相关《51单片机实现蜂鸣器警车、救护车、消防车声.doc(12页珍藏版)》请在冰点文库上搜索。
![51单片机实现蜂鸣器警车、救护车、消防车声.doc](https://file1.bingdoc.com/fileroot1/2023-5/11/484a14b0-48f3-442c-8361-a698088debd3/484a14b0-48f3-442c-8361-a698088debd31.gif)
1.
/*-----------------------------------------------
名称:
喇叭
论坛:
编写:
shifang
日期:
2009.5
修改:
无
内容:
模拟警车发声
------------------------------------------------*/
#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbitSPK=P1^2;//定义喇叭端口
unsignedcharfrq;
voidDelayUs2x(unsignedchart);//函数声明
voidDelayMs(unsignedchart);
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
voidInit_Timer0(void)
{
TMOD|=0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;//定时器开关打开
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
Init_Timer0();//初始化定时器
while
(1)
{
DelayMs
(1);//延时1ms,累加频率值
frq++;
}
}
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
voidTimer0_isr(void)interrupt1
{
TH0=0xfe; //重新赋值
TL0=frq;//低8位值在主程序中不断累加
SPK=!
SPK;//端口电平取反
}
二
/*-----------------------------------------------
名称:
喇叭
论坛:
编写:
shifang
日期:
2009.5
修改:
无
内容:
模救护车发声
------------------------------------------------*/
#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbitSPK=P1^2;//定义喇叭端口
unsignedcharfrq;
voidDelayUs2x(unsignedchart);//函数声明
voidDelayMs(unsignedchart);
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
voidInit_Timer0(void)
{
TMOD|=0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;//定时器开关打开
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsignedchari;
Init_Timer0();//初始化定时器
while
(1)
{
frq=0;
for(i=0;i<60;i++)//播放1s左右一种频率
{
DelayMs(10);
}
frq=100;
for(i=0;i<60;i++)//播放1s左右另外一种频率
{
DelayMs(10);
}
}
}
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
voidTimer0_isr(void)interrupt1
{
TH0=0xfe; //重新赋值
TL0=frq;//低8位值在主程序中不断累加
SPK=!
SPK;//端口电平取反
}
三
/*-----------------------------------------------
名称:
喇叭
论坛:
编写:
shifang
日期:
2009.5
修改:
无
内容:
模拟消防车发声
------------------------------------------------*/
#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbitSPK=P1^2;//定义喇叭端口
unsignedcharfrq;
voidDelayUs2x(unsignedchart);//函数声明
voidDelayMs(unsignedchart);
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
voidInit_Timer0(void)
{
TMOD|=0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;//定时器开关打开
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsignedchari;
Init_Timer0();//初始化定时器
while
(1)
{
for(i=0;i<200;i++)
{
DelayMs(10);//延时10ms,累加频率值
frq=i;
}
for(i=200;i>0;i--)
{
DelayMs(10);//延时10ms,累减频率值
frq=i;
}
}
}
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
voidTimer0_isr(void)interrupt1
{
TH0=0xfe; //重新赋值
TL0=frq;//低8位值在主程序中不断累加
SPK=!
SPK;//端口电平取反
}