基于单片机的音频频谱显示器设计

合集下载

基于51单片机的LED点阵音乐频谱显示器

基于51单片机的LED点阵音乐频谱显示器

基于51单片机的LED点阵音乐频谱显示器李逸家【期刊名称】《工业控制计算机》【年(卷),期】2015(0)4【摘要】This design by using singIe-chip microcomputer and digitaI signaI processing techniques to achieve musicaI spectrum dispIay system based on MCU.The system is divided into:the voice sampIing unit,sound processing unit and the LED dot matrix dispIay consisting of ceI s.Voice capture moduIe in SCM resources incIude sound reception and a/d conversion sys-tems.Voice receiving unit receives the audio anaIogue signaI,after the a/d converted to a digitaI signaI,to the next IeveI of processing units,sound processing unit STC12C5A60S2 microcontroI er FFT processing.%通过使用单片机原理,利用数字信号理论,使音乐频谱分析在单片机上的实现。

系统包括:声音接收模块,声音转换模块和LED组成的点阵显示单元。

其中声音采集模块,是利用STC12C5A60S2单片机中的声音采集和A/D转换。

音频的模拟信号通过声音采集模块接收到,经过A/D转换系统,转换为数字信号,送给下一级处理单元处理。

声音转换模块利用STC12C5A60S2单片机内部的资源,进行FFT处理。

基于STC8A4K60S2A12单片机的音乐频谱仪的设计

基于STC8A4K60S2A12单片机的音乐频谱仪的设计

基于STC8A4K60S2A12单片机的音乐频谱仪的设计作者:王启明郭宁峰周艳艳来源:《电脑知识与技术》2019年第27期摘要:通过对音乐频谱仪原理的研究,利用STC8A4K60S2A12单片机控制技术、离散傅里叶变换快速算法,通过单片机内置的ADC采集音频信号,并将采集到的音频信号转换成数字信号。

设计并实现一个音乐频谱仪,通过LED点阵将音乐频谱显示出来。

关键词:单片机;傅里叶变换;LED点阵中图分类号:TP393; ; ; ; 文献标识码:A文章编号:1009-3044(2019)27-0211-02时代在不断发展,生活水平在不断提高,人们在解决基本生活所需的同时,也更加注重对生活品质的追求,音乐频谱仪就是在这种追求之下的产物。

它促进了音乐的可视化,把原本只能“听”的音乐,变得能够“看”到,使音乐在给人听觉享受的同时,也带来视觉上的享受;帮助录音师对录制的音频进行加工处理,使音频变得更加丰富,有层次感。

更广泛的,是它在家庭影院、卡拉OK等音响系统中,实时显示音乐信号的频谱将为音响系统增添不少色彩。

本文设计并实现一个基于STC8A4K60S2A12单片机的音乐频谱系统,具有电路结构简单、易开发、生产成本低等特点。

能够较好地满足人们在生活中的需求。

1 系统的基本结构本系统以STC8A4K60S2A12单片机为控制核心,利用其内部集成的一个12位15通道的高速ADC转换器收集来自外界的音频信号,并将音频信号(电信号)转化为数字信号。

通过快速傅里叶变换(FFT)对离散后的数字信号进行处理和运算。

FFT计算出频谱值以后,由LED频谱显示电路负责在单片机的控制下把频谱直观地显示出来。

此外,本系统还包括按键控制的开关和开始动画等其他功能。

2 硬件设计2.1复位电路复位电路用来将中央处理器及其他功能模块同时恢复到一个确切的初始状态,以备下次运行时从该初始状态重新开始。

复位方式有手动按钮复位、上电复位、积分型上电复位、看门狗型复位电路等。

用51单片机实现电脑音频信号的频谱显示(在LCD上显示)

用51单片机实现电脑音频信号的频谱显示(在LCD上显示)

如何用51单片机实现音频信号的频谱显示(在LCD上显示)思路:外来音频信号经过51单片机,在单片机中进行频谱分析,并将结果显示在LCD(12864或1602)上要求:频谱显示如同千千静听播放音乐时的频谱显示希望各位高手能给出详细的解决方案,感激。

51做FFT有些困难,可以使用增强型(RAM)的51机子进行参考程序:#include<STC12C5A.H>#define uchar unsigned char#define uint unsigned int#define channel 0x01 //设置AD通道为 P1.1//---------------------------------------------------------------------sbit SDA_R=P1^2;sbit SDA_R_TOP=P1^3;sbit SDA_G=P1^4;sbit SDA_G_TOP=P1^5;sbit STCP=P1^6;sbit SHCP=P1^7;//---------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------------------//放大128倍后的sin整数表(128)code char SIN_TAB[128] = { 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 59, 65, 70, 75, 80, 85, 89, 94, 98, 102,105, 108, 112, 114, 117, 119, 121, 123, 124, 125, 126, 126, 126, 126, 126, 125, 124, 123, 121, 119, 117, 114, 112,108, 105, 102, 98, 94, 89, 85, 80, 75, 70, 65, 59, 54, 48, 42, 36, 30, 24, 18, 12, 6, 0, -6, -12, -18, -24, -30,-36, -42, -48, -54, -59, -65, -70, -75, -80, -85, -89, -94, -98, -102, -105, -108, -112, -114, -117, -119, -121,-123, -124, -125, -126, -126, -126, -126, -126, -125, -124, -123, -121, -119, -117, -114, -112, -108, -105, -102,-98, -94, -89, -85, -80, -75, -70, -65, -59, -54, -48, -42, -36, -30, -24, -18, -12, -6 };//放大128倍后的cos整数表(128)code char COS_TAB[128] = { 127, 126, 126, 125, 124, 123, 121, 119, 117, 114, 112, 108, 105, 102, 98, 94,89, 85, 80, 75, 70, 65, 59, 54, 48, 42, 36, 30, 24, 18, 12, 6, 0, -6, -12, -18, -24, -30, -36, -42, -48, -54, -59,-65, -70, -75, -80, -85, -89, -94, -98, -102, -105, -108, -112, -114, -117, -119, -121, -123, -124, -125, -126, -126, -126, -126, -126, -125, -124, -123, -121, -119, -117, -114, -112, -108, -105, -102, -98, -94, -89, -85, -80,-75, -70, -65, -59, -54, -48, -42, -36, -30, -24, -18, -12, -6, 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 59, 65, 70,75, 80, 85, 89, 94, 98, 102, 105, 108, 112, 114, 117, 119, 121, 123, 124, 125, 126, 126 };//采样存储序列表code char LIST_TAB[128] = { 0, 64, 32, 96, 16, 80, 48, 112,8, 72, 40, 104, 24, 88, 56, 120,4, 68, 36, 100, 20, 84, 52, 116,12, 76, 44, 108, 28, 92, 60, 124,2, 66, 34, 98, 18, 82, 50, 114,10, 74, 42, 106, 26, 90, 58, 122,6, 70, 38, 102, 22, 86, 54, 118,14, 78, 46, 110, 30, 94, 62, 126,1, 65, 33, 97, 17, 81, 49, 113,9, 73, 41, 105, 25, 89, 57, 121,5, 69, 37, 101, 21, 85, 53, 117,13, 77, 45, 109, 29, 93, 61, 125,3, 67, 35, 99, 19, 83, 51, 115,11, 75, 43, 107, 27, 91, 59, 123,7, 71, 39, 103, 23, 87, 55, 119,15, 79, 47, 111, 31, 95, 63, 127};uchar COUNT=0,COUNT1=0,ADC_Count=0,LINE=15,G,T;uchar i,j,k,b,p;int Temp_Real,Temp_Imag,temp; // 中间临时变量uint TEMP1;int xdata Fft_Real[128];int xdata Fft_Image[128]; // fft的虚部uchar xdata LED_TAB2[64]; //记录漂浮物是否需要停顿一下uchar xdata LED_TAB[64]; //记录红色柱状uchar xdata LED_TAB1[64]; //记录漂浮点void Delay(uint a){while(a--);}void FFT(){ //uchar X;for( i=1; i<=7; i++) /* for(1) */{b=1;b <<=(i-1); //碟式运算,用于计算隔多少行计算例如第一极 1和2行计算,,第二级for( j=0; j<=b-1; j++) /* for (2) */{p=1;p <<= (7-i);p = p*j;for( k=j; k<128; k=k+2*b) /* for (3) 基二fft */{Temp_Real = Fft_Real[k]; Temp_Imag = Fft_Image[k]; temp = Fft_Real[k+b];Fft_Real[k] = Fft_Real[k] +((Fft_Real[k+b]*COS_TAB[p])>>7) + ((Fft_Image[k+b]*SIN_TAB[p])>>7);Fft_Image[k] = Fft_Image[k] -((Fft_Real[k+b]*SIN_TAB[p])>>7) + ((Fft_Image[k+b]*COS_TAB[p])>>7);Fft_Real[k+b] = Temp_Real -((Fft_Real[k+b]*COS_TAB[p])>>7) - ((Fft_Image[k+b]*SIN_TAB[p])>>7);Fft_Image[k+b] = Temp_Imag + ((temp*SIN_TAB[p])>>7) - ((Fft_Image[k+b]*COS_TAB[p])>>7);// 移位.防止溢出. 结果已经是本值的 1/64Fft_Real[k] >>= 1;Fft_Image[k] >>= 1;Fft_Real[k+b] >>= 1;Fft_Image[k+b] >>= 1;}}}// X=((((Fft_Real[1]*Fft_Real[1]))+((Fft_Image[1]*Fft_Image[1])))>>7);Fft_Real[0]=Fft_Image[0]=0; //去掉直流分量// Fft_Real[63]=Fft_Image[63]=0;for(j=0;j<64;j++){TEMP1=((((Fft_Real[j]*Fft_Real[j]))+((Fft_Image[j]*Fft_Image[j])))>>1);//求功率if(TEMP1>1)TEMP1--;else TEMP1=0;if(TEMP1>31)TEMP1=31;if(TEMP1>(LED_TAB[j]))LED_TAB[j]=TEMP1;if(TEMP1>(LED_TAB1[j])){ LED_TAB1[j]=TEMP1;LED_TAB2[j]=18; //提顿速度=12}}}void Init(){//-----------------------------------------------------------------------------------P1ASF = 0x02; //0000,0010, 将 P1.1 置成模拟口AUXR1 &=0xFB; //1111,1011, 令 ADRJ=0EADC=1; //AD中断打开ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ADC_START | channel;//1110 1001 1打开 A/D (ADC_POWER)转换电源;11速度为70周期一次;//0中断标志清零;1启动adc(ADC_START);001AD通道打开(这里为P1.1);//-----------------------------------------------------------------------------------P2M0=1;P0M0=1;TMOD=0X12;TH0=0x30; //大约20K的采样率(要完整频段需40K以上。

基于单片机的音频频谱显示器的研究与开发

基于单片机的音频频谱显示器的研究与开发

1
音频信号,这个音频信号再经功放模块由扬声器驱动播放音乐。

同时,音频信号又作为输入信号接到另外一个单片机系统,此单片机系统主要是完成音频信号的模数转换,并由内部软件通过快速傅里叶算法,实现音频信号在频域上的分析,最后量化输出,由LED点阵显示出频谱变化。

三、研究指向内容与过程
(一)研究指向
1. 降低设计、制作以及成品的成本;
2. 提高音频频谱与音乐的匹配度;
3. 开发电子产品专业课程的实训资源,使实训资源与生活相结合,便于电子专业学生的
学习与研究。

(二)研究内容
1、硬件设计
单片机我们选用STC12C5A60S2。

STC 公司的单片机不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,其中STC12C5A60S2单片机内部就自带高达60K FLASHROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。

而且STC 系列单片机支持串口程序烧写。

本设计系统由单片机模块、音频采集模块、滤波模块、按键模块、功放模块和显示模块六部分组成,如图1所示。

图1 音频频谱显示器的系统结构图
硬件电路图如图2所示,使用音频采集模块对输入的音频信号进行采样,经过FFT变换,然后取某些频率项的幅值,量化显示,驱动LED点阵,点亮相应的LED灯,其中显示模块即LED频谱显示电路。

图2左上方是滤波模块以及功放模块的设计,左下方是单片机模块的电路设计,右侧是LED频谱显示电路的设计。

其中,音频功放芯片选用8002,它是两个OTL电路桥式连接为BTL工作方式的音频功放。

2
3。

手把手教你用51单片机DIY音乐频谱显示器

手把手教你用51单片机DIY音乐频谱显示器

手把手教你用51单片机DIY音乐频谱显示器说起。

我们知道,一切声音都是由振动产生的。

声音之所以千变万化各不相同,是因为它们的振动各不相同。

看看琵琶,吉他或者其他的弦类乐器,可以发现它的每一根琴弦的直径都是不一样的。

琴弦越细,音调也就越高。

反之则越低。

显然粗的弦就不如细的弦振动得快或者说是振动的频率高。

产生音调高低的不同,就是由于振动的频率不同。

很显然频率越高,音高也就越高。

频率的单位是赫兹(简写为Hz),赫兹(1857-1894),是德国物理学家,他发现了电磁波,为了纪念他,人们用它的名字来做为频率的单位。

所谓的一赫兹,就是一秒钟振动一次。

那么440Hz 呢,当然就是每秒振动440 次,这个声音就是音乐中的标准A 音,是乐器定音的标准。

而钢琴中央C 的频率则是261.63Hz。

我们人的耳朵能够听到的频率范围,是20Hz 到20000Hz。

低于这个频率范围的声音叫次声波,而高于这个频率范围的声音叫做超声波。

所以我们能听到的音乐的频率,即都在人耳可听到的这个范围之内,约从20Hz 到20KHz。

比如,下面的表格中是我们常见的一些人声的基频范围男低音80-320Hz男中音96-387Hz男高音122-488Hz女低音145-580Hz女高音259-1034Hz根据傅立叶分析,任何声音可以分解为数个甚至无限个正弦波,而它们往往又包含有无数多的谐波分量。

而它们又往往是时刻在变化着。

所以一个声音的构成其实是很复杂的。

将声音的频率分量绘制成曲线,就形成了频谱。

对频谱进行分析的仪器就是频谱分析仪,早期频谱仪都是模拟分析的。

tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

基于单片机的音频频谱程序

基于单片机的音频频谱程序

此程序用的单片机是ATMEGA16L单片机#include "avr/io.h"#include "util/delay.h"#include "avr/interrupt.h"#include "FFT1.h"#define uchar unsigned char#define uint unsigned int#define RED1_H PORTB|=(1<<PB0)#define RED1_L PORTB&=~(1<<PB0) //上屏红#define GREEN1_H PORTB|=(1<<PB1)#define GREEN1_L PORTB&=~(1<<PB1) //上屏绿#define GREEN2_H PORTB|=(1<<PB2)#define GREEN2_L PORTB&=~(1<<PB2) //下屏绿#define RED2_H PORTB|=(1<<PB3)#define RED2_L PORTB&=~(1<<PB3) //下屏红#define SCL1_H PORTB|=(1<<PB4)#define SCL1_L PORTB&=~(1<<PB4) //#define RCL1_H PORTB|=(1<<PB5)#define RCL1_L PORTB&=~(1<<PB5) // 上屏595SCL和RCL #define RCL2_H PORTB|=(1<<PB6)#define RCL2_L PORTB&=~(1<<PB6) //#define SCL2_H PORTB|=(1<<PB7)#define SCL2_L PORTB&=~(1<<PB7) //下屏595scl和rcl#define E_H PORTD|=(1<<PD3)#define E_L PORTD&=~(1<<PD3) //#define SDA_H PORTD|=(1<<PD4)#define SDA_L PORTD&=~(1<<PD4) //#define CK_H PORTD|=(1<<PD5)#define CK_L PORTD&=~(1<<PD5) //行控制信号uchar adc_count;uchar count,count1=0;/********************初始化行*********************/void init_line (void){uchar i=0;for (i=0;i<16;i++){SDA_L;CK_L;_delay_us(8);//8个nopCK_H; //上升沿有效_delay_us(10);//10个nopCK_L;}}void send_mov(void)//容易出错的地方送行数据{CK_L;_delay_us(8);//8CK_H;_delay_us(10);//10CK_L;}/*********************ad中断程序******************/SIGNAL (SIG_ADC){uint temp1,temp2;temp1=ADCL;temp2=ADCH;Fft_Real[pgm_read_byte(&LIST_TAB[adc_count])]=(temp1+(temp2<<8));//存储在int类型,if(adc_count<32)adc_count++;elseadc_count=0;}/********************显示部分******************/void display (void){uchar LINE =16,i,er; //一共是32行init_line ();//行初始化,全送零SDA_H;for (LINE =16;LINE>0;LINE--){ if(adc_count>=32)//每采样32个点进行一次fft{ E_L;//一定要关行显示,不然会有一行的亮度特别突出adc_count=0;// ADCSRA&=~(1<<ADEN);//关adc// ADCSRA&=(1<<ADIE);//开adcprocessfft();// ADCSRA|=(1<<ADEN);//开adc// ADCSRA|=(1<<ADSC);// E_H;count1=0;}for (i=0;i<16;i++) //判断16个数,因为要显示16个柱{if (led_buf[i]>LINE+16) //上屏柱的数据判断{GREEN1_H;RED1_L;} //else{GREEN1_L;RED1_L;}if (led_buf[i]>LINE) //下屏柱的数据判断{GREEN2_H;RED2_L;}else{GREEN2_L;RED2_L;}if (led_buf1[i]==LINE+16)//浮点数据红色数据(上屏){ RED1_H;GREEN1_L;}elseif (led_buf1[i]==LINE) //浮点数据红色数据(下屏){ RED2_H;GREEN2_L;}for (er=0;er<2;er++) //连续送两次因为两列为一柱(容易出错) {SCL1_L;_delay_us(1);SCL1_H; //上升沿有效(送上一屏595的数据)_delay_us(1);SCL1_L;SCL2_L;_delay_us(1);SCL2_H; //上升沿有效(送下一屏的595数据)_delay_us(1);SCL2_L;} //送两列采样点数RED1_L; //送两列的不显数据GREEN1_L;RED2_L;GREEN2_L;for (er=0;er<2;er++) //连续送两次因为两列为一柱(容易出错) {SCL1_L;_delay_us(1);SCL1_H; //上升沿有效(送上一屏595的数据)_delay_us(1);SCL1_L;SCL2_L;_delay_us(1);SCL2_H; //上升沿有效(送下一屏的595数据)_delay_us(1);SCL2_L;}} //送完64个数据// E =0;//关闭行显示// E_L;RCL1_L; //上屏595显示数据_delay_us(1);RCL1_H; //上升沿输出_delay_us(1);RCL1_L; //RCL2_L; //下屏595显示数据_delay_us(1);RCL2_H; //上升沿输出_delay_us(1);RCL2_L; // 595整体输出send_mov();//行脉冲上升沿,促使行移位E_H; //扫描行显示_delay_us(400);//50ms延时程序?//_delay_ms(1000);SDA_L;//数据位变0}for (count=0;count<16;count++)//绿色柱状递减{if(led_buf[count]>1)led_buf[count]--;}count1++;//红色浮点下滑速度if (count1>5){for (count=0;count<16;count++)//红色浮点递减{if(led_buf1[count]>1)led_buf1[count]--;}}}int main (void){ adc_count=0;RED1_L; //显示屏控制端口GREEN1_L;RED2_L;GREEN2_L;CK_L;E_H;DDRB =0XFF;DDRD =0XFF;PORTB=0XFF;PORTD=0XFF;ADMUX=0X40;//5V的基准电压设置,A0口为输入口ad转换寄存器设置//ADCSRA=_BV(ADEN)|_BV(ADA TE)|_BV(ADIE)|_BV(ADPS2);//连续准换模式,开中断,16分频,采样频率为35khz//ADCSRA=_BV(ADSC);//启动ad变换ADCSRA=0XED;//连续准换模式,开中断,16分频,采样频率为35khz (16分频是EC) (应该是ec) (32分频ed),(64分频ee) (128分频ef)sei();while (1){display ();}return 0;}下面是fft子程序#include "avr/pgmspace.h"#define progmem __ATTR_PROGMEM__#define uchar unsigned char#define uint unsigned intuchar led_buf [16];//显示缓存单元; //显示缓存单元uchar led_buf1[16];//浮点数据存储单元int Fft_Real[32]; //fft实部int Fft_Image[32]; // fft的虚部uchar i,j,k,b,p;int Temp_Real,Temp_Imag,temp; // 中间临时变量uint TEMP1;//放大128倍后的sin整数表(128)占用flashprogmem char SIN_TAB[16] = { 0x00, 0x18, 0x30, 0x46,0x59, 0x69, 0x75, 0x7c,0x7f, 0x7c, 0x75, 0x69,0x59, 0x46, 0x30, 0x18,};//放大128倍后的cos整数表(128)//32个就可以了啊progmem char COS_TAB[16] = { 0x7f, 0x7c, 0x75, 0x69,0x59, 0x46, 0x30, 0x18,0x00, -0x18, -0x30, -0x46,-0x59, -0x69, -0x75, -0x7c,};//采样存储序列表progmem char LIST_TAB[32] = { 0, 16, 8, 24,4, 20, 12, 28,2, 18, 10, 26,6, 22, 14, 30,1, 17, 9, 25,5, 21, 13, 29,3, 19, 11, 27,7, 23, 15, 31,};/******************快速傅立叶变换**********************/void FFT(void){for( i=1; i<=5; i++) //没有倒叙计算一共是6级i表示第几级/* for(1) */{b=1;b <<=(i-1); //2(L-1) //碟式运算,用于计算隔多少行计算例如第一极1和2行计算,,第二级for( j=0; j<=b-1; j++) //求旋转因子/* for (2) */{p=1;p <<= (5-i); //p = p*j;//求pfor( k=j; k<32; k=k+2*b) /* for (3) 基二fft */{Temp_Real = Fft_Real[k];Temp_Imag = Fft_Image[k];temp = Fft_Real[k+b];Fft_Real[k] = Fft_Real[k] + ((Fft_Real[k+b]*pgm_read_byte(&COS_TAB[p]))>>7) + ((Fft_Image[k+b]*pgm_read_byte(&SIN_TAB[p]))>>7);Fft_Image[k] = Fft_Image[k] - ((Fft_Real[k+b]*pgm_read_byte(&SIN_TAB[p]))>>7) + ((Fft_Image[k+b]*pgm_read_byte(&COS_TAB[p]))>>7);Fft_Real[k+b] = Temp_Real - ((Fft_Real[k+b]*pgm_read_byte(&COS_TAB[p]))>>7) - ((Fft_Image[k+b]*pgm_read_byte(&SIN_TAB[p]))>>7);Fft_Image[k+b] = Temp_Imag + ((temp*pgm_read_byte(&SIN_TAB[p]))>>7) - ((Fft_Image[k+b]*pgm_read_byte(&COS_TAB[p]))>>7);// 移位.防止溢出. 结果已经是本值的1/64Fft_Real[k] >>= 1;Fft_Image[k] >>= 1;Fft_Real[k+b] >>= 1;Fft_Image[k+b] >>= 1;}}}}/***************量化数据函数*************/void processfft(void ){for(i=0;i<32;i++){Fft_Image[i]=0; //虚部清0 进行fft之前,虚部要进行清零}FFT();//32点fftfor(j=0;j<32;j++) //取各个频率点的模值{TEMP1=(Fft_Real[j]* Fft_Real[j])+(Fft_Image[j]*Fft_Image[j]);//求功率if(TEMP1<4)TEMP1=1;else if(TEMP1<9)TEMP1=2;else if(TEMP1<16)TEMP1=3;else if(TEMP1<25)TEMP1=4;else if(TEMP1<36)TEMP1=5;else if(TEMP1<49)TEMP1=6;else if(TEMP1<55)TEMP1=7;else if(TEMP1<60)TEMP1=8;else if(TEMP1<65)TEMP1=9;else if(TEMP1<70)TEMP1=10;else if(TEMP1<75)TEMP1=11;else if(TEMP1<80)TEMP1=12;else if(TEMP1<96)TEMP1=13;else if(TEMP1<125)TEMP1=14;else if(TEMP1<156)TEMP1=15;else if(TEMP1<189)TEMP1=16;else if(TEMP1<224)TEMP1=17;else if(TEMP1<261)TEMP1=18;else if(TEMP1<300)TEMP1=19;else if(TEMP1<341)TEMP1=20;else if(TEMP1<384)TEMP1=21;else if(TEMP1<429)TEMP1=22;else if(TEMP1<476)TEMP1=23;else if(TEMP1<525)TEMP1=24;else if(TEMP1<576)TEMP1=25;else if(TEMP1<629)TEMP1=26;else if(TEMP1<684)TEMP1=27;else if(TEMP1<741)TEMP1=28;else if(TEMP1<800)TEMP1=29;else if(TEMP1<861)TEMP1=30;else if(TEMP1<1024)TEMP1=31;elseTEMP1=32;if (TEMP1>led_buf[j])led_buf[j]=TEMP1; //送显示单元if (TEMP1>led_buf1[j])led_buf1[j]=led_buf[j];//浮点显示单元}}。

基于单片机的频谱仪设计

基于单片机的频谱仪设计

基于单片机的频谱仪设计发表时间:2019-08-15T15:40:29.510Z 来源:《信息技术时代》2018年12期作者:唐弟杨艺敏[导读] 频谱仪以STM32F103单片机作为主控电路,包含程控衰减模块HMC624,滤波模块、混频模块ADL5801、固定增益放大模块adl5611、检波模块ad8310,利用锁相环芯片ADF4351生成系统扫频信号发生器,输出的信号频率范围为35MHz到400MHz以上。

(桂林电子科技大学信息科技学院,广西桂林 541000)项目支持:2017年大学生创新创业项目“便携式简易频谱仪的设计”,项目编号:201713644035摘要:频谱仪以STM32F103单片机作为主控电路,包含程控衰减模块HMC624,滤波模块、混频模块ADL5801、固定增益放大模块adl5611、检波模块ad8310,利用锁相环芯片ADF4351生成系统扫频信号发生器,输出的信号频率范围为35MHz到400MHz以上。

频谱仪采用两级混频,然后通过检波器对第二中频信号进行模拟检波,输出直流信号给STM32的ADC脚进行采集并处理,此外由程控衰减进行参考电平的调节,最后通过TFT液晶屏显示频率和频谱。

该频谱仪实现了实用频谱仪的频标设置、扫频宽度、参考电平等功能。

关键词:STM32;ADF4351adl5801;混频Design of SpectrometerAbstract:The spectrum analyzer uses STM32F103 MCU as the main control circuit,including program-controlled attenuation module HMC624,filtering module,mixing moduleADL5801,fixed gain amplification module adl5611,detection module ad8310.The system sweep signal generator is generated by using phase-locked loop chip ADF4351,and the output signal frequency range is over 35MHz to 400MHz.The spectrum analyzer uses two-stage mixing,and then simulates the second IF signal through the detector.The output DC signal is collected and processed by the ADC foot of STM32.In addition,the reference level is adjusted by programmable attenuation.Finally,the frequency and spectrum are displayed by TFT LCD screen.The spectrum analyzer realizes the functions of frequency standard setting,sweep width and reference electric equality of practical spectrum analyzer.Key words:STM32; ADF4351; adl5801; mixing引言技术不断发展,信号频率越来越高、精度要求越来越高、工程作业环境越来越复杂等等挑战不断催促着频谱仪更新换代。

基于51单片机的LED点阵音乐频谱显示器

基于51单片机的LED点阵音乐频谱显示器
《 工 业控制计算机} 2 0 1 5年 第 2 8卷 第 4期
1 3 7
基于 5 1 单片机的 L E D点阵音乐频谱显示器
L E D Do t Ma t r i x Di s pl a y Mu s i c Sp e c t r u m B a s e d o n 51 Si n gl e Ch i p Mi c r o c o mp u t e r
pr o c e s s i n g u n i t s . s o u n d p r o c e s s i n g u n i t S T Cl 2 C 5 A 6 0 S 2 mi c r o c o n t r o l l e r F F . r p r o c e s s i n g .
实 现 音 乐频 谱 。
关键词 : S T C l 2 C 5 A 6 0 S 2 , 数 字信 号 处理 , 傅里叶变换 , 源程 序 , 仿 真 与调 试
Abs t r a c t
T h i s d e s i g n b y u s i n g s i n g l e - c h i p mi c r o c o mp u t e r a n d d i g i t a l s i g n a l p r o c e s s i n g t e c h n i q u e s t o a c h i e v e mu s i c a l s p e c t r u m
李逸 家 ( 华南农业大学珠江学院, 广东 广州 5 1 0 9 0 0 )
摘 要

通 过 使 用 单 片机 原 理 , 利 用数 字信 号 理 论 , 使 音 乐频 谱 分 析 在 单 片机 上 的 实现 。 系 统 包括 : 声 音 接 收模 块 , 声 音 转 换 模 块和 L E D 组 成 的点 阵显 示单 元 。 其 中声 音采 集模 块 , 是利用 S T C1 2 C5 A 6 0 S 2单 片机 中 的声 音 采 集 和 A / D转 换 。 音 频 的模 拟信号 通过声音采 集模块接 收到 , 经过 A / D转 换 系统 , 转换为数 字信号 , 送给 下一级 处理单元 处理 。声音转换模 块利 用 S T Cl 2 C5 A 6 0 S 2单 片机 内部 的 资 源 , 进行 F F T处 理 。显 示模 块接 收 AD转 换 后 的信 号 , 控 制 5组 , 总共 有 5 5个 L E D灯泡 , 分别完成显示。 L E D 灯 的 明 暗条 件 , 是 随 着 音 乐的 频 率 变化 所 决 定 的 , 随 时更 新 做 出相 应 的 变化 , 通过 视 觉 上 的 灯光 显 示 以
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目次1 绪论-----------------------------------------------------------12 系统功能-------------------------------------------------------13 系统设计-------------------------------------------------------2 3.1 主控单元----------------------------------------------------2 3.2 STC12C5A60S2 系列单片机单片机的A/D转换器-------------------10 3.3 STC12C5A60S2 系列单片机单片机的I/O口结构-------------------113.4 频谱显示单元-----------------------------------------------144 音频频谱显示相关问题-------------------------------------------16 4.1 频谱及频谱显示---------------------------------------------164.2 FFT运算规则及编程思想--------------------------------------175 总结-----------------------------------------------------------22 参考文献-------------------------------------------------------24致谢-----------------------------------------------------------23附录A 源程序-------------------------------------------------25 附录B 系统电路图---------------------------------------------321 绪论随着电子技术的进步发展在功率放大器的设计上功能也不断更新。

电子信息技术几乎主宰了整个电器行业的发展。

我们知道,一切声音都是由振动产生的。

声音之所以千变万化各不相同,是因为它们的振动各不相同。

产生音调高低的不同,是由于振动的频率不同。

频率越高,音高也就越高。

根据傅立叶分析,任何声音可以分解为数个甚至无限个正弦波,而它们往往又包含有无数多的谐波分量。

而它们又往往是时刻在变化着。

所以一个声音的构成其实是很复杂的。

将声音的频率分量绘制成曲线,就形成了频谱。

本设计通过STC12C5A60S2单片机及外围器件组成的系统实现音频信号的频谱显示,将音频信号送入STC12C5A60S2单片机的A/D转换接口进行数据的采集和预处理,然后送入单片机中通过编程实现频谱计算,在LCD1604上实时显示音频信号的频谱。

2 系统功能转换,单片机作为主控单元,进行数据采集,STC12C5A60S2A/D本设计以显示频谱。

且在完成系统其他控制任务的前提),再由LCD1604频谱计算(FFT音频算法计算音频信号频谱。

充分利用单片机剩余计算资源,采用优化FFT下,接口实现模拟音频信号的采样保持和量化处理,的STC12C5A60S2A/D数据通过频谱显示电路实现模拟音频信号)转换;A/D(包括音频采集和转换该单片机内置级量化,由14段,每段按照14频谱的分段显示,它将音频信号频谱划分成.LCD1604显示器件显示。

3 系统设计3.1 主控单元本设计以STC12C5A60S2单片机作为主控单元,进行频谱计算和数据采集,A/D 转换,频谱计算(FFT)。

3.1 STC12C5A60S2 系列单片机简介3.1.1.1 简介STC12C5A6OS2是宏晶公司推出的完全集成的混合信号片上系统MCU。

1个时钟/机器周期,低成本、高可靠性、高速A/D转换。

带8通道模拟多路开关,转换速度250K/S(25万次/秒);具有可编程数据更新方式;60KB系统编程的Flash 内存。

1280字节的片内RAM,可寻址64KB地址空间的外部数据存储器接口。

硬件实现的ISP/IPA在线系统可编程/在线应用可编程。

可通过串口(P3.0/P3.1)直接下载用户程序:6个通用的16位定时器。

兼容普通8051的定时器T0/T1 ,4路PCA也是4个定时器:2通道捕获/比较单元(PWM2路/PCA可编程计数器阵列4路/CCU)一可用来当2路D/A使用、用来再实现2个定时器或2个外部中断STC12C5A60S2是真正能独立工作的片上系统STC12C5A60S2的功能均可由用户进行设置使能/禁止。

3.1.1.2 STC12C5A60S2主要性能:▲高速:1个时钟/机器周期,速度比普通MCS一51单片机快8~l2倍;▲宽电压:5.5~3 .3 V,2 .2~3 .6 V;▲低功耗设计:掉电模式(可由外部中断唤醒)。

可支持下降沿/上升沿和远程唤醒;▲增加外部掉电检测电路,可在掉电时及时将数据保存EPROM;▲工作频率:0~35 MHz,相当于普通MCS一51单片机的0~420 MHz ;▲ 8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用;▲每个I/OEl驱动能力均可达到2OmA。

但整个芯片最大不得超过100mA。

单片机实物图STC12C5A60S2 为3.1图图3.1 STC12C5A60S2 单片机实物图3.1.2 STC12C5A60S2 系列单片机内部结构STC12C5A60S2系列单片机的内部结构框图如下图所示。

STC12C5A60S2单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。

STC12C5A60S2系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片上系统。

系列内部结构框图STC12C5A60S2为3.2图图3.2 STC12C5A60S2系列内部结构框图3.1.3 STC12C5A60S2 系列单片机管脚及管脚说明图3.3为STC12C5A60S2系列单片机管图图3.3 STC12C5A60S2系列单片机管图管脚说明:▲P0.0-P0.7:P0口既可作为输入/输出口,也可作为地址/数据复用总线使用。

当P0口作为输入/输出口时,P0是一个8位准双向口,内部有弱上拉电阻,无需外接上拉电阻。

当P0作为地址/数据复用总线使用时,是低8位地址线[A0-A7],数据线 [D0-D7]。

▲CLKOUT2/ADC0/ P1.0:p1.0 标准I/O口 PORT1[0]ADC0 ADC 输入通道-0CLKOUT2 独立波特率发生器的时钟输出,可通过设置WAKE-CLKO[2]位/BRT-CLKO将该管脚配置为CLKOUT2。

▲ADC1/P1.0:p1.1 标准I/O口 PORT1[1]ADC1 ADC 输入通道-1▲RxD2 /ECI / ADC2/P1.2:p1.2 标准I/O口 PORT1[2]ADC2 ADC 输入通道-2ECI PCA计数器的外部脉冲输入脚RxD2 第二串口数据接收端▲TxD2 /CCP0/ADC3/P1.3:P1.3 标准I/O口 PORT1[3]ADC3 ADC 输入通道-3CCP0 外部信号捕获(频率测量或当外部中断使用)、高速脉冲输出及脉宽调制输出。

TxD2 第二串口数据发送端▲SS/CCP1/ADC4/ P1.4:P1.4 标准I/O口 PORT1[4]ADC4 ADC 输入通道-4CCP1 外部信号捕获(频率测量或当外部中断使用)、高速脉冲输出及脉宽调制输出。

SS SPI同步串行接口的从机选择信号▲MOSI/ADC5 /P1.5:P1.5 标准I/O口 PORT1[5]-5输入通道 ADC5 ADCMOSI SPI同步串行接口的主出从入(主器件的输出和从器件的输入)▲MISO/ADC6/P1.6:P1.6 标准I/O口 PORT1[6]ADC6 ADC 输入通道-6MISO SPI同步串行接口的主入从出(主器件的输入和从器件的输出)▲SCLK/ADC7/P1.7:P1.7 标准I/O口 PORT1[7]ADC7 ADC 输入通道-7SCLK SPI同步串行接口的时钟信号▲P2.0-P2.7:P2口内部有上拉电阻,即可以作为输入/输出,也可以作为高8位地址总线使用[A8-A15],当P2口作为输入/输出口时,P2是一个8位准双向口。

▲RxD/ P3.0:P3.0 标准I/O口 PORT3[0]RxD 串口1数据接收端▲TxD/P3.1:P3.1 标准I/O口 PORT3[1]TxD 串口1数据发送端INT0 /P3.2:P3.2 标准▲I/O口 PORT3[2]INT0外部中断0 ,下降沿中断或低电平中断INT1/ P3.3:P3.3 标准I/O口 PORT3[3]▲INT1外部中断1 ,下降沿中断或低电平中断INT/T0/P3.4:P3.4 标准▲I/OCLKOUT0/口 PORT3[4]T0 定时器/计数器0的外部输入INT定时器0下降沿中断CLKOUT0 定时器/计数器0的时钟输出,可通过设置WAKE-CLKO[0]位/TOCLKO将该管脚设置为CLKOUT0INT PORT3[5]口I/O标准P3.5 :/T1/P3.5CLKOUT1/▲.T1 定时器/计数器1的外部输入INT定时器1下降沿中断CLKOUT1 定时器/计数器1的时钟输出,课通过设置WAKE-CLKO[1]位/TOCLKO将该管脚设置为CLKOUT1WR/P3.6:P3.6 标准I/O口▲ PORT3[6]WR外部数据存储器写脉冲▲/ P3.7:P3.7 标准I/O口 PORT3[7]RD外部数据存储器读脉冲RD SS/P4.0:P4.0 标准I/O▲口 PORT4[0] SS SPI同步串行接口的从机选择信号▲MOSI/ECI/P4.1:P4.1 标准I/O口 PORT4[1]ECI PCA计数器的外部脉冲输入脚MOSI SPI同步串行接口的主出从入(主器件的输出和从器件的输入)▲MISO/CCP0/P4.2:P4.2 标准I/O口 PORT4[2]CCP0 外部信号捕获(频率测量或是当外部中断使用),告诉脉冲输出或脉宽调制输出。

MISO SPI同步串行接口的主入从出(主器件的输入和从器件的输出)▲SCLK/CCP1/P4.3:P4.3 标准I/O口 PORT4[3]CCP1 外部信号捕获(频率测量或是当外部中断使用),告诉脉冲输出或脉宽调制输出。

相关文档
最新文档