当前位置: 首页 > news >正文

【51单片机】10-蜂鸣器

1.蜂鸣器的原理

这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面含有震荡电路。

1.无源蜂鸣器原理

(1)早期的蜂鸣器都是无源的

(2)内部结构和材料

(3)发生原理:是利用了压电效应的原理

(4)控制信号,是高低电平相间

(5)电路图

(6)音调如何控制:音调受震动频率控制,就等于控制信号的频率。频率越高音调越高,听起来越刺耳。

(7)声音大小如何控制。由硬件决定的。无法写代码取控制声音大小。

2.有源蜂鸣器

1.无源蜂鸣器的缺陷

无源蜂鸣器只能在一定的范围内进行设置,太大或者太小都不行。【外部提供一个方波】

2.内置震荡电路后形成有源蜂鸣器

在内部添加震荡电路,不用使用外部的方波进行控制【但是内部的震荡电路是不可以改变的】

3.有源蜂鸣器也可以用频率信号驱动

可以直接加电也可以直接通过方波进行工作【有源蜂鸣器包含无源蜂鸣器】

4.三极管驱动

5.蜂鸣器发声音频率

2.让蜂鸣器响起来

1.接线确定

2.使用delay让蜂鸣器响起来

#include<reg51.h>sbit BUZZER=P0^0;   //buzzer的驱动引脚void delay(void){unsigned char i,j;for(i=0;i<100;i++){for(j=0;j<10;j++);}}void main(){while(1){BUZZER=1;//将引脚变外高电平delay();BUZZER=0;delay();}
}

 3.调节delay控制音乐的变化

控制delay中的i和j的大小,可以控制音调的振动频率,从而影响声音的尖锐。

如果i和j越大,则音调越小,声音越不尖锐

如果i和j越小,则音调越大,声音越尖锐

4.时钟周期的计算

3.用定时器控制蜂鸣器音调

1.上节驱动方法的问题

(1)不容易精确控制时间

(2)CPU控制蜂鸣器中不能做其他事

2.定时器控制蜂鸣器响

在一定时间后,通过定时器中的中断处理程序取减低蜂鸣器的电平,从控制蜂鸣器的响应

(1)10KHz=>1/10000s=>100us===>高电平+低电平的时间都为50us。所以要定的时间就是50us

(2)外部晶振12MHz+12T设置==>内部时钟频率1MHz===》1us===》TL0=255-50=205,TH0=255

3.注意点1:TL0和TH0的计算

我们在设置TH0和TL0应该将获得的时间取其补码

比如:我们是TL0=50; TH0=0;

        则我们应该写入“TL0=205;TH0=255;"

	TL0=205;TH0=0;
	TL0=205 % 256;//低位取余TH0=255/ 256;//高位取商

4.注意点2:定时器的计算

(65536-50000)/256

计数器是16位的,由高8位TH0和低8位TL0组成,可以存储2^16=65536个数,例如当设定计算值为65536-50000=15536时,也就是计数器从15536开始计时,到65536溢出,产生中断,对于晶振频率为12MHz的单片机来说,执行一个机器周期时长为1us,所以这里计时50000us,15536(D)转换为16进制是3CB0(H),此时TH0=3C,TL0=B0分别装入定时器即可,为了免除这些计算步骤,很多编程者采用"TH0=(65536-50000)/256;TL0=(65536-50000)%256",那么为什么要介入256呢?我们可以做一下运算,256(D)=0100(H),512(D)=0200(H),512(D)有两个256,所以高8位就是02,那么15536有多少个256?就是15536/256个,就相当于高8位有多少数值,商存入高8位,剩下的不足一个256,存入低8位,15536%256。

直接使用宏定义

【注意点】我们51是加法计数器,所以是65535-US

//宏定义一个时钟频率
#define XKHZ 10  //10*10的三次方Hz   要定多少Khz,就定义在这里
//宏定义us
//这里我们除以2,是因为想要分给TH0和TL0
//1000---》1000ms
#define US (1000/XKHZ)/2
sbit BUZZER=P0^0;   //buzzer的驱动引脚
//【注意点】因为51单片机是加法计数器,所以实际上我们要算的范围
//应该是65535-US,而不是0-US
#define N (65535 -US)void delay(void){unsigned char i,j;for(i=0;i<100;i++){for(j=0;j<10;j++);}}void timer0_isr(void) interrupt 1 using 1{//这里再一次赋值,是因为我们想要他循环,所以我们要在他每一次进来的时候重新赋值TL0=N % 256;//低位取余TH0=N / 256;//高位取商BUZZER=!BUZZER;}

4.蜂鸣器发出滴滴声音

通过count可以控制有声音和无声音的长短

#include<reg51.h>/**用定时器控制蜂鸣器音调
*/
//宏定义一个时钟频率
#define XKHZ 10  //10*10的三次方Hz   要定多少Khz,就定义在这里
#define US (1000/XKHZ)/2
sbit BUZZER=P0^0;   //buzzer的驱动引脚
#define N (65535 -US)//计数器
unsigned int count;//判断此时是从”有声音“到"没声音”,还是从“没声音”到“有声音”
unsigned char flag=0;  //flag=0表示有声音,flag=1表示没有声音void delay(void){unsigned char i,j;for(i=0;i<100;i++){for(j=0;j<10;j++);}}void timer0_isr(void) interrupt 1 using 1{//这里再一次赋值,是因为我们想要他循环,所以我们要在他每一次进来的时候重新赋值TL0=N % 256;//低位取余TH0=N / 256;//高位取商if(count--==0){//说明到了翻转的时候了//count=5000;//记得重新赋值,要不然就只能响一次if(flag==0){//说明之前处于有声音的,说明本次是从有声音到无声音的翻转flag=1;//此时“无声音”比“有声音”的时间还长了3倍count=600*3;}else{//说明之前没声音的,说明本次是没声音到有声音的翻转flag=0;//下面这句话,加上了,则表示在翻转的时候也会出现声音BUZZER=!BUZZER;count=600;}}else{//常规情况,也就是不翻转时候if(flag==0){BUZZER=!BUZZER; //4999次声音}else{//空的,因为不进行任何IO操作就是没有声音}}}void main(){//【第一步】初始化:我们使用的是定时器T0TMOD=0x01;  //T0使用16位bit定时器//********************************************************TL0=N % 256;//低位取余TH0=N / 256;//高位取商//********************************************************//打开计数器;TCON中的TR0【定时器T0的运行控制位】TR0=1;		//T0打开开始计数//T0的中断溢出位,表示允许中断ET0=1;		//T0中断允许EA=1;			//打开中断允许BUZZER=1;//设置响和不响的周期时间count=5000;     //5000*100us=500ms//初始化,有声音flag=0;}

5.让蜂鸣器唱歌

1.为什么蜂鸣器可以唱歌

(1)发声音频可变---》延迟函数(delay)

(2)发声音长度可变---》定时器

unsigned char i;
for(i=0;i<200;i++){//控制声音响应时间长短Sound=~Sound;DelayXms(1);//控制声音的不同
}for(i=0;i<50;i++){Sound=~Sound;DelayXms(2);
}

2.分析写好的唱歌程序

(1)复制代码过去

(2)修改控制蜂鸣器的IO引脚定义

3.”code“关键字的使用

因为我们加入的歌曲的编码是固定不变的,但是51单片机的内存有限制,所以我们只能把歌曲的编码放在常量区中,才使得其不会占据内存。则加上“code”关键字。

unsigned char code music_tab[] = 
{   0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,    0x20, 0x40, 0x1C , 0x10,   0x18, 0x10, 0x20 , 0x10,   0x1C, 0x10, 0x18 , 0x40,   0x1C, 0x20, 0x20 , 0x20,   0x1C, 0x20, 0x18 , 0x20,   0x20, 0x80, 0xFF , 0x20,   0x30, 0x1C, 0x10 , 0x18,   0x20, 0x15, 0x20 , 0x1C,
}

4.音节的构成

0x18, 0x30, 0x1C , 0x10,【2个一组】

(1)音调【振动频率决定】:0x18【奇数次】

(2)音长:0x30【偶数次】

注意点:

5.音频 VS 音调

(1)音节:定时器T0控制的是音乐的节拍(某一个音节持续时间)而不管音调(频率)

(2)音调【音频】:是直接使用delay做出来的,控制发出什么样子的声音


/************************************************************************  
[文件名]  C51音乐程序(八月桂花)  
[功能]    通过单片机演奏音乐  /**********************************************************************/  #include <REG51.H> 
//提供移位函数,可以省略
//#include <INTRINS.H>    
//本例采用89C52, 晶振为11.0592MHZ    
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.    
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;    
//所以拿出谱子, 试探编吧!    sbit Beep =  P0^0 ; 			// 要根据实际的接线来修改unsigned char n = 0;  //n为节拍常数变量    
unsigned char code music_tab[] = 
{   0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,    0x20, 0x40, 0x1C , 0x10,   0x18, 0x10, 0x20 , 0x10,   0x1C, 0x10, 0x18 , 0x40,   0x1C, 0x20, 0x20 , 0x20,   0x1C, 0x20, 0x18 , 0x20,   0x20, 0x80, 0xFF , 0x20,   0x30, 0x1C, 0x10 , 0x18,   0x20, 0x15, 0x20 , 0x1C,   0x20, 0x20, 0x20 , 0x26,   0x40, 0x20, 0x20 , 0x2B,   0x20, 0x26, 0x20 , 0x20,   0x20, 0x30, 0x80 , 0xFF,   0x20, 0x20, 0x1C , 0x10,   0x18, 0x10, 0x20 , 0x20,   0x26, 0x20, 0x2B , 0x20,   0x30, 0x20, 0x2B , 0x40,   0x20, 0x20, 0x1C , 0x10,   0x18, 0x10, 0x20 , 0x20,   0x26, 0x20, 0x2B , 0x20,   0x30, 0x20, 0x2B , 0x40,   0x20, 0x30, 0x1C , 0x10,   0x18, 0x20, 0x15 , 0x20,   0x1C, 0x20, 0x20 , 0x20,   0x26, 0x40, 0x20 , 0x20,   0x2B, 0x20, 0x26 , 0x20,   0x20, 0x20, 0x30 , 0x80,   0x20, 0x30, 0x1C , 0x10,   0x20, 0x10, 0x1C , 0x10,   0x20, 0x20, 0x26 , 0x20,   0x2B, 0x20, 0x30 , 0x20,   0x2B, 0x40, 0x20 , 0x15,   0x1F, 0x05, 0x20 , 0x10,   0x1C, 0x10, 0x20 , 0x20,   0x26, 0x20, 0x2B , 0x20,   0x30, 0x20, 0x2B , 0x40,   0x20, 0x30, 0x1C , 0x10,   0x18, 0x20, 0x15 , 0x20,   0x1C, 0x20, 0x20 , 0x20,   0x26, 0x40, 0x20 , 0x20,   0x2B, 0x20, 0x26 , 0x20,   0x20, 0x20, 0x30 , 0x30,   0x20, 0x30, 0x1C , 0x10,   0x18, 0x40, 0x1C , 0x20,   0x20, 0x20, 0x26 , 0x40,   0x13, 0x60, 0x18 , 0x20,   0x15, 0x40, 0x13 , 0x40,   0x18, 0x80, 0x00   
};   // T0定时控制的是音乐的节拍(某一个音节持续的时间)而不管音调(频率)// 音调是直接使用delay做出来的。
void int0()  interrupt 1   //采用中断0 控制节拍    
{  TH0 = 0xd8;   TL0 = 0xef;   n--;   
}   void delay (unsigned char m)   //控制频率延时    
{   unsigned i = 3 * m;   while (--i);   
}   void delayms(unsigned char a)  //豪秒延时子程序    
{   while (--a);                  //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!    
}   void main()   
{ unsigned char p, m;   // m为频率常数变量    unsigned char i = 0;   //此处表示将:低4位留下了,高4位去除TMOD &= 0x0f;   TMOD |= 0x01;  		// timer0 工作在模式1,16位定时器下 TH0 = 0xd8;TL0 = 0xef;   		// 这个TH和TL的值合起来定了1个10ms左右的一个时间IE = 0x82;   
play:   while (1)   {   
a: 		p = music_tab[i];   //表示指向第一个if (p == 0x00)   		// 一遍播放完了,延时1s后自动开始下一遍    { i=0;delayms(1000);  //表示播放完一次,延迟1s,接着下一次播放//如果想要播放一次,则下面goto注释goto play;  //跳转接着播放}     //如果碰到结束符,延时1秒,回到开始再来一遍    else if (p == 0xff)  //0xff:休止符{ i = i + 1;//跳过这一组数据delayms(100);TR0 = 0; //TR0:关闭定时器goto a;}  //若碰到休止符,延时100ms,继续取下一音符    else     //常规情况p==正常情况      {m = music_tab[i++];n = music_tab[i++];}  // m取频率常数【A,B,C】 和 n取节拍常数 【1/2,1/3,1/4】   //打开开定时器1   TR0 = 1;                               while (n != 0) //节拍不等于0{ Beep = ~Beep;   //修改蜂鸣器电平 【~】与【!】一样delay(m);        	//等待节拍完成, 通过P1口输出音频(可多声道哦!)    }TR0 = 0;                         	//关定时器1    }   
}

6.切歌,暂停功能

单片机应用番外篇——蜂鸣器的应用之可实现切歌、暂停功能的简单音乐盒_哔哩哔哩_bilibili

/**使用中断处理程序控制音乐的暂停和播放,切换*///外部中断初始化void EX_init(){IT0=1;//下降沿触发方式  INT0IT1=1;//下降沿触发方式    INT1EX0=1;  //外部中断0中断允许位EX1=1;   //打开中断开关EA=1;//打开总的中断开关}//暂停功能
void EX0_isr() interrupt 0
{DelayXms(10);//消除抖动if(INT0==0)//这里是INT1已经定义了,对应P3.2这个IO口,可以直接使用{//暂停通过定时计数器,则将计数器进行取反TR0=~TR0;TR1=~TR1;}
}//切歌功能
void EX1_isr() interrupt 2
{DelayXms(10);//消除抖动if(INT1==0)//这里是INT1已经定义了,对应P3.2这个IO口,可以直接使用{state++;if(state==3){  //因为此时我们只有3曲歌state=0;}}
}unsigned char state=0;//控制切歌void main(){EX_init();InitialSound();while(1){switch(state){ //这个切歌,通过外部中断1,则进行转换case 0:Play(Music_Girl,0,2,345);break;case 1:Play(Music_haw,0,23,543);break;default:break;}}}

相关文章:

【51单片机】10-蜂鸣器

1.蜂鸣器的原理 这里的“源”不是指电源。而是指震荡源。 也就是说&#xff0c;有源蜂鸣器内部带震荡源&#xff0c;所以只要一通电就会叫。 而无源内部不带震荡源&#xff0c;所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵&#xff…...

26377-2010 逆反射测量仪 知识梳理

声明 本文是学习GB-T 26377-2010 逆反射测量仪. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了逆反射测量仪的术语和定义、结构与分类、技术要求、计量学特性、试验方法、检验规 则以及标志、包装、运输与贮存。 本标准适用于…...

css实现渐变电量效果柱状图

我们通常的做法就是用echarts来实现 比如 echarts象形柱图实现电量效果柱状图 接着我们实现进阶版&#xff0c;增加渐变效果 echarts分割柱形图实现渐变电量效果柱状图 接着是又在渐变的基础上&#xff0c;增加了背景色块的填充 echarts实现渐变电量效果柱状图 其实思路是一…...

FileManager/本地文件增删改查, Cache/图像缓存处理 的操作

1. FileManager 本地文件管理器&#xff0c;增删改查文件 1.1 实现 // 本地文件管理器 class LocalFileManager{// 单例模式static let instance LocalFileManager()let folderName "MyApp_Images"init() {createFolderIfNeeded()}// 创建特定应用的文件夹func cr…...

vue中使用富文本编辑器

vue中使用富文本编辑器&#xff08;wangEditor&#xff09; wangEditor官网地址&#xff1a;https://www.wangeditor.com/ 使用示例 <template><div class"app-container"><div class"box"><div class"editor-tool">&l…...

13.(开发工具篇github)如何在GitHub上上传本地项目

一:创建GitHub账户并安装Git 二:创建一个新的仓库(repository) 三、拉取代码 git clone https://github.com/ainier-max/myboot.git git clone git@github.com:ainier-max/myboot.git四、拷贝代码到拉取后的工程 五、上传代码 (1)添加所有文件到暂存...

vue3中状态适配

写一个函数&#xff0c;在函数中定义一个对象 用于存放键值对&#xff0c;最后返回指定状态所对应的的值&#xff0c;即对象[指定状态] 的 对象的值。 在模板中把状态传入 // vue3 setup语法糖中 const formatXXXState (xxxState)>{const stateMap {键1: 值1,键2: 值2,.…...

uniapp h5 端 router.base设置history后仍有#号

manifest.json文件设置&#xff1a; "h5": { "router": { "base": "./", "mode": "history" }, }按相对路径发行时路由模式强制为hash模式&#xff0c;不支持history模式&#xff08;两者相悖&#xff09;…...

上网行为监管软件(上网行为管理软件通常具有哪些功能)

在我们的日常生活中&#xff0c;互联网已经成为了我们获取信息、交流思想、进行工作和娱乐的重要平台。然而&#xff0c;随着互联网的普及和使用&#xff0c;网络安全问题也日益突出&#xff0c;尤其是个人隐私保护和网络行为的规范。在这个背景下&#xff0c;上网行为审计软件…...

C#中的for和foreach的探究与学习

一:语句及表示方法 for语句: for(初始表达式;条件表达式;增量表达式) {循环体 }foreach语句: foreach(数据类型 变量 in 数组或集合) {循环体 }理解 1.从程序逻辑上理解,foreach是通过指针偏移实现的(最初在-1位置,每循环一次,指针就便宜一个单位),而for循环是通...

【ES6知识】Promise 对象

文章目录 1.1 概述1.2 静态方法1.3 实例方法1.4 Promise 拒绝事件 1.1 概述 Promise 对象用于表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。是异步编程的一种解决方案&#xff08;可以解决回调地狱问题&#xff09;。 一个 Promise 对象代表一个在这…...

【Git】配置SSH密钥实现Git操作免密

背景 在使用Git推送代码的时候&#xff0c;会默认需要输入密码。如果经常推送代码&#xff0c;那就需要经常输入密码&#xff0c;比较繁琐。所以Git也提供了免密登录的功能。 Git本身支持两种协议对远程Git仓库进行访问&#xff1a;HTTPS、SSH。两种方式有一定的区别&#xf…...

AI能给百融云带来什么?

一大堆有关ChatGPT的利好消息出现之后&#xff0c;市场的反应难得的跟投资者预期站在了一起&#xff0c;AIGC也终于有了跑赢CPO的苗头。二级市场的逻辑不用重复&#xff0c;毕竟AI已经炒了大半年&#xff0c;但有没有发现一个问题&#xff1f;就是在不知不觉中&#xff0c;AI应…...

AI创作系统ChatGPT商业运营版源码+AI绘画/支持GPT联网提问/支持Midjourney绘画+Prompt应用+支持国内AI提问模型

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&am…...

vue.draggable拖拽,项目中三个表格互相拖拽的实例操作,前端分页等更多小技巧~

vue.draggable中文文档 - itxst.com官网在这里&#xff0c;感兴趣的小伙伴可以看看。 NPM或yarn安装方式 yarn add vuedraggable npm i -S vuedraggable UMD浏览器直接引用JS方式 <script src"https://www.itxst.com/package/vue/vue.min.js"></script&…...

400G DR4 QSFP-DD光模块:数据中心应用全攻略

在当今数字化时代&#xff0c;对于企业和供应商来说&#xff0c;高速数据传输至关重要。随着对更快数据传输的需求不断攀升&#xff0c;400G DR4 QSFP-DD光模块已经成为高速网络的最新解决方案。本文将全面介绍400G DR4 QSFP-DD光模块在数据中心应用中的优势和技术规范。 什么…...

自动驾驶:路径规划概述

自动驾驶&#xff1a;路径规划概述 全局路径规划Dijkstra算法A*算法RRT&#xff08;随机快速探索树&#xff09;算法PRM&#xff08;概率路线图&#xff09;算法 局部路径规划DWA&#xff08;动态窗口法&#xff09;算法TEB&#xff08;时间弹性带&#xff09;算法Lattice Plan…...

vlc将本地文件推流成ts实时流

推流 打开vlc &#xff0c;打开 媒体----打开网络串流 选择文件选项卡&#xff0c;打开本地文件 点击添加&#xff0c;选择本地的mp3文件 选择串流 点击下拉框&#xff0c;选择udp&#xff0c;点击右边的【添加】按钮 输入媒体流输出地址&#xff0c;点击【下一个】 选择正确的…...

C# 自定义控件库之Lable组合控件

1、创建类库 2、在类库中添加用户控件&#xff08;Window窗体&#xff09; 3、控件视图 4、后台代码 namespace UILib {public partial class DeviceInfoV : UserControl{public DeviceInfoV(){InitializeComponent();ParameterInitialize();}#region 初始化private void Par…...

解密防关联指纹浏览器:联盟营销领域的秘密武器

联盟营销在今天的数字化时代越来越受欢迎。然而&#xff0c;联盟营销也面临着一些挑战&#xff0c;其中之一就是账号关联问题。本文将介绍如何利用防关联指纹浏览器来提升联盟营销的效果和安全性。 一、什么是防关联指纹浏览器&#xff1f; 防关联指纹浏览器是一种工具&#…...

asp.net core mvc Razor +dapper 增删改查,分页(保姆教程)

说明&#xff1a;本demo使用sqlserver数据库&#xff0c;dapper orm框架 完成一张学生信息表的增删改查&#xff0c;前端部分使用的是Razor视图&#xff0c; Linq分页 HtmlHelper。&#xff08;代码随便写的&#xff0c;具体可以自己优化&#xff09; //实现效果如下&#xff0…...

网络安全——自学(黑客)方法

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…...

秋招算法岗,面试复盘

面试锦囊之面经分享系列&#xff0c;持续更新中 欢迎后台回复『面试』加入讨论组交流噢 楼主秋招主要投算法岗&#xff08;偏NLP方向&#xff09;和数据岗方向&#xff0c;下面分享我的一些面试经历。 一、科大讯飞&#xff08;NLP&#xff09; 简要介绍自己Python里面哈希表…...

AI类APP能做什么

AI类APP可以实现多种功能&#xff0c;涵盖了各种领域和用途。以下是一些常见的AI类APP示例以及它们主要实现的功能&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.语音助手&#xff08;Voice Assis…...

计算机毕业设计 基于SSM的垃圾分类管理系统(以医疗垃圾为例)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

友思特案例|友思特 Ensenso 3D相机:汽车工业自动化的革命性力量

01 内容摘要 在竞争激烈的汽车行业&#xff0c;自动化生产至关重要。友思特 Ensenso 3D相机为汽车制造商提供了可靠的工具和技术支持&#xff0c;助力多个关键环节。它在汽车座位泡棉切割中提高精确度&#xff0c;降低浪费&#xff0c;提高生产效率&#xff1b;在汽车压铸零部…...

【5G PHY】物理层逻辑和物理天线的映射

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…...

MySQL如何优雅处理批量新增和更新?ON DUPLICATE KEY UPDATE用它!

场景&#xff1a;一张用户表user&#xff0c;此时我需要批量新增用户&#xff0c;如果用户已经存在了&#xff0c;则更新该条记录&#xff1b;如果用户不存在&#xff0c;则插入一条数据。 痛点&#xff1a;常规做法新增更新各写一个接口。而且是批量操作&#xff0c;比较繁琐&…...

网络安全(加密, Hashing, 证书, SSL/TLS等)学习小结

网上看到的一些关于网络安全的学习资料小结。 对称加密: 通信双方共享同一个密钥。发送方用它来加密&#xff0c;接收方用它来解密。 非对称加密: 有公钥和私钥。 现在的做法一般是用非对称加密生成&#xff1f;钥(公钥还是私钥?&#xff09;用于传输&#xff1f;&#xff0…...

缓冲技术在嵌入式中的应用

引言 在嵌入式中&#xff0c;不可避免地会遇到数据的收发。 其实&#xff0c;数据的收发有很多情况。 总体上&#xff0c;分为数据的收和发&#xff1a; 其中&#xff0c;数据发送是一个主动的行为&#xff0c;我们对要发送数据的数量特点等都是知道的&#xff0c;比如我们通过…...

最牛黑客做的白粉交易网站/google官方下载安装

&#xff2d;&#xff41;&#xff54;&#xff4c;&#xff41;&#xff42;求解方同轴波导的截止波长和特性阻抗作者&#xff1a;金静逯迈陈小强来源&#xff1a;《现代电子技术》2008年第03期摘要&#xff1a;采用有限差分法利用Matlab求解了方同轴波导的特性阻抗和高次模的…...

wordpress ip改域名/微信公众号推广方法有哪些

文章目录类C中可以使用struct、class来定义一个类变量名规范参考类实例化成为了对象&#xff0c;对象的内存空间由成员变量决定对象对象的内存布局代码段&#xff08;代码区&#xff09;数据段&#xff08;全局区&#xff09;栈空间堆空间thisthis指针必须用->,不能用. &…...

google地图嵌入网站/seminar

目录 1.浅克隆 1.1基本实现 1.2 用原型模式生成“三好学生"奖状 2.深克隆 1.浅克隆 使用场景&#xff1a; 对象的创建非常复杂&#xff0c;可以使用原型模式快捷的创建对象。 性能和安全要求比较高。 1.1基本实现 Realizetype&#xff08;具体的原型类&#xff09…...

wordpress k2/优化软件刷排名seo

EasyNVR流媒体解决方案 EasyNVR能够通过简单的网络摄像机通道配置&#xff0c;将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR&#xff0c;EasyNVR能够将这些视频源的音视频数据进行拉取&#xff0c;转换为RTMP/HLS&#xff0c;进行…...

国家 政府网站建设 指导性文件有哪些/免费的推广网站

基于matlab的不规则面积图像测量.doc 基于 MATLAB 的不规则面积图像测量* 不规则图像/图像处理/面积计算 1 引言在当今这个生活节奏迅速的时代,测量工作已经难以通过事事亲力亲为得到保证,特别是在复杂的环境条件下(如强 电磁、强辐射、强腐蚀的环境),因此我们需要通过其他方式…...

网站建设方案是什么意思/招商外包公司

更多编程教程请到&#xff1a;菜鸟教程 https://www.piaodoo.com/ 友情链接&#xff1a;好看站 http://www.nrso.net/当我们定义一个类的时候&#xff0c;有时候会定义一个私有属性来辅助开发。在其它语言中经常会用到 private 来修饰这个属性为私有属性。可是你知道么&#x…...