实验思路:
重定义P0.0管脚为BEEP
定义一个延时函数delay_1ms,用于控制发声时间
定义一个延时函数delay_250us,用于设置脉冲频率
定义一个子函数BEEP_2K5,用于产生2.5KHz频率的脉冲信号
完整代码:
/*****************************程序信息*********************************
* 实验名称:控制蜂鸣器发出嘀嘀声
* 文件名称:main.c
* 版 本:V1.00
* 日 期:2021-12-11
* 编 著:gefon
* 说 明:使用普中A7开发版,控制蜂鸣器发出连续嘀嘀声
*******************************声明区*********************************/
#include "reg52.h"
typedef unsigned char U8; //重定义系统数据类型
typedef unsigned int U16;
sbit BEEP=P0^0; //对P0.0管脚重定义
/*******************************子程序*********************************
* 函 数 名 :delay_1ms
* 函数功能 :延时函数,延时约1ms。用于控制嘀嘀发声的时间
* 输 入 :ten_us
* 输 出 :无
***********************************************************************/
void delay_1ms(U16 ten_us)
{
U8 i;
while(ten_us--)
{
for(i=0;i<100;i++); //运算一次约延时10us;
}
}
/*******************************子程序*********************************
* 函 数 名 :delay_250us
* 函数功能 :延时函数,延时约250us。用于设置脉冲频率
* 输 入 :无
* 输 出 :无
***********************************************************************/
void delay_250us()
{
U8 x;
for(x=0;x<25;x++);
}
/*******************************子程序*********************************
* 函 数 名 :BEEP_2K5
* 函数功能 :脉冲函数,产生2.5KHz频率声音
* 输 入 :无
* 输 出 :无
***********************************************************************/
void BEEP_2K5()
{
BEEP=0;
delay_250us();
BEEP=1;
delay_250us();
}
/*******************************主程序*********************************
* 函 数 名 :main
* 函数功能 :主函数
* 输 入 :无
* 输 出 :无
***********************************************************************/
void main()
{
U16 y;
while(1)
{
for(y=0;y<1000;y++)
{
BEEP_2K5();
}
BEEP=0;
delay_1ms(1000);
}
}
65%