久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于STM32戰(zhàn)艦版的音樂頻譜源碼
[打印本頁]
作者:
上交上呈
時(shí)間:
2017-12-29 21:10
標(biāo)題:
基于STM32戰(zhàn)艦版的音樂頻譜源碼
基于stm32F1音樂頻譜
單片機(jī)源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "adc.h"
#include "stm32_dsp.h"
#include <math.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define DOUBLE_COLOR 1 //是否為雙色屏,若為雙色屏則改為1
#define NPT 64 //FFT采樣點(diǎn)數(shù)
#define GREEN_STOP_TIME 15 //綠色點(diǎn)頂端停頓時(shí)間,值越大時(shí)間越長(zhǎng)
#define GREEN_SUB_SPEED 100 //綠色點(diǎn)下移速度,值越大速度越慢
#define RED_SUB_SPEED 50 //紅色頻柱向下縮短速度,值越大速度越慢
uint32_t ADC_DataNum=0; //ADC采樣點(diǎn)數(shù)
uint32_t RedTime=0; //紅色點(diǎn)下移時(shí)間變量
#if DOUBLE_COLOR
uint32_t GreenTime=0; //綠色點(diǎn)下移時(shí)間變量
uint32_t GreenStopTime[32]={0}; //綠色點(diǎn)頂端停頓時(shí)間數(shù)據(jù)
#endif
volatile uint8_t ADC_TimeOutFlag=1; //ADC定時(shí)采樣時(shí)間到標(biāo)志
extern __IO uint16_t ADCConvertedValue; //ADC采樣值
extern int LCD_COLOR;
long lBUFMAG[NPT+NPT/2]; //存儲(chǔ)求模后的數(shù)據(jù)
long lBUFOUT[NPT];//FFT輸出序列
long lBUFIN[NPT];//FFT輸入系列
uint8_t fftHightRedBuf[NPT/2]={0}; //紅色頻柱高度數(shù)組
uint8_t DisplayRedDataBuf[32*8]={0}; //紅色顯示緩沖區(qū)
#if DOUBLE_COLOR
uint8_t fftHightGreenBuf[NPT/2]={0}; //綠色頻點(diǎn)高度數(shù)組
uint8_t DisplayGreenDataBuf[32*8]={0}; //綠色顯示緩沖區(qū)
#endif
u16 color_tab[16]={DARKBLUE,BLUE,LIGHTBLUE,GREEN,LIGHTGREEN,RED,BRED,BRRED,BLACK,YELLOW,CYAN,MAGENTA,GRAYBLUE,LGRAYBLUE,BROWN,LGRAY};
void music_fft_main(uint8_t *RedNewHeight,uint8_t *GreenNewHeight)
{
int BarWidth = 8;
int i=0;
int j=0;
static uint8_t RedOldHeight[32] = {0};
static uint8_t GreenOldHeight[32] = {0};
for(i=0;i<32;i++)
{
//清除之前的綠色方塊
//LCD_COLOR = LCD_COLOR_BLACK;
LCD_Fill(GreenOldHeight[i],(BarWidth+2)*i,GreenOldHeight[i]+3,(BarWidth+2)*i+BarWidth,WHITE);
//顯示當(dāng)前的綠色方塊
LCD_Fill(GreenNewHeight[i],(BarWidth+2)*i,GreenNewHeight[i]+3,(BarWidth+2)*i+BarWidth,color_tab[16-j]);
//顯示紅色柱
if(RedNewHeight[i]>RedOldHeight[i]){//如果當(dāng)前的綠色柱子高度比之前的大則補(bǔ)齊綠色柱子
LCD_Fill(RedOldHeight[i],(BarWidth+2)*i,RedNewHeight[i],(BarWidth+2)*i+BarWidth,color_tab[j]);
}else{//如果當(dāng)前顯示的綠色柱子高度小于之前的柱子則需要將多余的綠色柱子用背景色填充
LCD_Fill(RedNewHeight[i],(BarWidth+2)*i,RedOldHeight[i],(BarWidth+2)*i+BarWidth,WHITE);
}
//將新數(shù)據(jù)保存
RedOldHeight[i] = RedNewHeight[i];
GreenOldHeight[i] = GreenNewHeight[i];
if(j>=15)
j=0;
j++;
}
}
void powerMag(long nfill)
{ int32_t lX,lY;
uint32_t i;
for (i=0; i < nfill; i++)
{
lX= (lBUFOUT[i]<<16)>>16; /* sine_cosine --> cos */
lY= (lBUFOUT[i] >> 16); /* sine_cosine --> sin */
{
float X= 64*((float)lX)/32768;
float Y = 64*((float)lY)/32768;
float Mag = sqrt(X*X+ Y*Y)/nfill; // 先平方和,再開方
lBUFMAG[i] = (long)(Mag*65536);
}
}
}
int main(void)
{uint32_t i=0;
delay_init(); //延時(shí)函數(shù)初始化
NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
uart_init(9600); //串口初始化為9600
LED_Init(); //LED端口初始化
TIM2_Configuration();
TIM2_NVIC_Configuration();
FFT_RCC_Configuration();
FFT_GPIO_Configuration();
FFT_DMA_Init();
FFT_ADC_Init();
LCD_Init();
// BACK_COLOR=BLACK;
TIM_Cmd(TIM2, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, DISABLE);
while(1)
{
if(ADC_TimeOutFlag){
#if DOUBLE_COLOR
GreenTime++;
#endif
RedTime++;
ADC_TimeOutFlag=0;
if(ADC_DataNum<NPT){//采樣點(diǎn)沒有達(dá)到所要求的點(diǎn)
// ADC1->CR2 |= 0x00500000;//
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));
/* Clear channel1 transfer complete flag */
DMA_ClearFlag(DMA1_FLAG_TC1);
// ADC1->CR2 &= 0xFFAFFFFF;//
ADC_SoftwareStartConvCmd(ADC1, DISABLE);
lBUFIN[ADC_DataNum]=ADCConvertedValue<<16;
ADC_DataNum++;
}else{
TIM_Cmd(TIM2, DISABLE);
ADC_DataNum=0;
cr4_fft_64_stm32(lBUFOUT,lBUFIN,NPT);//調(diào)用STM32的DSP庫作FFT變換
powerMag(NPT);//計(jì)算頻點(diǎn)幅值
//更新紅色點(diǎn)的高度
for(i=0;i<NPT/2;i++){
if((uint8_t)(lBUFMAG[i])>fftHightRedBuf[i]){
fftHightRedBuf[i]=(lBUFMAG[i]);
}
#if DOUBLE_COLOR
//刷新綠色點(diǎn)高度
if(fftHightRedBuf[i]>=fftHightGreenBuf[i]){
fftHightGreenBuf[i]=fftHightRedBuf[i];
GreenStopTime[i]=GREEN_STOP_TIME;//綠點(diǎn)停頓時(shí)間
if(fftHightRedBuf[i]>=235){
fftHightGreenBuf[i]=235;
fftHightRedBuf[i]=235;
}
}
#else
if(fftHightRedBuf[i]>=239){
fftHightRedBuf[i]=239;
}
#endif
}
//顯示紅色柱子
music_fft_main(fftHightRedBuf,fftHightGreenBuf);
//顯示綠色點(diǎn)
#if DOUBLE_COLOR
//綠色點(diǎn)下移
if((GreenTime>GREEN_SUB_SPEED)){ //綠色點(diǎn)下降間隔時(shí)間
GreenTime=0;
for(i=0;i<NPT/2;i++){
if((fftHightGreenBuf[i]!=0)&&(GreenStopTime[i]==0)){
fftHightGreenBuf[i]--;
}
}
}
#endif
//紅色下移
if(RedTime>RED_SUB_SPEED){
RedTime=0;
for(i=0;i<NPT/2;i++){
if((fftHightRedBuf[i]!=0)){
fftHightRedBuf[i]--;
}
}
}
//綠色點(diǎn)停頓時(shí)間減一
#if DOUBLE_COLOR
for(i=0;i<NPT/2;i++){
if(GreenStopTime[i]!=0){
GreenStopTime[i]--;
}
}
#endif
TIM_Cmd(TIM2, ENABLE);
}
}
}
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){
// TIM2->SR = (uint16_t)~TIM_FLAG_Update;
TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); //清中斷
ADC_TimeOutFlag=1;
}
}
復(fù)制代碼
所有資料51hei提供下載:
基于STM32戰(zhàn)艦版的音樂頻譜.zip
(3.64 MB, 下載次數(shù): 255)
2017-12-29 21:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhaowenmin
時(shí)間:
2018-1-21 18:05
厲害,學(xué)學(xué)
作者:
guojing002
時(shí)間:
2018-2-12 15:55
zhaowenmin 發(fā)表于 2018-1-21 18:05
厲害,學(xué)學(xué)
正好需要,先留個(gè)爪
作者:
mslos
時(shí)間:
2018-2-26 17:36
正好需要,給朋友做個(gè)用心的禮物
作者:
1243449743
時(shí)間:
2018-4-25 20:58
需不需要外接其他的設(shè)備?
作者:
1030417862
時(shí)間:
2018-4-26 10:39
厲害了
作者:
aruisi
時(shí)間:
2018-8-6 09:06
厲害,學(xué)習(xí)學(xué)習(xí)
作者:
woxinhengda
時(shí)間:
2018-10-9 21:43
感謝分享 學(xué)習(xí)學(xué)習(xí)
作者:
uccms
時(shí)間:
2018-11-16 08:31
很好,很強(qiáng)大
作者:
txm123
時(shí)間:
2019-4-3 20:18
厲害了,巨佬
作者:
txm123
時(shí)間:
2019-4-11 21:46
樓主用的是STM32F103ZE麼
作者:
WILLovo
時(shí)間:
2019-12-2 17:54
感謝分享,學(xué)習(xí)
作者:
373996214
時(shí)間:
2020-5-5 23:10
感謝分享,學(xué)習(xí)
作者:
灰太狼2020
時(shí)間:
2020-12-25 14:13
非常好的資料 文件里怎么沒有原理圖啊
作者:
qq970068407
時(shí)間:
2021-4-28 23:04
拿走研究一下
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩在线观看
|
91亚洲精选
|
97av视频
|
国产ts在线
|
免费三级网站
|
欧美丰满少妇
|
手机av在线免费观看
|
久久精品区
|
国产精品一区一区三区
|
久久久天堂国产精品女人
|
欧美日韩成人在线观看
|
精产国产伦理一二三区
|
夜夜肉她怀孕h周君彦
|
国产黄在线观看
|
国模无码大尺度一区二区三区
|
欧美精品一级片
|
免费在线播放av
|
影音先锋在线观看视频
|
五月综合色
|
亚洲人在线
|
一级片在线免费观看
|
日本免费网站
|
国产日韩在线播放
|
极品在线视频
|
免费视频国产
|
在线观看日韩视频
|
av手机天堂网
|
91福利在线观看
|
一区二区国产精品
|
大桥未久在线视频
|
黄色大片在线播放
|
久草手机在线视频
|
精品国产三级
|
日韩在线资源
|
天堂网av在线
|
成人免费视频网站在线观看
|
黄色在线小视频
|
天堂av中文在线
|
国产一级网站
|
国产欧美在线观看
|
国产一级生活片
|