Beep 让蜂鸣器发出滴滴的声音

在linux上,用beep函数不带任何参数可以让蜂鸣器发出滴滴的声音,耳机里没有声音。

在Windows上,用beep函数不带任何参数时,蜂鸣器没有声音,而耳机里有滴滴的声音,不知道两个平台在处理声音的问题上有什么不一样?

 

好的,这是一个基于51单片机的温度报警器的代码,实时显示温度、报警、蜂鸣器和点阵led的功能都已实现: ```C #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit beep = P2^3; // 定义蜂鸣器连接的引脚 sbit DIO=P2^0; // 定义点阵led数据引脚 sbit CLK=P2^1; // 定义点阵led时钟引脚 sbit CS=P2^2; // 定义点阵led片选引脚 unsigned char code table[] = { // 定义点阵led显示图形的数据 0x18,0x18,0x18,0x18,0x18,0x18,0xff,0xff }; void delay_ms(uint x) { // 延时函数 uint i, j; for(i=x; i>0; i--) for(j=112; j>0; j--); } void delay_us(uint x) { // 微秒级延时函数 while(x--); } void write_max7219(uchar address, uchar dat) { // 写数据到点阵led uchar i; CS = 0; for(i=1; i<=1; i++) { CLK = 0; DIO = address&0x80; CLK = 1; address <<= 1; } for(i=1; i<=8; i++) { CLK = 0; DIO = dat&0x80; CLK = 1; dat <<= 1; } CS = 1; } void init_max7219() { // 初始化点阵led write_max7219(0x09, 0x00); write_max7219(0x0a, 0x03); write_max7219(0x0b, 0x07); write_max7219(0x0c, 0x01); write_max7219(0x0f, 0x00); } void display_num(uint num) { // 在数码管上显示温度值 uint i; uchar code digi[] = { // 数码管显示0-9的数据 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f }; for(i=0; i<4; i++) { P0 = digi[num%10]; // 取出个位数字并显示 num /= 10; delay_ms(5); } } void main() { uint temp; float voltage, temperature; TMOD = 0x01; TH0 = 0xfc; TL0 = 0x18; ET0 = 1; EA = 1; TR0 = 1; init_max7219(); // 初始化点阵led while(1) { temp = ADC_Read(0); // 读取温度传感器的值 voltage = temp*5.0/1024.0; // 将传感器的值转换为电压值 temperature = (voltage-0.5)*100; // 将电压值转换为温度值 display_num(temperature); // 在数码管上显示温度值 if(temperature < 15 || temperature > 30) { // 判断是否需要报警 beep = 1; // 打开蜂鸣器 write_max7219(1, 0x01); // 在点阵led上显示一个图形 delay_ms(1000); // 延时1秒 beep = 0; // 关闭蜂鸣器 write_max7219(1, 0x00); // 清除点阵led显示 delay_ms(1000); // 延时1秒 } } } void timer0() interrupt 1 { // 定时器中断服务函数 TH0 = 0xfc; TL0 = 0x18; _crol_(P0, 1); // 数码管扫描 } uint ADC_Read(uchar ch) { // 读取ADC转换结果 ADC_CONTR = 0x80 | ch; // 先选择ADC通道 delay_us(1); // 稍作延时 ADC_CONTR |= 0x40; // 启动ADC转换 while(!(ADC_CONTR & 0x10)); // 等待转换完成 ADC_CONTR &= ~0x10; // 清除转换完成标志 return ADC_RES*256 + ADC_RESL; // 返回ADC转换结果 } ``` 在以上代码中,我们使用了一个LM35温度传感器来检测环境温度,将检测到的温度值转换为电压值,并计算出温度值。然后,我们将温度值显示在一个4位数码管上,同时判断是否需要报警,如果需要报警,则打开蜂鸣器,并在点阵led上显示一个图形,然后等待1秒钟,再次关闭蜂鸣器并清除点阵led显示。 这个代码可以通过Keil C51编译器编译并烧录到51单片机上运行,让我们尝试一下吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值