久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: stc12C5a單片機FFT 音樂頻譜 不間斷ADC程序 [打印本頁]

作者: zpmzqr    時間: 2019-9-11 09:51
標題: stc12C5a單片機FFT 音樂頻譜 不間斷ADC程序
本帖最后由 zpmzqr 于 2019-9-12 19:25 編輯
  1. #define uchar unsigned char
  2. #define uint unsigned int
  3. #define OUT_Port          P0                     //輸出
  4. #define ADC_CHO          0x00                   //AD通道為(111) P1.0
  5. #define ADC_POWER          0x80                   //AD電源
  6. #define ADC_START   0x08                   //AD啟動
  7. #define ADC_FLAG    0x10                   //AD標志
  8. //#define ADC_SPEED  0x00                //420 clocks
  9. //#define ADC_SPEED  0x20               //280 clocks
  10. //#define ADC_SPEED  0x40               //140 clocks
  11. #define ADC_SPEED 0x60                 //70 clocks        31kHZ

  12. uchar code EF_Tab[]={0x01,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0xff};//顯示效果
  13. uchar data ADCTmp_Tab[FFT_PCS]; // ADC輸入緩存
  14. uchar idata Gap_Tab[FFT_X];            //下落間隔計數(shù)
  15. uchar idata Out_Tab[FFT_X];                //實際輸出緩存
  16. uchar data  ADC_Count=0;                  //采集計數(shù)

  17. sbit Rout=OUT_Port^4;                //高中低音輸出端口
  18. sbit Gout=OUT_Port^5;
  19. sbit Bout=OUT_Port^6;
  20. sbit Yout=OUT_Port^7;

  21. bit ADCOK_BT;//采集完成標志

  22. void Display_OUT()//顯示數(shù)據(jù)輸出
  23. {
  24.         if(Out_Tab[0]>7)Rout=1; else Rout=0;  //高中低音指示燈輸出
  25.         if(Out_Tab[1]>7)Gout=1; else Gout=0;
  26.         if(Out_Tab[2]>6)Bout=1; else Bout=0;
  27.         if(Out_Tab[3]>6)Yout=1; else Yout=0;
  28.         
  29.         TM1640_GRID[15]=EF_Tab[Out_Tab[0]];                                          //R0  1640點陣輸出
  30.         TM1640_GRID[14]=0;          //G0
  31.         TM1640_GRID[13]=0;
  32.         TM1640_GRID[12]=EF_Tab[Out_Tab[1]];
  33.         TM1640_GRID[11]=EF_Tab[Out_Tab[2]];
  34.         TM1640_GRID[10]=EF_Tab[Out_Tab[2]];
  35.         TM1640_GRID[9]=EF_Tab[Out_Tab[3]];
  36.         TM1640_GRID[8]=0;
  37.         TM1640_GRID[7]=0;
  38.         TM1640_GRID[6]=EF_Tab[Out_Tab[4]];
  39.         TM1640_GRID[5]=EF_Tab[Out_Tab[5]];
  40.         TM1640_GRID[4]=EF_Tab[Out_Tab[5]];
  41.         TM1640_GRID[3]=EF_Tab[Out_Tab[6]];
  42.         TM1640_GRID[2]=0;
  43.         TM1640_GRID[1]=0;
  44.         TM1640_GRID[0]=EF_Tab[Out_Tab[7]];
  45.         
  46.         TM1640B_GRID[15]=EF_Tab[Out_Tab[8]];
  47.         TM1640B_GRID[14]=EF_Tab[Out_Tab[8]];
  48.         TM1640B_GRID[13]=0;
  49.         TM1640B_GRID[12]=EF_Tab[Out_Tab[9]];
  50.         TM1640B_GRID[11]=0;
  51.         TM1640B_GRID[10]=EF_Tab[Out_Tab[10]];
  52.         TM1640B_GRID[9]=0;
  53.         TM1640B_GRID[8]=EF_Tab[Out_Tab[11]];
  54.         TM1640B_GRID[7]=EF_Tab[Out_Tab[12]];
  55.         TM1640B_GRID[6]=0;
  56.         TM1640B_GRID[5]=EF_Tab[Out_Tab[13]];
  57.         TM1640B_GRID[4]=0;
  58.         TM1640B_GRID[3]=EF_Tab[Out_Tab[14]];
  59.         TM1640B_GRID[2]=0;
  60.         TM1640B_GRID[1]=0;
  61.         TM1640B_GRID[0]=EF_Tab[Out_Tab[15]];        
  62.         TM1640_WriteDisp(0x8b);        //1640顯示
  63. }

  64. /*-----T1中斷-----------------------------刷新顯示----------------------*/
  65. void RefreshDisplay() interrupt 3
  66. {
  67.          uchar i;
  68.         TL1 = 0x33;                //設置定時初值4MS
  69.         TH1 = 0xE3;                //設置定時初值
  70.         if(Fft_DispBT)        //顯示標志
  71.         {
  72.                 for(i=0;i<FFT_X;i++)//輸出效果上升直接顯示,下落間斷
  73.                 {
  74.                         if(FftOut_Tab[i]>Out_Tab[i])
  75.                         {Out_Tab[i]=FftOut_Tab[i];Gap_Tab[i]=0;}
  76.                         else if(FftOut_Tab[i]<Out_Tab[i])
  77.                         {
  78.                                 Gap_Tab[i]++;
  79.                                 if(Gap_Tab[i]>4)
  80.                                 {
  81.                                         Out_Tab[i]--;Gap_Tab[i]=0;
  82.                                 }
  83.                         }
  84.                 }
  85.                 Display_OUT(); //顯示輸出
  86.         }
  87. }                                                                                                                        
  88. /*-----ADC中斷----------44100/128=345HZ頻率點------32000/64=500HZ頻率點----------------*/
  89. void ADC_Finish() interrupt 5        //ADC中斷
  90. {   
  91.         ADC_CONTR &= !ADC_FLAG;         //清除標志
  92.         ADCTmp_Tab[LIST_TAB[ADC_Count]]=ADC_RESL<<2;//按LIST_TAB表里的順序,進行存儲采樣值        低8位
  93.         ADC_Count++;if(ADC_Count>=FFT_PCS){ADCOK_BT=1;ADC_Count=0;}//置位 EADC=0;TR0=0;
  94. }
  95. /*---T0中斷-啟動ADC控制采樣率,------------1000000US/32000HZ=31.25US-------------------------*/
  96. void Ad_Control() interrupt 1
  97. {
  98.         ADC_CONTR = ADC_POWER | ADC_SPEED | ADC_START | ADC_CHO;//1110 1000   1打開 ADC_POWER轉(zhuǎn)換電源;11速度為70周期一次;0中斷標志清零;1啟動adc(ADC_START);000AD通道打開(這里為P1.0);
  99. }
  100. /*----------------------系統(tǒng)初始化----------22.1184-----------12T----------------------------*/
  101. void STC_INIT()
  102. {
  103. /*----------------------AD------------------------------------------------------------*/
  104.         P1ASF = 0x01;   //0000,0000, 將 P1.0 置成模擬口
  105.         AUXR1|= 0x04;   //1111,1011, ADRJ=1 高2位放ADC_RES 低8位放ADC_RESL
  106.         EADC=1;                //AD中斷打開
  107.         ADC_CONTR = ADC_POWER | ADC_SPEED | ADC_CHO; //打開ADC電源
  108. /*----------------------Uint---------------------------------------------------------*/
  109.         TMOD= 0X12;                //T1 16位, T0 8位自動重載
  110.         TL0 = 0xC6;                //設置定時初值                頻率≈44KHZ,1000000/44100=22.67US;         值D6
  111.         TH0 = 0xC6;                //設置定時重載值         頻率≈32KHZ,1000000/32000=31.25US;  值C6
  112.         
  113.         TL1 = 0x33;                //設置定時初值設4MS        采集64次時間 31.25*64=2000US+FFT時間≈3US
  114.         TH1 = 0xE3;                //設置定時初值
  115.         ET0=1;          //定時器0中斷打開
  116.         TR0=0;          //關閉定時器0
  117.         ET1=1;                        //定時器1中斷打開
  118.         TR1=1;                        //啟動定時器0
  119.         PT1=0;                        //T1中斷優(yōu)先級         0
  120.         PT0=1;                        //T0中斷優(yōu)先級        1
  121.         IPH=0X20;                //ADC中斷優(yōu)先級        2
  122.         PADC=1;               //ADC中斷優(yōu)先級        3
  123.         EA=1;                 //總中斷打開
  124.         OUT_Port=0X00;                //輸出
  125. }
  126. void main()//主程序
  127. {
  128.         unsigned char i;
  129.         STC_INIT();
  130.         TR0=1;EADC=1; //開啟定時器中斷0,開啟ADC
  131.         while(1)
  132.         {
  133.         //        ADC_Count=0;
  134.         //        TR0=1;EADC=1; //開啟定時器中斷0,開啟ADC
  135.         //        while(!ADCOK_BT);
  136.                 if(ADCOK_BT)
  137.                 {
  138.                         for(i=0;i<FFT_PCS;i++)
  139.                         {FftReal_Tab[i]=ADCTmp_Tab[i];FftImage_Tab[i]=0;}//
  140.                         FFT_OUT();//FFT運算并轉(zhuǎn)換為各頻段幅值
  141.                         ADCOK_BT=0;
  142.                 }     
  143.         }
  144. }
復制代碼

51hei圖片_20190912192218.jpg (88.88 KB, 下載次數(shù): 38)

51hei圖片_20190912192218.jpg

51hei圖片_20190912192222.jpg (78.64 KB, 下載次數(shù): 43)

51hei圖片_20190912192222.jpg

51hei圖片_20190912192246.jpg (90.77 KB, 下載次數(shù): 45)

51hei圖片_20190912192246.jpg

51hei圖片_20190912192212.jpg (94.56 KB, 下載次數(shù): 48)

51hei圖片_20190912192212.jpg

作者: admin    時間: 2019-9-11 16:40
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧洲成人| 成人在线免费视频 | 日韩欧美大片在线观看 | av男人的天堂av | 国产精品一区二区三区四区五区 | 盗摄精品av一区二区三区 | 久久精品免费观看 | 色婷婷国产精品 | 日本一区二区三区视频在线 | 欧美片网站免费 | 免费福利视频一区二区三区 | 久久精品国产99国产 | 国产激情精品视频 | 日韩靠逼| 日韩电影中文字幕 | 91色综合 | 国产精品久久久久久久免费观看 | 天天插天天搞 | 亚洲视频手机在线 | 中文字幕一二三 | 久久av影院| 亚洲一区二区免费电影 | 国产婷婷| 国产精品久久久久久模特 | 久久网国产 | 妖精视频一区二区三区 | 亚洲国产精品一区二区第一页 | 一区二区三区国产好 | 一区二区三区免费看 | 亚洲嫩草 | 91精品观看 | 午夜合集| 欧美激情视频一区二区三区免费 | 国产精品1区 | 欧美综合一区二区 | 精品网| 自拍偷拍亚洲一区 | 精品久久久网站 | 免费视频一区 | 久久亚洲欧美日韩精品专区 | 99reav|