实验思路:
重定义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); } }