#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //因为要用到左右移函数,所以加入这个头文件 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit beep=P1^5; /****************************************************************************** * 函 数 名:delay(u16 i) * 函数功能:延时函数,i=1时,大约延时10us。 ******************************************************************************/ void delay(u16 i) { while(i--); } /****************************************************************************** * 函 数 名:main() * 函数功能:主函数 * 输 入:无 * 输 出:无 ******************************************************************************/ void main( ) { while(1) { beep=~beep; delay(70); //延时大约700us } while(1) { beep=~beep; delay(50); //延时大约500us } } 六、实验思考题 模拟救护车报警声:低频650-750Hz,持续0.4秒,高频900-1000Hz,持续0.6秒,交替进行。程序应如何修改?
时间: 2023-07-18 12:47:44 浏览: 365
单片机中用c编程时头文件reg51.h及reg52.h解析
根据题目的要求,需要让蜂鸣器发出低频650-750Hz的声音持续0.4秒,然后发出高频900-1000Hz的声音持续0.6秒,交替进行。可以通过修改程序中的延时函数来实现。具体代码如下:
```
#include "reg52.h"
#include <intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit beep=P1^5;
void delay(u16 i) {
while(i--);
}
void main() {
while(1) {
for (u8 i = 0; i < 20; i++) { // 低频声音,共20个周期
beep = ~beep;
delay(11); // 延时大约11.5ms,对应低频650Hz
}
delay(4000); // 延时0.4秒
for (u8 i = 0; i < 30; i++) { // 高频声音,共30个周期
beep = ~beep;
delay(6); // 延时大约6.5ms,对应高频900Hz
}
delay(6000); // 延时0.6秒
}
}
```
需要注意的是,程序中的延时时间是根据频率计算出来的,由于单片机的运行速度受到晶振的影响,所以实际的延时时间可能会有所偏差,需要根据实际情况进行微调。
阅读全文