久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
請教LED3264雙色頻譜顯示問題
[打印本頁]
作者:
1qaz2wsx77
時間:
2025-5-9 16:39
標題:
請教LED3264雙色頻譜顯示問題
做了一個STC15單片機驅動的LED3264頻譜,24MHZ,代碼移植于本論壇中STC12C5A60S驅動程序。現在的問題是:只顯示幅值,與頻率無關了,就是16個光柱都一般高,隨著音量大小一起跳動。煩請哪位老師幫忙看一下代碼,問題出在哪?
#include<math.h>
#include"stc15.h"
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ADC_POWER 0x80 //ADC 電源控制位。
#define ADC_FLAG 0x10 //ADC 完成標志
#define ADC_START 0x08 //ADC 起始控制位
#define ADC_SPEEDLL 0x00 //540 個時鐘
#define ADC_SPEEDL 0x20 //360 個時鐘
#define ADC_SPEEDH 0x40 //180 個時鐘
#define ADC_SPEEDHH 0x60 //90 個時鐘
sbit R1=P3^6; //上紅數據
sbit R2=P3^7; //下紅數據
sbit G1=P2^4; //上綠數據
sbit G2=P2^5; //下綠數據
sbit STR=P2^6; //鎖存
sbit CLK=P2^7; //時鐘
sbit OE=P3^5; //
sbit IA=P2^0; //行控制線A
sbit IB=P2^1; //行控制線B
sbit IC=P2^2; //行控制線C
sbit ID=P2^3; //行控制線D
/*--------------------------------------------
行輸出控制
--------------------------------------------*/
void hang(unsigned char Value)
{
switch(Value)
{
case 0: {IA=0;IB=0;IC=0;ID=0;}break;
case 1: {IA=1;IB=0;IC=0;ID=0;}break;
case 2: {IA=0;IB=1;IC=0;ID=0;}break;
case 3: {IA=1;IB=1;IC=0;ID=0;}break;
case 4: {IA=0;IB=0;IC=1;ID=0;}break;
case 5: {IA=1;IB=0;IC=1;ID=0;}break;
case 6: {IA=0;IB=1;IC=1;ID=0;}break;
case 7: {IA=1;IB=1;IC=1;ID=0;}break;
case 8: {IA=0;IB=0;IC=0;ID=1;}break;
case 9: {IA=1;IB=0;IC=0;ID=1;}break;
case 10: {IA=0;IB=1;IC=0;ID=1;}break;
case 11: {IA=1;IB=1;IC=0;ID=1;}break;
case 12: {IA=0;IB=0;IC=1;ID=1;}break;
case 13: {IA=1;IB=0;IC=1;ID=1;}break;
case 14: {IA=0;IB=1;IC=1;ID=1;}break;
case 15: {IA=1;IB=1;IC=1;ID=1;}break;
}
}
uchar COUNT=15,COUNT1=0,LINE=15;
uint TEMP1;
uchar xdata LED_TAB2[16]; //記錄 漂浮物 是否需要 停頓一下
uchar xdata LED_TAB[16]; //記錄紅色柱狀
uchar xdata LED_TAB1[16]; //記錄 漂浮點
struct compx //定義復數結構體
{
float real;
float imag;
};
xdata struct compx s[ 64 ]; //FFT數據緩存放在XDATA空間
struct compx EE(struct compx,struct compx); //復數乘法函數的聲明
void FFT(struct compx xin[],int N); //FFT函數的聲明
/*---------------------------------------------
ADC初始化,P1^0口音頻輸入
--------------------------------------------*/
void InitADC()
{
P1ASF =0x01; //P10口做AD 使用
P1M0 = 0x01; //0000,0001用于A/D轉換的P1.x口,先設為開漏
P1M1 = 0x01; //0000,0001 P1.0先設為開漏。斷開內部上拉電阻
ADC_RES = 0; //清除結果寄存器
ADC_RESL = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDHH; //40.96K采樣率 0xC8
}
/*---------------------------------------------
讀 ADC 數據
--------------------------------------------*/
unsigned int GetADCResult(unsigned char ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ch | ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
return (ADC_RES<<2+ADC_RESL);
}
/*--------------------------------------------------------
復數乘法
---------------------------------------------------------*/
struct compx EE(struct compx a1,struct compx b2)
{
struct compx b3;
b3.real=a1.real*b2.real-a1.imag*b2.imag;
b3.imag=a1.real*b2.imag+a1.imag*b2.real;
return(b3);
}
/*--------------------------------------------------------
FFT函數
---------------------------------------------------------*/
void FFT(struct compx xin[],int N)
{
int f,m,nv2,nm1,i,k,j=1,l;
struct compx v,w,t;
nv2=N/2;
f=N;
for(m=1;(f=f/2)!=1;m++){;}
nm1=N-1;
for(i=0;i<nm1;i++) //倒序操作
{
if(i<j)
{
t=xin[j];
xin[j]=xin[i];
xin[i]=t;
}
k=nv2; //k為倒序中相應位置的權值
while(k<j)
{
j=j-k;
k=k/2;
}
j=j+k;
}
{
int le,lei,ip;
float pi;
for(l=1;l<=m;l++)
{
le=pow(2,l); //乘方
lei=le/2;
pi=3.14159265;
v.real=1.0;
v.imag=0.0;
w.real=cos(pi/lei); //旋轉因子
w.imag=-sin(pi/lei);
for(j=1;j<=lei;j++) //控制蝶形運算的級數
{
for(i=j-1;i<N;i=i+le) //控制每級蝶形運算的次數
{
ip=i+lei;
t=EE(xin[ ip ],v);
xin[ ip ].real=xin[ i ].real-t.real; //蝶形計算
xin[ ip ].imag=xin[ i ].imag-t.imag;
xin[ i ].real=xin[ i ].real+t.real;
xin[ i ].imag=xin[ i ].imag+t.imag;
}
v=EE(v,w);
}
}
}
}
/*--------------------------------------------------------
顯示模式
---------------------------------------------------------*/
void showbar()
{
unsigned char i,j;
for(j=0;j<16;j++) //讀取FFT轉換數據
{
TEMP1=sqrt(pow((s[i ].real+s[i+1].real),2)+pow((s[i ].imag+s[i+1].imag),2))/2;
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]=14; //提頓速度=12
}
}
}
/*------------------------------------------------
定時器0初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
EA=1; //總中斷打開
}
/*------------------------------------------------
定時器0中斷子程序
------------------------------------------------*/
void LED_Display() interrupt 1
{
uchar G;
TH0=(65536-2000)/256; //重新賦值
TL0=(65536-2000)%256;
for (G=0;G<16;G++) //往點陣屏填充 一行的 數據
{
if(LED_TAB[G]<=LINE+16)R1=0;
else R1=1;
if(LED_TAB[G]<=LINE)R2=0;
else R2=1;
if(LED_TAB1[G]==LINE){G1=0;G2=1;}
else if(LED_TAB1[G]==(LINE+16)){G1=1;G2=0;}
else G2=G1=0;
CLK=1;CLK=0;
CLK=1;CLK=0;
CLK=1;CLK=0;
G1=0;G2=0;R1=0;R2=0;
CLK=1;CLK=0;
}
STR=1;STR=0;
if(LED_TAB[COUNT]>0)LED_TAB[COUNT]--; //柱狀遞減,
if(COUNT>0)COUNT--;
else COUNT=15;
if(LED_TAB2[COUNT1]==0)
{
if(LED_TAB1[COUNT1]>LED_TAB[COUNT1])LED_TAB1[COUNT1]--;
}
else LED_TAB2[COUNT1]--;
COUNT1++;
if(COUNT1>=16)COUNT1=0;
OE=1;
hang(15-LINE); //行選
OE=0;
if(LINE>0)LINE--;
else LINE=15;
}
/*-------------------------------------------------------------------
主函數
-------------------------------------------------------------------*/
void main()
{
int N=64,i; //變量初始化,64點FFT運算
float offset;
P0M1=0x00;
P0M0=0x00;
P1M1=0x00;
P1M0=0x00;
P2M1=0x00;
P2M0=0x00;
P3M1=0x00;
P3M0=0x00;
P5M1=0x00;
P5M0=0x00;
Init_Timer0();
InitADC(); //ADC初始化
offset=GetADCResult(0);
while(1)
{
for(i=0;i<N;i++) //采集音頻信號
{
ADC_CONTR=0xC8; //40.96K采樣率
while(!(ADC_CONTR&0x10));
s[i].real=((float)ADC_RES*4+(float)(ADC_RESL%0x04)-offset)/4; //((((int)ADC_DATA-128)/2))*4;
s[i].imag=0;
}
FFT(s,N); //調用FFT函數進行變換
showbar();
}
}
復制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久一区二区三区
|
久久久精品久久
|
91九色在线观看
|
精品国产一级
|
91精品久久久久久久久
|
在线国产一区二区
|
免费成人高清在线视频
|
少妇一区在线观看
|
亚洲网站在线播放
|
日本中文字幕日韩精品免费
|
国产一区二区在线免费播放
|
孕妇一级毛片
|
久久国内
|
亚洲一区二区精品视频在线观看
|
精品一二区
|
91在线精品一区二区
|
一区二区视频
|
高清av一区
|
日韩午夜电影
|
国产一级电影在线
|
狠狠久久
|
中文字幕不卡视频在线观看
|
久久久国产一区
|
av黄色免费在线观看
|
欧产日产国产精品视频
|
国产区一区二区三区
|
中文成人在线
|
国产精品永久
|
精品亚洲一区二区三区四区五区
|
九九久久精品视频
|
欧美视频网
|
一区视频
|
日本一区二区视频
|
久久91精品国产一区二区
|
国产精品久久久久一区二区三区
|
日韩一区二区免费视频
|
wwwsihu
|
在线观看亚洲专区
|
99精品视频免费在线观看
|
韩国理论电影在线
|
免费一级大片
|