51单片机STC89C52RC——11.1 蜂鸣器播放音乐

目录

目的/效果

一,STC单片机模块

二,蜂鸣器

 2.1 介绍

2.2 板子位置+电路图

2.3 发声原理

2.4 音符和频率

三,创建Keil项目

四,代码 

4.1 乐谱代码

4.1.1 《义勇军进行曲》

 4.1.2 《天空之城》

4.1.3 《小美满》 

4.1.4 《兰花草》

4.1.5 《救护车》

4.1.6 《消防车》

乐谱待优化点

 4.2 蜂鸣器播放的音乐代码

五,代码编译、下载到51单片机


目的/效果

1:让蜂鸣器响起来

2:蜂鸣器播放音乐(《义勇军进行曲》《天空之城》《小美满》《兰花草》等) 

一,STC单片机模块

二,蜂鸣器

2.1 介绍

蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号

蜂鸣器按驱动方式可分为有源蜂鸣器无源蜂鸣器。

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定

无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音(本节内容全部基于无源蜂鸣器)

2.2 板子位置+电路图

2.3 发声原理

翻转蜂鸣器的IO口,

    while(1){
        P2_5=!P2_5;//翻转蜂鸣器端口
    }

上面这段代码 执行时,可能听不到声音。

根据人耳朵的听力范围20-20000Hz

那么我们延时周期时长范围为

12000000/12/20000=50us,(最高频率时间间隔)

12000000/12/20=50000us=50ms (最低频率时间间隔)


/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{
	while(1){
		Delay_ms(2);//延时2毫秒【1秒钟翻转500次,相当于500Hz】
		P2_5=!P2_5;//翻转蜂鸣器端口
	}
}

2.4 音符和频率

标准的A的频率为440(每秒440次),相邻两个半音之间的比值是\sqrt[12]{2},所以我们根据标准音去计算其他音的频率,如下表

音符频率/Hz(计算值,保留小数)频率/Hz(每秒震动次数 取整)
低音1411.5292003412
低音1#436436
低音2412.4730746412
低音2#437437
低音3413.416949413
低音4438438
低音4#414.3608233414
低音5439439
低音5#415.3046976415
低音6(标准)440440
低音6#466.1637615466
低音7493.8833013494
中音1523.2511306523
中音1#554.365262554
中音2587.3295358587
中音2#622.2539674622
中音3659.2551138659
中音4698.4564629698
中音4#739.9888454740
中音5783.990872784
中音5#830.6093952831
中音6880880
中音6#932.327523932
中音7987.7666025988
高音11046.5022611047
高音1#1108.7305241109
高音21174.6590721175
高音2#1244.5079351245
高音31318.5102281319
高音41396.9129261397
高音4#1479.9776911480
高音51567.9817441568
高音5#1661.218791661
高音617601760
高音6#1864.6550461865
高音71975.5332051976

有了上面的频率(震动次数)我们再通过系统中断来翻转蜂鸣器.每秒翻转对应次数蜂鸣器就能发出对应频率的声音。

再利用晶振频率计算器单个震动的周时长

单个周期时长=晶振周期/12时钟周期/频率

比如 标准音A 所耗周期时长12000000/12/440=2272,由于蜂鸣器电频翻转只需要一半,所以还需要将周期减半1136。再利用定时器溢出发生中断,计算定时器的重转值。重装值=65536-周期时长65536-1136=64400 其他如下表

音符频率/Hz(计算值,保留小数)频率/Hz(每秒震动次数 取整)周期时长/us周期/2 us周期取整定时器重装值
低音1261.62556532623816.7938931908.396947190863628
低音1#277.1826312773610.1083031805.054152180563731
低音2293.66476792943401.3605441700.680272170163835
低音2#311.12698373113215.4340841607.717042160863928
低音3329.62755693303030.303031515.151515151564021
低音4349.22823143492865.3295131432.664756143364103
低音4#369.99442273702702.7027031351.351351135164185
低音5391.9954363922551.0204081275.510204127664260
低音5#415.30469764152409.6385541204.819277120564331
低音6(标准)4404402272.7272731136.363636113664400
低音6#466.16376154662145.9227471072.961373107364463
低音7493.88330134942024.2914981012.145749101264524
中音1523.25113065231912.045889956.022944695664580
中音1#554.3652625541805.054152902.527075890364633
中音2587.32953585871703.577513851.788756485264684
中音2#622.25396746221607.717042803.858520980464732
中音3659.25511386591517.450683758.725341475964777
中音4698.45646296981432.664756716.332378271664820
中音4#739.98884547401351.351351675.675675767664860
中音5783.9908727841275.510204637.75510263864898
中音5#830.60939528311203.369434601.684717260264934
中音68808801136.363636568.181818256864968
中音6#932.3275239321072.961373536.480686753665000
中音7987.76660259881012.145749506.072874550665030
高音11046.5022611047955.1098376477.554918847865058
高音1#1108.7305241109901.7132552450.856627645165085
高音21174.6590721175851.0638298425.531914942665110
高音2#1244.5079351245803.2128514401.606425740265134
高音31318.5102281319758.1501137379.075056937965157
高音41396.9129261397715.8196135357.909806735865178
高音4#1479.9776911480675.6756757337.837837833865198
高音51567.9817441568637.755102318.87755131965217
高音5#1661.218791661602.0469597301.023479830165235
高音617601760568.1818182284.090909128465252
高音6#1864.6550461865536.1930295268.096514726865268
高音71975.5332051976506.0728745253.036437225365283

所以我们这里要定义音符 对应中断初始值


//索引与频率对照表
unsigned int FreqTable[]={
	0,//占位休止符
	63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
	64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
	65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};

再将对应音符和索引定义好。


//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#
#define P	0
#define L1	1
#define L1_	2
#define L2	3
#define L2_	4
#define L3	5
#define L4	6
#define L4_	7
#define L5	8
#define L5_	9
#define L6	10
#define L6_	11
#define L7	12
#define M1	13
#define M1_	14
#define M2	15
#define M2_	16
#define M3	17
#define M4	18
#define M4_	19
#define M5	20
#define M5_	21
#define M6	22
#define M6_	23
#define M7	24
#define H1	25
#define H1_	26
#define H2	27
#define H2_	28
#define H3	29
#define H4	30
#define H4_	31
#define H5	32
#define H5_	33
#define H6	34
#define H6_	35
#define H7	36

三,创建Keil项目

详细参考:51单片机STC89C52RC——创建Keil项目-CSDN博客

四,代码 

4.1 乐谱代码

4.1.1 《义勇军进行曲》


//《义勇军进行曲》乐谱 //最短是 16分音符=1
unsigned char Music_GuoGe[]={
	//音符,时值,
  M1,2+1,
  M3,1,
  M5,2,
  M5,2,
  
  M6,4,
  M5,4,
  
  M3,2+1,
  M1,1,
  M5,1,
  M5,1,
  M5,1,
  
  M3,4,
  M1,4,
  
  L5,1,
  L5,1,
  L5,1,
  L5,1,
  L5,1,
  L5,1,
  
  M1,4,
  P,2,
  L5,2,
  
  M1,4+2,
  M1,2,
  
  M1,2+1,
  M1,2,
  
  L5,2,
  L6,1,
  L7,1,
  
  M1,4,
  M1,4,
  
  P,4,
  M3,4,
  
  M1,2,
  M2,1,
  M3,1,
  
  M5,4,
  M5,4,
  
  M3,2+1,
  M3,1,
  
  M1,2,
  M3,2+1,
  
  M5,2,
  M3,2+1,
  M2,4+4,
  
  M6,4,
  M5,4,
  
  M2,4,
  M3,4,
  
  M5,2,
  M3,2,
  P,2,
  M5,2,
  
  M3,2,
  M2,1,
  M3,1,
  M1,4,
  
  M3,4,
  P,4,
  
  L5,2+1,
  L6,1,
  M1,2,
  M1,2,
  
  M3,2+1,
  M3,1,
  M5,2,
  M5,2,
  
  M2,2,
  M2,1,
  M2,1,
  L6,4,
  
  M2,4+2,
  L5,2,
  
  M1,4+2,
  M1,2,
  
  M3,4+2,
  M3,2,
  
  M5,4+4,
  
  M1,2+1,
  M3,1,
  M5,2,
  M5,2,
  
  M6,4,
  M5,4,
  
  M3,2+1,
  M1,  1,
  M5,1,
  M5,1,
  M5,1,
  
  M3,2,
  P,2,  
  M1,2,
  P,2,
  
  L5,4,
  M1,4,
  
  
  M3,2+1,
  M1,  1,
  M5,1,
  M5,1,
  M5,1,
  
  M3,2,
  P,2,  
  M1,2,
  P,2,
  
  L5,4,
  M1,4,
  
  L5,4,
  M1,4,
  
  L5,4,
  M1,4,
  
  M1,4,
  P,4,
  
  P,4,
  P,4,
  P,4,
  P,4,
  0xFF	//终止标志
};

 4.1.2 《天空之城》


//《天空之城》乐谱
unsigned char code Music_CastleSky[]={
	//音符,时值,
	
	//1
	P,	4,
	P,	4,
	P,	4,
	M6,	2,
	M7,	2,
	
	H1,	4+2,
	M7,	2,
	H1,	4,
	H3,	4,
	
	M7,	4+4+4,
	M3,	2,
	M3,	2,
	
	//2
	M6,	4+2,
	M5,	2,
	M6, 4,
	H1,	4,
	
	M5,	4+4+4,
	M3,	4,
	
	M4,	4+2,
	M3,	2,
	M4,	4,
	H1,	4,
	
	//3
	M3,	4+4,
	P,	2,
	H1,	2,
	H1,	2,
	H1,	2,
	
	M7,	4+2,
	M4_,2,
	M4_,4,
	M7,	4,
	
	M7,	8,
	P,	4,
	M6,	2,
	M7,	2,
	
	//4
	H1,	4+2,
	M7,	2,
	H1,	4,
	H3,	4,
	
	M7,	4+4+4,
	M3,	2,
	M3,	2,
	
	M6,	4+2,
	M5,	2,
	M6, 4,
	H1,	4,
	
	//5
	M5,	4+4+4,
	M2,	2,
	M3,	2,
	
	M4,	4,
	H1,	2,
	M7,	2+2,
	H1,	2+4,
	
	H2,	2,
	H2,	2,
	H3,	2,
	H1,	2+4+4,
	
	//6
	H1,	2,
	M7,	2,
	M6,	2,
	M6,	2,
	M7,	4,
	M5_,4,
	
	
	M6,	4+4+4,
	H1,	2,
	H2,	2,
	
	H3,	4+2,
	H2,	2,
	H3,	4,
	H5,	4,
	
	//7
	H2,	4+4+4,
	M5,	2,
	M5,	2,
	
	H1,	4+2,
	M7,	2,
	H1,	4,
	H3,	4,
	
	H3,	4+4+4+4,
	
	//8
	M6,	2,
	M7,	2,
	H1,	4,
	M7,	4,
	H2,	2,
	H2,	2,
	
	H1,	4+2,
	M5,	2+4+4,
	
	H4,	4,
	H3,	4,
	H3,	4,
	H1,	4,
	
	//9
	H3,	4+4+4,
	H3,	4,
	
	H6,	4+4,
	H5,	4,
	H5,	4,
	
	H3,	2,
	H2,	2,
	H1,	4+4,
	P,	2,
	H1,	2,
	
	//10
	H2,	4,
	H1,	2,
	H2,	2,
	H2,	4,
	H5,	4,
	
	H3,	4+4+4,
	H3,	4,
	
	H6,	4+4,
	H5,	4+4,
	
	//11
	H3,	2,
	H2,	2,
	H1,	4+4,
	P,	2,
	H1,	2,
	
	H2,	4,
	H1,	2,
	H2,	2+4,
	M7,	4,
	
	M6,	4+4+4,
	P,	4,
	
	P,	4,
	P,	4,
	P,	4,
	P,	4,
	P,	4,
	0xFF	//终止标志
};

4.1.3 《小美满》 节选


//《小美满》乐谱
unsigned char code Music_XMM[]={
	//音符,时值,
	
	//
	P,2,
	M5,2,
	H1,2,
	H3,2,
	
	H5,4,
	H5,1,
	H6,1,
	H5,1,
	H6,1,

	H5,2,
	H3,2,
	H2,2,
	H1,2,
	
	H3,4,
	H5,1,
	H6,1,
	H5,1,
	H6,1,

	
	H5,4,
	H6,2,
	H5,2,
	H1,4,
	
	
	H6,2,
	H5,2,
	H1,4,
	
	M6,2,
	H1,2,
	
	
	H4,1,
	H5,1,
	H5,1,
	H5,1,
	H5,2,
	H1,2,
	
	H1,4,
	M7,4,
	
	H1,8,
	
	H5,2,
	H5,1,
	H5,1,
	H3,2,
	HH1,2,
	
	H5,4,
	
	H1,1,
	H6,1,
	H6,1,
	H6,1,
	H6,2,
	H5,2,
	
	H3,8,
	H1,1,
	H1,1,
	H1,1,
	M7,1,
	H1,2,
	H2,2,
	H3,2,
	H6,1,
	H5,1,
	H5,3,
	M6,1,
	
	H1,1,
	H1,1,
	H1,1,
	H1,1,
	H1,2,
	
	H5,1,
	H3,1,
	H2,8,
	
	H5,1,
	H5,3,
	H5,1,
	H3,2,
	HH1,2,
	H5,8,
	
	H1,1,
	H6,1,
	H6,1,
	H6,1,
	H6,2,
	H5,2,
	H3,4,
	H3,3,
	M6,1,
	
	H1,1,
	H1,1,
	H1,1,
	M7,1,
	H1,2,
	H2,2,
	H3,2,
	H6,1,
	H5,1,
	H5,4,
	
	
	H1,1,
	H1,1,
	H1,1,
	H1,1,
	H1,2,
	M7,2,
	H1,1,
	H6,1,
	H5,1,
	H6,1,
	H5,2,
	H2,2,
	
	H3,4,
	H3,1,
	H2,1,
	H1,2,
	H2,1,
	H2,1,
	H2,1,
	H2,1,
	H2,2,
	H1,2,
	H3,4,
	P,	4,
	P,	4,
	P,	4,
	P,	4,
	0xFF	//终止标志
};

4.1.4 《兰花草》


//《兰花草》
unsigned char code Music_LHC[]=
{
	L6,2,
	M3,2,
	M3,2,
	M3,2,
	M3,4,
	M3,2,
	M2,2,
	
	M1,2,
	M1,1,
	M2,1,
	M1,2,
	L7,2,
	L6,4,
	
	M6,2,
	M6,2,
	M6,2,
	M6,2,
	M6,4,
	M6,2,
	M5,2,

	M3,2,
	M5,2,
	M5,2,
	M4_,2,
	M3,8,

	M3,2,
	M6,2,
	M6,2,
	M5,2,
	M3,4,
	M3,2,
	M2,2,

	M1,2,
	M2,2,
	M1,2,
	L7,2,
	L6,4,
	L3,4,

	L3,2,
	M1,2,
	M1,2,
	L7,2,
	L6,4,
	L6,2,
	M3,2,
	M2,2,
	M2,1,
	M1,1,
	L7,2,
	L5,2,
	L6,8,
	
	P,4,
	P,4,
	P,4,
	P,4,
	0xff//结束
};

4.1.5 《救护车》



//救护车
unsigned char Music_Ambulance[]={
  H3,4,
  H1,4,
  0xFF	//终止标志
};

4.1.6 《消防车》


//消防车
unsigned char Music_FireTruck[]={
  H5,4,
  H7,4,
  0xFF	//终止标志
};

乐谱待优化点

1:由于这里设备内存限制,不可能将以上所有乐谱编译。

2:乐谱的音符和拍子的长短没能进行较为好的对象化编程,可以考虑{音符、时值}的代码模式进行再次封装。且节拍时值最好能固定,4分音符时值设置为T,其他时值根据这个做调整。比如下表

音符写法时长值时长值
全音符1---4T四拍
二分音符1--2T二拍
四分音符1T一拍
八分音符1T/2半拍
十六分音符以此类推T/4四分之一拍

要精确最好能将一个乐谱的最小时值设为T,或者将T设置为2的n次幂的数字,这样在做T/n时没有余数更为准确。 

3:乐谱没有考虑到和弦

 4.2 蜂鸣器播放的音乐代码

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"

//蜂鸣器端口定义
sbit Buzzer=P2^5;

//播放速度,值为四分音符的时长(ms)
#define SPEED	500

//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#
#define P	0
#define L1	1
#define L1_	2
#define L2	3
#define L2_	4
#define L3	5
#define L4	6
#define L4_	7
#define L5	8
#define L5_	9
#define L6	10
#define L6_	11
#define L7	12
#define M1	13
#define M1_	14
#define M2	15
#define M2_	16
#define M3	17
#define M4	18
#define M4_	19
#define M5	20
#define M5_	21
#define M6	22
#define M6_	23
#define M7	24
#define H1	25
#define H1_	26
#define H2	27
#define H2_	28
#define H3	29
#define H4	30
#define H4_	31
#define H5	32
#define H5_	33
#define H6	34
#define H6_	35
#define H7	36

//索引与频率对照表
unsigned int FreqTable[]={
	0,
	63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
	64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
	65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};

// 乐谱
unsigned char code Music[]=
{
	/*这里是乐谱的内容*/
	P,4,
	P,4,
	P,4,
	P,4,
	0xff//结束
};

unsigned char FreqSelect,MusicSelect;

void main()
{ 
	Timer0Init();
	while(1)
	{
		if(Music[MusicSelect]!=0xFF)	//如果不是停止标志位
		{
			FreqSelect=Music_LHC[MusicSelect];	//选择音符对应的频率
			MusicSelect++;
			Delay_ms(SPEED/4*Music[MusicSelect]);	//选择音符对应的时值
			MusicSelect++;
			TR0=0;
			Delay_ms(5);	//音符间短暂停顿
			TR0=1;
		}
		else	//如果是停止标志位
		{
			TR0=0;
			while(1);
		}
	}
}

void Timer0_Routine() interrupt 1
{
	if(FreqTable[FreqSelect])	//如果不是休止符
	{
		/*取对应频率值的重装载值到定时器*/
		TL0 = FreqTable[FreqSelect]%256;		//设置定时初值
		TH0 = FreqTable[FreqSelect]/256;		//设置定时初值
		Buzzer=!Buzzer;	//翻转蜂鸣器IO口
	}
}

注意:

1:这里面注意Music这个数组变量就是上面对应的乐谱代码的变量。如果设备内存允许你可以将以上曲目全部放入内存,用按钮动态设置切换上面的曲目(上一曲、下一曲、暂停/继续)

2:SPEED可以根据实际情况调整快慢(甚至可以做成按钮去控制播放速度

五,代码编译、下载到51单片机

代码编译请参考

《51单片机STC89C52RC——代码编译-CSDN博客》

代码下载请参考

《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年湖南建筑安全员考试题库,精准题库。

31.安全考核的对象应包括施工企业各管理层的&#xff08;&#xff09;、相关职能部门及岗位和工程项目参建人员。 A.技术负责人 B.安全负责人 C.主要负责人 D.第一负责人 答案&#xff1a;C 32.安全防护设施应标准化、定型化、&#xff08;&#xff09;。 A.规范化 B.工…

TFMath Caculator:一个简单的Java AWT计算器

目录 背景&#xff1a; 代码展示: 代码解析: 输出结果: 总结: 背景&#xff1a; 使用Java AWT(Abstract Window Toolkit)库创建的简单计算器应用-TFMath Calculator。这个计算器允许用户输入两个数字&#xff0c;点击号按钮后&#xff0c;计算器会计算这两个数字的和&…

【Redis四】主从复制、哨兵以及Cluster集群

目录 一.主从复制、哨兵、集群的区别 二.Redis主从复制 1.作用 2.原理 3.流程 三.搭建Redis 主从复制 1.源码编译安装以及配置文件修改 1.1.修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.验证主从复制 2.1.在Master节点上看日志 2.2.在Master节点上…

混凝土搅拌站中的智能化系统应用

随着科技的飞速发展&#xff0c;混凝土搅拌站已经进入了现代化、智能化的新时代。现代自动化、智能化技术的应用&#xff0c;使得混凝土搅拌站更加高效、准确、可靠&#xff0c;同时也提高了生产效率和质量。本文将带你深入探索混凝土搅拌站中运用到现代自动化、智能化的方方面…

k8s架构设计思想

1.谷歌borg云计算管理平台 一类&#xff1a;infrastucture platform software 另一类&#xff1a;borg为主的非虚拟化技术&#xff0c;调度进程 核心是轻量级作业调度&#xff0c;不是做虚拟化/云平台的 borg本身用了一些容器技术 生产业务product workload要求高可用&#xf…

第三节:如何理解Spring的两个特性IOC和AOP(自学Spring boot 3.x第一天)

大家好&#xff0c;我是网创有方&#xff0c;接下来教大家如何理解Spring的两个特性IOC和AOP。本节有点难&#xff0c;大家多理解。 IOC&#xff08;控制反转&#xff09; 定义与核心思想&#xff1a; IOC&#xff0c;全称Inversion of Control&#xff0c;即控制反转。 其核…

为什么ISO 45001职业健康安全管理体系是企业发展的基石

ISO 45001源自OHSAS 18001职业健康和安全管理体系&#xff0c;是全球第一个国际职业健康和安全管理标准。ISO&#xff08;国际标准化组织&#xff09;于2018年发布了这一标准&#xff0c;旨在帮助各类组织为员工提供一个更安全、更健康的工作环境。与OHSAS 18001相比&#xff0…

云原生之使用Docker部署RabbitMQ消息中间件

云原生之使用Docker部署RabbitMQ消息中间件 一、RabbitMQ介绍1.1 RabbitMQ简介1.2 RabbitMQ特点1.3 RabbitMQ使用场景 二、检查Docker环境2.1 检查Docker版本2.2 检查操作系统版本2.3 检查Docker状态 三、下载RabbitMQ镜像四、部署RabbitMQ服务4.1创建挂载目录4.2 运行RabbitMQ…

LabVIEW在光学与光子学实验室中的应用

光学与光子学实验室致力于光学和光子学前沿领域的研究&#xff0c;涉及超快光学、非线性光学、光纤通信、光子晶体等多个方向。实验室需要高精度的实验控制和数据采集系统&#xff0c;以进行复杂的光学实验&#xff0c;并对实验数据进行实时处理和分析。 项目需求 实时控制与监…

C++再谈构造函数、隐式类型转换、static成员、友元函数、内部类等的介绍

目录 前言一、再谈构造函数1. 构造函数体赋值2. 初始化列表3. 初始化列表初始化顺序4. 初始化隐式类转换 二、static成员1. 概念2. 特性 三、 友元1. 友元函数2. 友元类 四、内部类总结 前言 C再谈构造函数、隐式类型转换、static成员、友元函数、内部类等的介绍 一、再谈构造…

imx6ull/linux应用编程学习(3) 输入设备应用编程(上)(按键)

0.概念 输入设备&#xff1a;可以产生输入事件的设备 Linux系统设计了一个兼容所有输入设备的框架&#xff0c;就是input子系统&#xff0c;其直接向应用层提供了一套统一的接口&#xff0c;其在/dev/input目录下。 流程&#xff1a;如果要读取输入设备&#xff0c;一般遵循以下…

Spring AOP实战--之优雅的统一打印web请求的出参和入参

背景介绍 由于实际项目内网开发&#xff0c;项目保密&#xff0c;因此本文以笔者自己搭建的demo做演示&#xff0c;方便大家理解。 在项目开发过程中&#xff0c;团队成员为了方便调试&#xff0c;经常会在方法的出口和入口处加上log输出&#xff0c;由于每个人的log需求和输…

IOS17闪退问题Assertion failure in void _UIGraphicsBeginImageContextWithOptions

最近项目更新到最新版本IOS17&#xff0c;发现一个以前的页面突然闪退了。原来是IOS17下&#xff0c;这个方法 UIGraphicsBeginImageContext(CGSize size) 已经被移除&#xff0c;原参数如果size为0的话&#xff0c;会出现闪退现象。 根据说明&#xff0c;上述方法已经被替换…

《UDS协议从入门到精通》系列——图解0x38:请求上传

《UDS协议从入门到精通》系列——图解0x38&#xff1a;请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip&#x1f4cc;&#xff1a;本文描述中但凡涉及到其他UDS服务的&#xff0c;将陆续提供链接跳转方式以便快…

MySQL数据库存储引擎

MySQL数据库存储引擎 存储引擎概念 存储引擎也称为表类型 通过不同的技术比如说&#xff0c;存储机制&#xff0c;索引技巧&#xff0c;锁定水平等等&#xff0c;来提供不同的功能。 查看MySQL支持的存储引擎 show engines\G&#xff1b; 常用引擎比较 对事务有需求 innodb …

蚂蚁- 定存

一&#xff1a;收益变动&&收益重算 1.1: 场景组合 1: 澳门元个人活期&#xff0c;日终余额大于0&#xff0c;当日首次、本周本月非首次系统结息&#xff0c;结息后FCDEPCORE_ASYN_CMD_JOB捞起进行收益计算 【depc_account_revenue_detail】收益日 > 【depc_accoun…

【Unity Linux】模型导致的Unity项目崩溃

模型需勾选Strip Bones。如不勾选&#xff0c;则开启项目崩溃。 也可以删除有问题模型的.meta文件。 &#xff08;Unity默认会自动勾选&#xff0c;所以不会崩溃&#xff09; 或打开.meta文件&#xff0c;将optimizeBones的值&#xff0c;由0改为1。&#xff08;对应面板上的…

实时智能全托管-云器Lakehouse重新定义多维数据分析

导读 本文将分享云器Lakehouse如何重新定义实时多维分析&#xff0c;帮助客户实现实时、智能、全托管的数据平台。主要内容包括以下几大部分&#xff1a; 多维数据分析的发展趋势和场景解析 技术解析&#xff1a;新一代数平台Lakehouse如何支持实时分析需求 价值解析&#x…

java 统计xmind的结点数(测试用例case数)

mac电脑解压出来的xmind的数据主要在content.json上 开头结尾有[],里面是json import org.json.JSONArray; import org.json.JSONObject; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public class XMindLeafCounter2 {public stat…

【观察】戴尔科技+AMD:释放技术创新“乘数效应”,助力制造业打造“新质生产力”...

在今年的政府工作报告中&#xff0c;“人工智能”首次被写入报告&#xff0c;同时“大力推进现代化产业体系建设&#xff0c;加快发展新质生产力”也被列为2024年的首项政府工作任务&#xff0c;其重要性不言而喻。 尤其是最近几年&#xff0c;以人工智能、大模型、大数据、云计…