主頁 >  其他 > STC學習:可同步顯示歌詞的ABC英文歌

STC學習:可同步顯示歌詞的ABC英文歌

2021-08-21 09:48:16 其他

程式設計目標及程式運行效果說明
程式設計目標:通過按下按鍵key1來控制音樂播放以及數碼管的歌詞顯示,
程式運行效果說明:按下按鍵key1,此時播放音樂《I can say ABC》并顯示歌詞;再次按下key1鍵可以暫停播放音樂,

程式相關電路及原理說明
1.原理說明
本實驗板采用的是無源蜂鳴器,相比與有源蜂鳴器,無源蜂鳴器的優點在于價格便宜,可以通過控制其振動頻率來改變發出的聲音,因此,無源蜂鳴器可以用于音樂的播放,而有源蜂鳴器的優點在于使用簡單,不需要撰寫“樂譜”,本實驗板使用的無源蜂鳴器是電磁式蜂鳴器,電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成,接通電源后,接收到的音頻信號電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發聲,

本程式中,陣列music[]即是要播放的音樂,格式為音符,節拍,音符,節拍,如此回圈下去,音符為要發出的音調,而節拍則是聲音的持續時間,如圖,在陣列music[]中,音符表示的格式為:十位代表是低八度,中八度還是高八度,1代表高八度,2代表中八度,3代表高八度,個位代表簡譜的音符,例如,0x15代表低八度的S0,如圖即是低5S0,0x21代表中八度的DO,如圖即是中1 D0,音符中,0x00代表結束符,表示整首歌曲演唱完畢,而0xff代表休止符,表示要休止100ms,遇到這兩種情況,都應該重新執行回圈中的第一步,其余情況則是正常播放,程式燒入單片機后,需要按下按鍵key1才會進行演奏,相比基礎篇則添加了歌詞數碼管同步顯示功能,

注:因使用數碼管顯示歌詞著實有些勉強,有些字母很難在數碼管上面顯示,如“M”等,這個實驗主要的學習重點在于歌詞的同步顯示和歌曲的數字編排(即由簡譜變成音樂代碼), ABC英文歌字母數碼管顯示對應符號表(A-Z)已另外做成檔案,請見檔案“ABC英文歌字母數碼管顯示對應符號表(A-Z)”,

2.程式相關電路
(1)無源蜂鳴器電路原理圖

(2)按鍵控制電路

芯片相關引腳:Beep——P3^4;

代碼如下:

#include "STC15F2K60S2.H"
#define uint unsigned int				  //宏定義
#define uchar unsigned char
sbit led_sel=P2^3;						 //數碼管與發光二極管選通引腳
sbit sel0=P2^0;							 //SEL0、SEL1、SEL2組合為位選資訊,0-7
sbit sel1=P2^1;
sbit sel2=P2^2;
sbit beep=P3^4;			 				 //蜂鳴器引腳
sbit key1=P3^2;						     //定義按鍵1
sbit key2=P3^3;							 //定義按鍵2
uchar timeh,timel;		  //定義定時器的重裝值
uchar flag;				  //所選擇點亮的數碼管0-7標志位	
bit zanting;		  	  //播放或暫圖示志位
uchar jindu=0;    	 	  //music陣列中指向的位置
uchar geci[]={0x77,0x7f,0x39,0x00,0x6f,0x7b};					 //顯示開機畫面的數碼管段碼 ABC ge
uchar geci1[]={0x77,0x7f,0x39,0x3f,0x79,0x71,0x3d,0x40};    	 //顯示A-G的數碼管段碼 ABCDEFG-
uchar geci2[]={0x76,0x06,0x1e,0xf6,0x38,0x4f,0x37,0x40};    	//顯示H-N的數碼管段碼  HIJKLMN-
uchar geci3[]={0x3f,0x73,0xbf,0x40,0xf7,0x6d,0x07,0x40};		//顯示O-T的數碼管段碼  OPQ-RST-
uchar geci4[]={0x62,0x3e,0xf9,0x40,0xf6,0xe6,0xdb,0x40};		//顯示U-Z的數碼管段碼  UVW-XYZ-
uchar geci5[]={0xf6,0xe6,0xdb,0x80,0x37,0x3f,0xf9,0x00}; 		 //XYZ,Now 	
uchar geci51[]={0xe6,0x3f,0x62,0x00,0x6d,0x79,0x79,0x00}; 	  	//you see
uchar geci6[]={0x0f,0x39,0x77,0x37,0x00,0x6d,0x77,0xe6}; 		 //I can say  
uchar geci61[]={0x77,0x7f,0x39,0x00,0x00,0x00,0x00,0x00};		 // ABC
uchar weixuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};		//位選碼
uchar code music[] ={    //音樂代碼,歌曲為《I can say ABC》,格式為: 音符, 節拍, 音符, 節拍,    
0x11,0x10,0x21,0x10,	 //音符的十位代表是低八度,中八度還是高八度,1代表低八度,2代表中八度,3代表高八度
0x25,0x10,0x25,0x10,	 //個位代表簡譜的音符,例如0x15代表低八度的S0,0x21代表中八度的DO,
0x26,0x10,0x26,0x10,	 //節拍則是代表音長,例如:0x10代表一拍,0x20代表兩拍,0x05代表1/2拍
0x25,0x10,0x25,0x10,  //16
0x24,0x10,0x14,0x10,
0x23,0x10,0x13,0x10,
0x22,0x10,0x22,0x10,
0x21,0x10,0x21,0x10,  //32
0x25,0x10,0x25,0x10,
0x24,0x10,0x24,0x20,
0x23,0x10,0x23,0x10,
0x22,0x10,0x22,0x10,  //48
0x25,0x10,0x25,0x10,
0x24,0x10,0x24,0x20,
0x23,0x10,0x23,0x10,  
0x22,0x10,0x22,0x10,  //64
0x21,0x10,0x21,0x10,
0x25,0x10,0x25,0x10,  //72
0x26,0x10,0x26,0x10,
0x25,0x10,0x25,0x10,  //80
0x24,0x10,0x24,0x10,
0x23,0x10,0x23,0x10,  //88
0x22,0x10,0x22,0x10,
0x21,0x10,0x21,0x20,  //96
0x00,0x00
};
uchar code quzi[] ={	  //此陣列資料為各個音符在定時器中的重裝值,第一列是高位,第二列是低位
0xf8,0x8c,	  //低八度,低1
0xf9,0x5b,	  
0xfa,0x15,	  //低3
0xfa,0x67,
0xfb,0x04,	  //低5
0xfb,0x90,
0xfc,0x0c,	  //低7	
0xfc,0x44,	  //中央C調
0xfc,0xac,	  //中2
0xfd,0x09,
0xfd,0x34,	  //中4
0xfd,0x82,					   
0xfd,0xc8,	  //中6
0xfe,0x06,
0xfe,0x22,	  //高八度,高1	
0xfe,0x56,
0xfe,0x6e,	  //高3
0xfe,0x9a,
0xfe,0xc1,	  //高5
0xfe,0xe4,
0xff,0x03	  //高7
};
void delay(unsigned int xms)
{
	uint i,j;						   
	 for(i=xms;i>0;i--)
	 	for(j=124;j>0;j--);
}
//功能描述:在quzi陣列中,找到music陣列定義的簡譜音符的重裝值,并回傳其在quzi陣列中的位置
//入口引數:tem:music陣列中定義的簡譜音符
//出口引數:回傳的是tem音符在quzi陣列中的位置值
uchar quyin(uchar tem)
{
	uchar qudiao,jp,weizhi;		  //定義曲調,音符和位置
	qudiao=tem/16;				  //高4位是曲調值
	jp=tem%16;					  //低4位是音符
	if(qudiao==1)				  //當曲調值為1時,即是低八度,低八度在quzi陣列中基址為0
		qudiao=0;
	else if(qudiao==2)			  //當曲調值為2時,即是中八度,中八度在quzi陣列中基址為14
		qudiao=14;
	else if(qudiao==3)			  //當曲調值為3時,即是高八度,高八度在quzi陣列中,基址為28
		qudiao=28;
	weizhi=qudiao+(jp-1)*2;		  //通過基址加上音符作為偏移量,即可定位此音符在quzi陣列中的位置
	return weizhi;				  //回傳這一個位置值
}
void playmusic()//播放音樂
{
	uchar p,m,tem;   //m為節拍   
	while(1)   
	{   
		if(zanting==1)			//播放或暫停控制
		{
			p=music[jindu];
			if(p==0x00)			//如果碰到結束符,延時1秒,回到開始再來一遍 
			{
				jindu=0;
				delay(1000);
				break;
			}        
			else if(p==0xff)   //若碰到休止符,延時100ms,繼續取下一音符
			{
				jindu++;			
				delay(100);
				TR0=0;			//關定時器0
				break;
			}      
			else			   //正常情況下取音符和節拍 
			{
				tem=quyin(music[jindu]);		//取出當前音符在quzi陣列中的位置值
				timeh=quzi[tem];			//把音符相應的計時器重裝載值賦予timeh和timel
				timel=quzi[tem+1];
				jindu++;
				TH0=timeh;					//把timeh和timel賦予計時器
				TL0=timel;
				m=music[jindu];					 //取得節拍
				jindu++;
			}  		   
	        TR0=1;                    //開定時器0    
			delay(m*180);             //等待節拍完成, 通過P3^4口輸出音頻    
			TR0=0;                    //關定時器0   
			beep=0;	 					 //將beep置0,以保護蜂鳴器		
		  }
	}
}
//系統初始化,功能是配置IO口
void init_sys()
{
	P0M0=0xff;			 		//設定推挽模式
	P0M1=0x00;
	P2M0=0x08;
	P2M1=0x00;
	P3M0=0x10;
	P3M1=0x00;
}
//定時器初始化
void init()						  
{
	TMOD=0x01;					 //設定定時器0,作業方式1,16位手動重裝初值;設定定時器1,作業方式0,16位自動重裝初值
	TH0=0xD8;					 //設定定時器0初值
	TL0=0xEF;
	TH1=(65536-1000)/256;		 //設定定時器1初值
	TL1=(65536-1000)%256;
	EA=1;						 //打開總中斷
	ET0=1;						 //打開定時器0中斷
	ET1=1;						 //打開定時器1中斷
	TR0=0;						 //定時器0暫時不啟動
	TR1=1;						 //啟動定時器1	
	EX0=1;						 //啟動外部中斷0						 
	zanting=0;					 //播放或暫圖示志位賦初值
	beep=0;	 					 //將beep置0,以保護蜂鳴器
}
void main()
{
	init_sys();							  //系統初始化
	init();
	P0=0x00;							  
	key1=1;
	flag=0;
	while(1)
		playmusic();			 //進入播放音樂函式
}
//定時器0中斷處理,重新裝值,并把beep值取反,產生方波
void tim1()interrupt 1						//計時器控制頻率
{
	TH0=timeh;								//中斷后重賦初值
	TL0=timel;
	beep=~beep;							//中斷beep翻轉產生方波,使得蜂鳴器發聲
}
//按下按鍵1的外部中斷,對標志位取反,功能是暫停和播放音樂
void exint0()interrupt 0
{
	if(key1==0)
	{		
		delay(10);
		if(key1==0)
			zanting=~zanting;
	}
}				
//定時器1中斷處理,用作數碼管顯示歌詞,
void timer1()interrupt 3				   //把顯示程式提到定時器1中斷服務程式
{
	flag++;
	if(flag==8)
		flag=0;
	P0=0;
	P2=weixuan[flag];
	if(jindu==0)						 //通過判斷播放時的jindu進而控制此時的歌詞顯示
	{									 //此時為零時,顯示“ABC ge”
		switch(flag)
		{
			case 0:P0=geci[0];break;
			case 1:P0=geci[1];break;
			case 2:P0=geci[2];break;
			case 4:P0=geci[4];break;
			case 5:P0=geci[5];break;
			default:P0=geci[3];break;
		}
	}
	else if(jindu<16)
	{					 //此時進度為0-15之間,顯示“ABCDEFG-”
	   switch(flag)
	   {
		   case 0:P0=geci1[0];break;
	       case 1:P0=geci1[1];break;
		   case 2:P0=geci1[2];break;
		   case 3:P0=geci1[3];break;
		   case 4:P0=geci1[4];break;
		   case 5:P0=geci1[5];break;
		   case 6:P0=geci1[6];break;
		   default:P0=geci1[7];break;
	   }
	}
	else if(jindu<32)
	{					  //此時進度為16-31之間,顯示“HIJKLMN-”
	   switch(flag)
	   {
		   case 0:P0=geci2[0];break; 
	       case 1:P0=geci2[1];break; 
		   case 2:P0=geci2[2];break; 
		   case 3:P0=geci2[3];break; 
		   case 4:P0=geci2[4];break; 
		   case 5:P0=geci2[5];break; 
		   case 6:P0=geci2[6];break; 
		   default:P0=geci2[7];break; 
	   }
	}
	else if(jindu<48)
	{					  //此時進度為32-47之間,顯示“OPQ- RST-”
	   switch(flag)
	   {
		   case 0:P0=geci3[0];break; 
	       case 1:P0=geci3[1];break; 
		   case 2:P0=geci3[2];break;
		   case 3:P0=geci3[3];break;
		   case 4:P0=geci3[4];break;
		   case 5:P0=geci3[5];break;
		   case 6:P0=geci3[6];break;
		   default:P0=geci3[7];break;
	   }
	}
	else if(jindu<64)
	{					  //此時進度為48-63之間,顯示“UVW- XYZ-”
	   switch(flag)
	   {
		   case 0:P0=geci4[0];break; 
	       case 1:P0=geci4[1];break; 
		   case 2:P0=geci4[2];break; 
		   case 3:P0=geci4[3];break; 
		   case 4:P0=geci4[4];break; 
		   case 5:P0=geci4[5];break; 
		   case 6:P0=geci4[6];break; 
		   default:P0=geci4[7];break; 
	   }
	}
	else if(jindu<72)
	{					 //此時進度為64-71之間,顯示“XYZ- NOW”
	   switch(flag)
	   {
		   case 0:P0=geci5[0];break;
	       case 1:P0=geci5[1];break;
		   case 2:P0=geci5[2];break;
		   case 3:P0=geci5[3];break;
		   case 4:P0=geci5[4];break;
		   case 5:P0=geci5[5];break;
		   case 6:P0=geci5[6];break;
		   default:P0=geci5[7];break;
	   }
	}
	else if(jindu<80)
	{					//此時進度為72-79之間,顯示“YOU SEE ”
	   switch(flag)
	   {
		   case 0:P0=geci51[0];break; 
	       case 1:P0=geci51[1];break; 
		   case 2:P0=geci51[2];break; 
		   case 3:P0=geci51[3];break; 
		   case 4:P0=geci51[4];break; 
		   case 5:P0=geci51[5];break; 
		   case 6:P0=geci51[6];break; 
		   default:P0=geci51[7];break; 
	   }
	}
	else if(jindu<88)
	{					//此時進度為80-87之間,顯示“ICAN SAY”
	   switch(flag)
	   {
		   case 0:P0=geci6[0];break;
	       case 1:P0=geci6[1];break;
		   case 2:P0=geci6[2];break;
		   case 3:P0=geci6[3];break;
		   case 4:P0=geci6[4];break;
		   case 5:P0=geci6[5];break;
		   case 6:P0=geci6[6];break;
		   default:P0=geci6[7];break;
	   }
	}
	else if(jindu<96)
	{					//此時進度為88-95之間,顯示“ABC”
	   switch(flag)
	   {
		   case 0:P0=geci61[0];break; 
	       case 1:P0=geci61[1];break; 
		   case 2:P0=geci61[2];break; 
		   case 3:P0=geci61[3];break; 
		   case 4:P0=geci61[4];break; 
		   case 5:P0=geci61[5];break; 
		   case 6:P0=geci61[6];break; 
		   default:P0=geci61[7];break; 
	   }
	}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295264.html

標籤:其他

上一篇:STM32HAL庫 (cubemx) 兩個HC05藍牙模塊相互通信相關問題的解決 陣列串口發送與接受的方法

下一篇:MQTT——使用MQTT.fx工具接入阿里云物聯網平臺,實作基本通信調測

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more