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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4728|回復: 1
打印 上一主題 下一主題
收起左側

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];            //下落間隔計數
  15. uchar idata Out_Tab[FFT_X];                //實際輸出緩存
  16. uchar data  ADC_Count=0;                  //采集計數

  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()//顯示數據輸出
  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轉換電源;11速度為70周期一次;0中斷標志清零;1啟動adc(ADC_START);000AD通道打開(這里為P1.0);
  99. }
  100. /*----------------------系統初始化----------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中斷優先級         0
  120.         PT0=1;                        //T0中斷優先級        1
  121.         IPH=0X20;                //ADC中斷優先級        2
  122.         PADC=1;               //ADC中斷優先級        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運算并轉換為各頻段幅值
  141.                         ADCOK_BT=0;
  142.                 }     
  143.         }
  144. }
復制代碼

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

51hei圖片_20190912192218.jpg

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

51hei圖片_20190912192222.jpg

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

51hei圖片_20190912192246.jpg

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

51hei圖片_20190912192212.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-9-11 16:40 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区视频 | 国产精品视频久久久久久 | 99国产精品一区二区三区 | 欧美一级大片 | 国产欧美精品区一区二区三区 | 欧美久| 在线国产视频 | 嫩草研究影院 | 久久精品国产一区二区电影 | 久久久久久久久久久福利观看 | 亚洲国产精选 | 国产在线拍偷自揄拍视频 | 中文字幕成人网 | 丝袜美腿av | 四虎精品在线 | 国产一区二区黑人欧美xxxx | 欧美一区二区大片 | 婷婷综合五月天 | 91精品国产91久久综合桃花 | 欧美久久天堂 | 欧美a区| 天天综合永久 | 久久一区二区免费视频 | 麻豆一区二区三区精品视频 | 国产91 在线播放 | 成人午夜激情 | 九九在线视频 | 天堂综合 | 九九九精品视频 | 成人99| 黄色国产大片 | 精品综合久久 | 一区二区在线不卡 | 91资源在线观看 | 综合久久一区 | 最新中文字幕第一页视频 | 中文字幕一区二区三区精彩视频 | 久久久久久高潮国产精品视 | 国产黄a一级 | 亚洲精品乱码 | 国产精品 亚洲一区 |