18:蜂鸣器

蜂鸣器

  • 1、蜂鸣器的介绍
  • 2、编程让蜂鸣器响起来
  • 3、通过定时控制蜂鸣器
  • 4、蜂鸣器发出滴滴声(间歇性鸣叫)

1、蜂鸣器的介绍

蜂鸣器内部其实是2个金属片,当一个金属片接正电,一个金属片接负电时,2个金属片将合拢,在合拢的一瞬间发生碰撞,如何发出声音。

分类:分为有源蜂鸣器和无源蜂鸣器。
无源蜂鸣器的发声原理:
(1)快速的给2个金属片进行充电和断电进行发出声音,所以通过脉冲波形来控制。
(2)音调的控制:音调如何控制,音调受震动频率控制,就等于控制信号的频率。频率越高音调越高,听起越刺耳。
(3)声音大小如何控制:由硬件决定的,没法写代码去控制声音大小。
缺点:要自己调节合适频率(太高超声波,太低次声波),不然蜂鸣器不会响。

有源蜂鸣器:
(1)内置震荡电路后形成有源蜂鸣器,直接加电就会响(但是频率规定了的)。
(2)有源蜂鸣器也可以用频率信号驱动。

2、编程让蜂鸣器响起来

在这里插入图片描述
P0.0接上J8

设置频率为1000Hz,则周期为1/1000=1ms,则我们设置延迟为0.5ms(500us)即可。

#include <REGX51.H>sbit FMQ = P1^0;void delay500us(void)   //延迟为0.5ms
{unsigned char a,b;for(b=99;b>0;b--)for(a=1;a>0;a--);
}void main(void)
{ while(1){FMQ = 1;delay500us();FMQ = 0;delay500us();}
}

3、通过定时控制蜂鸣器

设置一个频率为5000Hz的蜂鸣器用定时器来控制,其主任务静态数码0到F循环显示。
5000Hz–>1/5000Hz=0.2ms=200us(周期),则定时设置为100us即可
外部晶振为12MHz通过12分频–>1MHz–>1/1MHz=1us–>100个脉冲信号

#include <REGX51.H>
#define SMG P0
sbit FMQ = P1^0;/****定时到时执行的中断程序****/
void DingShi() interrupt 1
{/*每一次定时到后都要重置脉冲个数,以便进行第二次定时*/TL0 = 0X9C;             //低8位为1001 1100TH0 = 0XFF;             //高8位为1111 1111FMQ = !FMQ;
}void delay(void)//延迟函数
{unsigned char a,b;for(a=200 ;a>0 ;a--)for(b=200 ;b>0 ;b--);
}void main(void)
{unsigned char i;TMOD = 0X01;            //0000 0001 使用的是T0定时器,工作模式是16位定时器/****设置脉冲个数位100个,既为0.1ms,则65536-100=65436***/TL0 = 0X9C;             //低8位为1001 1100TH0 = 0XFF;             //高8位为1111 1111TR0 = 1;                //计数器,开始计数ET0 = 1;			    //开启T0中断EA = 1;                 //开启中断总开关while(1)//执行主任务{unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0,0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//0到F的数码表	for(i=0 ;i<=15 ;i++){SMG = val[i];delay();}}
}

4、蜂鸣器发出滴滴声(间歇性鸣叫)

让蜂鸣器响半秒,停半秒这样的不断循环。由上面可得周期为200us,定时设置为100us。
则半秒0.5s/100us=5000。我们定义2个标准变量count和flag。

在这里插入图片描述

#include <REGX51.H>
#define SMG P0
sbit FMQ = P1^0;unsigned int count;
unsigned char flag = 0;/****定时到时执行的中断程序****/
void DingShi() interrupt 1
{/*每一次定时到后都要重置脉冲个数,以便进行第二次定时*/TL0 = 0X9C;             //低8位为1001 1100TH0 = 0XFF;             //高8位为1111 1111if(flag == 0)           //蜂鸣器响{  count--;if(count == 0){flag = 1;}else  {				FMQ = !FMQ;}}else                    //蜂鸣器不响            {  count++;if(count == 5000){flag = 0;}		}}void delay(void)//延迟函数
{unsigned char a,b;for(a=200 ;a>0 ;a--)for(b=200 ;b>0 ;b--);
}void main(void)
{unsigned char i;TMOD = 0X01;            //0000 0001 使用的是T0定时器,工作模式是16位定时器/****设置脉冲个数位100个,既为0.1ms,则65536-100=65436***/TL0 = 0X9C;             //低8位为1001 1100TH0 = 0XFF;             //高8位为1111 1111TR0 = 1;                //计数器,开始计数ET0 = 1;			    //开启T0中断EA = 1;                 //开启中断总开关count = 5000;flag = 0;while(1)//执行主任务{unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0,0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//0到F的数码表	for(i=0 ;i<=15 ;i++){SMG = val[i];delay();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460239.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多 split 窗口 in Gtkmm4

文章目录 效果预览实现概要源代码 效果预览 实现概要 使用Gtk::Paned虽然 Paned 只能装两个子控件, 但是我可以嵌套 paned1 装 box1 和 box2 paned2 装 paned1 和 box3 源代码 #include <gtkmm.h> class ExampleWindow : public Gtk::Window { public:ExampleWindow()…

蓝桥杯(Web大学组)2022国赛真题:水果消消乐

思路&#xff1a; 记录点击次数&#xff0c;点击次数为1时&#xff0c;记录点击下标&#xff08;用于隐藏or消除&#xff09;、点击种类&#xff0c;点击次数为2时&#xff0c;判断该下标所对应种类与第一次是否相同 相同&#xff1a;两个都visibility:hidden &#xff08;占…

汽车控制臂的拓扑优化

前言 本示例使用优化模块通过减小控制臂的体积同时最大化其刚度来优化汽车控制臂的设计。 本页讨论 前言应用描述Abaqus建模方法和仿真技术文件参考 应用描述 本例说明了汽车控制臂的拓扑优化&#xff0c;在拓扑优化过程中&#xff0c;修改设计区域中单元的材料特性(有效地从…

第62讲商品搜索动态实现以及性能优化

商品搜索后端动态获取数据 后端动态获取数据&#xff1a; /*** 商品搜索* param q* return*/GetMapping("/search")public R search(String q){List<Product> productList productService.list(new QueryWrapper<Product>().like("name", q)…

四.Linux实用操作 8-11.网络请求和下载.端口进程管理主机状态监控

目录 四.Linux实用操作 8.网络请求和下载 ping命令 wget命令--下载网络文件 curl命令--发送网络请求/下载文件 四.Linux实用操作 9.端口 端口 端口&#xff08;虚拟&#xff09; 端口&#xff08;号&#xff09; 查看端口占用 四.Linux实用操作 10.进程管理 查看进程…

位运算01 插入[C++]

图源&#xff1a;文心一言 上机题目练习整理&#xff0c;位运算&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 网页版目录在页面的右上角↗~&#x1f95d;&#x1f95d; 第1版&#xff1a;在力扣新手村刷题的记录~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅…

C语言特殊指针

1 野指针 概念&#xff1a;指向一块未知区域的指针&#xff0c;被称为野指针。野指针是危险的。 危害&#xff1a; 引用野指针&#xff0c;相当于访问了非法的内存&#xff0c;常常会导致段错误&#xff08;segmentation fault&#xff09;引用野指针&#xff0c;可能会破坏系…

恒流源方案对比

1、双运放恒流源 2、运放三极管放大电路组成的恒流源 5A 3、运放三极管组成的恒流源 200uA 4、运放MOS管组成的恒流源 100mA 5、电源模块并联输出100A恒流

百面嵌入式专栏(面试题)C语言面试题22道

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍C语言相关面试题 。 宏定义是在编译的哪个阶段被处理的?答案:宏定义是在编译预处理阶段被处理的。 解读:编译预处理:头文件包含、宏替换、条件编译、去除注释、添加行号。 写一个“标准”宏MIN,这个…

极限的反问题【高数笔记】

1. 什么是极限反问题&#xff1f; 2. 极限反问题分为几类&#xff1f; 3. 每一类极限反问题的具体做法是什么&#xff1f; 4. 每一类极限反问题具体做法是否有前提条件&#xff1f; 5. 例题&#xff1f;

CDN相关和HTTP代理

CDN相关和HTTP代理 参考&#xff1a; 《透视 HTTP 协议》——chrono 把这两个放在一起是因为容易搞混&#xff0c;我一开始总以为CDN就是HTTP代理&#xff0c;但是看了极客时间里透视HTTP协议的讲解&#xff0c;感觉又不仅于此&#xff0c;于是专门写下来。 先说结论&#xf…

数据结构:双向链表

文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是&#xf…