找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 16508|回復(fù): 23
打印 上一主題 下一主題
收起左側(cè)

音樂頻譜電路原理圖與源程序分享

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一個(gè)學(xué)習(xí)單片機(jī)的程序及電路
原理圖上畫的是16 x 8的,實(shí)物是16 x 12的,另外加的4行LED分別由由P1.6、P1.7、P5.4和P5.5控制。

完整的資料下載:
音樂頻譜.zip (476.95 KB, 下載次數(shù): 282)


音樂頻譜電路圖:


音樂頻譜源程序:
  1. /*-----------------------------------------------------------------------*/
  2. /*                            單片機(jī)音樂頻譜                             */
  3. /*                            系統(tǒng)時(shí)鐘33MHz                              */
  4. /*-----------------------------------------------------------------------*/

  5. /*-----------------------------宏定義-----------------------------------*/
  6. #include<stc15f2k60s2.h>                    //stc15系列1T單片機(jī)
  7. #define ADC_CHANNEL 0x01                    //AD轉(zhuǎn)換通道P1.0
  8. #define ADC_POWER 0x80                                                //ADC電源控制位
  9. #define ADC_SPEED 0x60                                                //90個(gè)時(shí)鐘周期
  10. #define ADC_START 0x08                                                //ADC啟動(dòng)控制位
  11. #define ADC_FLAG 0x10                                                //ADC完成標(biāo)志位
  12. #define SAMPLE_NUM 64                       //取64點(diǎn)FFT算法
  13. #define NUM_2_LOG 6                                                        //2的6次方
  14. #define FFT_OUT_MIN 1                       //FFT運(yùn)算最小值
  15. #define LED_C1_8 P2                         //LED1~8列
  16. #define LED_C9_16 P3                        //LED9~16列
  17. #define LED_R1_8 P0                         //LED1~8行
  18. /***************************引腳定義*****************************/
  19. sbit LED_R1 = P0^0;                                                        //LED1~8行
  20. sbit LED_R2 = P0^1;
  21. sbit LED_R3 = P0^2;
  22. sbit LED_R4 = P0^3;
  23. sbit LED_R5 = P0^4;
  24. sbit LED_R6 = P0^5;
  25. sbit LED_R7 = P0^6;
  26. sbit LED_R8 = P0^7;
  27. sbit LED_R9 = P1^6;                                                    //LED第9行
  28. sbit LED_R10 = P1^7;                                                //LED第10行
  29. sbit LED_R11 = P5^4;                                                //LED第11行
  30. sbit LED_R12 = P5^5;                                                //LED第12行
  31. sbit SWITCH = P4^5;

  32. /*----------------------------變量表----------------------------*/
  33. unsigned char code BIT_RESORT[SAMPLE_NUM] = { 0, 32, 16, 48, 8, 40, 24, 56,4, 36, 20, 52, 12, 44, 28, 60,          //比特逆序重排
  34.                                                                             2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
  35.                                                                             1, 33, 17, 49, 9, 41, 25, 57,5, 37, 21, 53, 13, 45, 29, 61,
  36.                                                                              3, 35, 19, 51, 11, 43, 27, 59,7, 39, 23, 55, 15, 47, 31, 63};
  37.        
  38. char code SIN_TAB[SAMPLE_NUM] = { 0 ,12 ,25 ,37 ,49 ,60 ,71 ,81 ,90 ,98 ,106 ,112 ,117 ,122 ,125 ,126 ,              //正弦表
  39.                                                                    127 ,126 ,125 ,122 ,117 ,112 ,106 ,98 ,90 ,81 ,71 ,60 ,49 ,37 ,25 ,12 ,
  40.                                                                    0 ,-12 ,-25 ,-37 ,-49 ,-60 ,-71 ,-81 ,-90 ,-98 ,-106 ,-112 ,-117 ,-122 ,-125 ,-126 ,
  41.                                                                    -127 ,-126 ,-125 ,-122 ,-117 ,-112 ,-106 ,-98 ,-90 ,-81 ,-71 ,-60 ,-49 ,-37 ,-25 ,-12  };
  42.                                  
  43. char code COS_TAB[SAMPLE_NUM] = {127 ,126 ,125 ,122 ,117 ,112 ,106 ,98 ,90 ,81 ,71 ,60 ,49 ,37 ,25 ,12 ,            //余弦表
  44.                                                                   0 ,-12 ,-25 ,-37 ,-49 ,-60 ,-71 ,-81 ,-90 ,-98 ,-106 ,-112 ,-117 ,-122 ,-125 ,-126 ,
  45.                                                                   -127 ,-126 ,-125 ,-122 ,-117 ,-112 ,-106 ,-98 ,-90 ,-81 ,-71 ,-60 ,-49 ,-37 ,-25 ,-12 ,
  46.                                                                   0 ,12 ,25 ,37 ,49 ,60 ,71 ,81 ,90 ,98 ,106 ,112 ,117 ,122 ,125 ,126 };

  47. unsigned char LED_NUM[] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff};          //led顯示數(shù)目
  48. unsigned char AMP, AMP_TAB[16];                      //頻譜幅值,幅值表
  49. unsigned char DISP_NUM;                              //顯示次數(shù)
  50. unsigned char KEEP, KEEP_NUM;                                                 //自動(dòng)增益選擇
  51. int xdata FFT_REAL[SAMPLE_NUM];                      //FFT運(yùn)算結(jié)果實(shí)部
  52. int xdata FFT_IMAGE[SAMPLE_NUM];                     //FFT運(yùn)算結(jié)果虛部
  53. bit SWITCH_ON;
  54. /**************************************************************
  55. *名                稱:delay
  56. *功                能:微秒級(jí)延時(shí)
  57. **************************************************************/
  58. void Delay(unsigned int i)
  59. {
  60.         while(i--);
  61. }
  62. /**************************************************************
  63. *名                稱:Delay_ms
  64. *功                能:毫秒級(jí)延時(shí)
  65. **************************************************************/
  66. void Delay_ms(unsigned int x)
  67. {
  68.         unsigned int i, j;
  69.         for(i = 0; i < x; i++)
  70.                 for(j = 0; j < 500; j++);
  71. }
  72. /**************************************************************
  73. *名                稱:IOInit
  74. *功                能:IO端口初始化
  75. **************************************************************/
  76. void IOInit(void)
  77. {
  78.         P1M0 = 0x00;                        //高阻輸入
  79.         P1M1 = 0x01;
  80.         P1ASF = 0x01;                        //設(shè)為AD轉(zhuǎn)換
  81. }
  82. /**************************************************************
  83. *名                稱:Timer0Init
  84. *功                能:定時(shí)器0初始化100us定時(shí)
  85. **************************************************************/
  86. void TimerInit(void)                //100微秒@33.000MHz
  87. {
  88.         AUXR = 0XC0;                        //定時(shí)器0-1T,定時(shí)器1-12T
  89.         TMOD = 0X00;                        //定時(shí)器0/1-方式0-16位自動(dòng)重裝
  90.         TL0 = 0X16;                                //定時(shí)器0-定時(shí)170us-顯示幅值
  91.         TH0 = 0Xea;                               
  92.         TL1 = 0X1C;                                //定時(shí)器1-定時(shí)1ms-檢測(cè)開關(guān)狀態(tài)
  93.         TH1 = 0XF3;
  94.         TR0=1;
  95.         TR1 = 1;
  96. }

  97. /**********************************************************
  98. *名                稱:Display
  99. *功                能:顯示幅值
  100. **********************************************************/
  101. void Display(void)
  102. {
  103.         DISP_NUM++;
  104.         if(DISP_NUM == 17)
  105.                 DISP_NUM = 1;
  106.         LED_R1_8 = 0X00; LED_R9 = 0; LED_R10 = 0; LED_R11 = 0; LED_R12 = 0;                        //顯示前先關(guān)閉
  107.         switch(DISP_NUM)                                                                                           //逐列顯示
  108.         {
  109.                 case 1: AMP = AMP_TAB[0]; LED_C1_8 = 0X01; LED_C9_16 = 0x00; break;
  110.                 case 2: AMP = AMP_TAB[1]; LED_C1_8 = 0X02; LED_C9_16 = 0x00; break;
  111.                 case 3: AMP = AMP_TAB[2]; LED_C1_8 = 0X04; LED_C9_16 = 0x00; break;
  112.                 case 4: AMP = AMP_TAB[3]; LED_C1_8 = 0X08; LED_C9_16 = 0x00; break;
  113.                 case 5: AMP = AMP_TAB[4]; LED_C1_8 = 0X10; LED_C9_16 = 0x00; break;
  114.                 case 6: AMP = AMP_TAB[5]; LED_C1_8 = 0X20; LED_C9_16 = 0x00; break;
  115.                 case 7: AMP = AMP_TAB[6]; LED_C1_8 = 0X40; LED_C9_16 = 0x00; break;
  116.                 case 8: AMP = AMP_TAB[7]; LED_C1_8 = 0X80; LED_C9_16 = 0x00; break;
  117.                 case 9: AMP = AMP_TAB[8]; LED_C1_8 = 0X00; LED_C9_16 = 0x01; break;
  118.                 case 10: AMP = AMP_TAB[9]; LED_C1_8 = 0X00; LED_C9_16 = 0x02; break;
  119.                 case 11: AMP = AMP_TAB[10]; LED_C1_8 = 0X00; LED_C9_16 = 0x04; break;
  120.                 case 12: AMP = AMP_TAB[11]; LED_C1_8 = 0X00; LED_C9_16 = 0x08; break;
  121.                 case 13: AMP = AMP_TAB[12]; LED_C1_8 = 0X00; LED_C9_16 = 0x10; break;
  122.                 case 14: AMP = AMP_TAB[13]; LED_C1_8 = 0X00; LED_C9_16 = 0x20; break;
  123.                 case 15: AMP = AMP_TAB[14]; LED_C1_8 = 0X00; LED_C9_16 = 0x40; break;
  124.                 case 16: AMP = AMP_TAB[15]; LED_C1_8 = 0X00; LED_C9_16 = 0x80; break;
  125.         }
  126.         if(AMP <= 8)
  127.         {
  128.                 LED_R1_8 = LED_NUM[AMP];
  129.                 LED_R9 = 0;
  130.                 LED_R10 = 0;
  131.                 LED_R11 = 0;
  132.                 LED_R12 = 0;
  133.         }
  134.         if(AMP == 9)
  135.         {
  136.                 LED_R1_8 = 0XFF;
  137.                 LED_R9 = 1;
  138.                 LED_R10 = 0;
  139.                 LED_R11 = 0;
  140.                 LED_R12 = 0;
  141.         }
  142.         if(AMP == 10)
  143.         {
  144.                 LED_R1_8 = 0XFF;
  145.                 LED_R9 = 1;
  146.                 LED_R10 = 1;
  147.                 LED_R11 = 0;
  148.                 LED_R12 = 0;
  149.         }
  150.         if(AMP == 11)
  151.         {
  152.                 LED_R1_8 = 0XFF;
  153.                 LED_R9 = 1;
  154.                 LED_R10 = 1;
  155.                 LED_R11 = 1;
  156.                 LED_R12 = 0;
  157.         }
  158.         if(AMP == 12)
  159.         {
  160.                 LED_R1_8 = 0XFF;
  161.                 LED_R9 = 1;
  162.                 LED_R10 = 1;
  163.                 LED_R11 = 1;
  164.                 LED_R12 = 1;
  165.         }
  166. //         unsigned char i;
  167. //         LED_C1_8 = 0X01; LED_C9_16 = 0X00;
  168. //         for(i = 0; i < 8; i++)
  169. //         {
  170. //                 if(LED_NUM[AMP_TAB[i]] <= 8)
  171. //                 {
  172. //                         LED_R1_8 = LED_NUM[AMP_TAB[i]];
  173. //                         LED_R9 = 0; LED_R10 = 0; LED_R11 = 0; LED_R12 = 0;
  174. //                 }
  175. //                 if(LED_NUM[AMP_TAB[i]] == 9)
  176. //                 {
  177. //                         LED_R1_8 = 0XFF;
  178. //                         LED_R9 = 1; LED_R10 = 0; LED_R11 = 0; LED_R12 = 0;
  179. //                 }
  180. //                 if(LED_NUM[AMP_TAB[i]] == 10)
  181. //                 {
  182. //                         LED_R1_8 = 0XFF;
  183. //                         LED_R9 = 1; LED_R10 = 1; LED_R11 = 0; LED_R12 = 0;
  184. //                 }
  185. //                 if(LED_NUM[AMP_TAB[i]] == 11)
  186. //                 {
  187. //                         LED_R1_8 = 0XFF;
  188. //                         LED_R9 = 1; LED_R10 = 1; LED_R11 = 1; LED_R12 = 0;
  189. //                 }
  190. //                 if(LED_NUM[AMP_TAB[i]] == 12)
  191. //                 {
  192. //                         LED_R1_8 = 0XFF;
  193. //                         LED_R9 = 1; LED_R10 = 1; LED_R11 = 1; LED_R12 = 1;
  194. //                 }
  195. //                 Delay(2000);
  196. //                 LED_C1_8 <<= 1;
  197. //         }
  198. //         LED_C1_8 = 0X00; LED_C9_16 = 0X01;
  199. //         for(i = 0; i < 8; i++)
  200. //         {
  201. //                 if(LED_NUM[AMP_TAB[i]] <= 8)
  202. //                 {
  203. //                         LED_R1_8 = LED_NUM[AMP_TAB[i]];
  204. //                         LED_R9 = 0; LED_R10 = 0; LED_R11 = 0; LED_R12 = 0;
  205. //                 }
  206. //                 if(LED_NUM[AMP_TAB[i]] == 9)
  207. //                 {
  208. //                         LED_R1_8 = 0XFF;
  209. //                         LED_R9 = 1; LED_R10 = 0; LED_R11 = 0; LED_R12 = 0;
  210. //                 }
  211. //                 if(LED_NUM[AMP_TAB[i]] == 10)
  212. //                 {
  213. //                         LED_R1_8 = 0XFF;
  214. //                         LED_R9 = 1; LED_R10 = 1; LED_R11 = 0; LED_R12 = 0;
  215. //                 }
  216. //                 if(LED_NUM[AMP_TAB[i]] == 11)
  217. //                 {
  218. //                         LED_R1_8 = 0XFF;
  219. //                         LED_R9 = 1; LED_R10 = 1; LED_R11 = 1; LED_R12 = 0;
  220. //                 }
  221. //                 if(LED_NUM[AMP_TAB[i]] == 12)
  222. //                 {
  223. //                         LED_R1_8 = 0XFF;
  224. //                         LED_R9 = 1; LED_R10 = 1; LED_R11 = 1; LED_R12 = 1;
  225. //                 }
  226. //                 Delay(2000);
  227. //                 LED_C9_16 <<= 1;
  228. //         }
  229. }

  230. /************************************************
  231. *名                稱:ReadADC
  232. *功                能:讀取AD轉(zhuǎn)換結(jié)果
  233. ************************************************/
  234. unsigned char ReadADC(void)
  235. {
  236.         ADC_CONTR = ADC_POWER + ADC_START;           //啟動(dòng)轉(zhuǎn)換
  237.         Delay(50);                                   
  238.         while(!(ADC_CONTR & ADC_FLAG));              //等待轉(zhuǎn)換結(jié)束
  239.         ADC_CONTR = ADC_POWER;
  240.         return (ADC_RES << 2 + ADC_RESL);
  241. }
  242. /************************************************
  243. *名                稱:sqrt
  244. *功                能:算平方根
  245. ************************************************/
  246. short sqrt( unsigned long M)                                            //不懂啊
  247. {
  248.     unsigned int N, i;
  249.     unsigned long tmp, ttp;
  250.     if( M == 0 )            
  251.         return 0;
  252.    
  253.     N = 0;
  254.    
  255.     tmp = ( M >> 30 );        
  256.     M <<= 2;
  257.     if( tmp > 1 )            
  258.     {
  259.         N ++;               
  260.         tmp -= N;
  261.     }
  262.    
  263.     for( i=15; i>0; i-- )   
  264.     {
  265.         N <<= 1;           
  266.         
  267.         tmp <<= 2;
  268.         tmp += (M >> 30);  
  269.         
  270.         ttp = N;
  271.         ttp = (ttp<<1)+1;
  272.         
  273.         M <<= 2;
  274.         if( tmp >= ttp )   
  275.         {
  276.             tmp -= ttp;
  277.             N ++;
  278.         }      
  279.     }
  280.    
  281.     return N;
  282. }

  283. /************************************************
  284. *名                稱:FFT
  285. *功                能:快速傅里葉變換求取頻譜
  286. ************************************************/
  287. void FFT(void)                             //基2時(shí)分蝶式算法
  288. {
  289. //         unsigned char i, j, r, m1, m2, m3, m4, k1, k2;       //分別為:級(jí)號(hào),蝶群號(hào),運(yùn)算蝶號(hào),蝶群總數(shù),蝶群長度,運(yùn)算蝶數(shù),蝶群址,蝶址
  290. //         unsigned char p;
  291. //         unsigned char MAX = 0;
  292. //         short u, v;
  293. //         unsigned long ulReal, ulImage;
  294.         register unsigned char i,bb,j,k,p,MAX;
  295.         register short TR,TI,temp;
  296.     unsigned long ulReal;                             
  297.     unsigned long ulImage;

  298.         for(i = 0; i < SAMPLE_NUM; i++)                                         //采樣
  299.         {
  300.                 FFT_REAL[BIT_RESORT[i]] = ReadADC() << KEEP;
  301.                 FFT_IMAGE[i] = 0;
  302.         }
  303.         KEEP_NUM = FFT_REAL[2] >> 4;
  304.         if((7 < KEEP_NUM) && (KEEP_NUM <= 8))
  305.                 KEEP = 1;
  306.         else if((4 < KEEP_NUM) && (KEEP_NUM <= 6))
  307.                 KEEP = 2;
  308.         else if((2 < KEEP_NUM) && (KEEP_NUM <= 4))
  309.                 KEEP = 3;
  310.         else
  311.                 KEEP = 5;
  312.     for( i=1; i<=NUM_2_LOG; i++)                          
  313.     {
  314.         bb=1;
  315.         bb <<= (i-1);                                      
  316.         for( j=0; j<=bb-1; j++)                           
  317.         {
  318.             p=1;
  319.             p <<= (NUM_2_LOG-i);            
  320.             p = p*j;
  321.             for( k=j; k<SAMPLE_NUM; k=k+2*bb)               
  322.             {
  323.                 TR = FFT_REAL[k]; TI = FFT_IMAGE[k]; temp = FFT_REAL[k+bb];
  324.                 FFT_REAL[k] = FFT_REAL[k] + ((FFT_REAL[k+bb]*COS_TAB[p])>>7) + ((FFT_IMAGE[k+bb]*SIN_TAB[p])>>7);
  325.                 FFT_IMAGE[k] = FFT_IMAGE[k] - ((FFT_REAL[k+bb]*SIN_TAB[p])>>7) + ((FFT_IMAGE[k+bb]*COS_TAB[p])>>7);
  326.                 FFT_REAL[k+bb] = TR - ((FFT_REAL[k+bb]*COS_TAB[p])>>7) - ((FFT_IMAGE[k+bb]*SIN_TAB[p])>>7);
  327.                 FFT_IMAGE[k+bb] = TI + ((temp*SIN_TAB[p])>>7) - ((FFT_IMAGE[k+bb]*COS_TAB[p])>>7);
  328.                
  329.                 FFT_REAL[k]  >>= 1;            
  330.                 FFT_IMAGE[k]  >>= 1;
  331.                 FFT_REAL[k+bb]  >>= 1;                 
  332.                 FFT_IMAGE[k+bb]  >>= 1;
  333.                                                                               
  334.             }  
  335.         }
  336.     }
  337. //         for(i = 1; i <= NUM_2_LOG; i++)
  338. //         {
  339. //                 m1 = 1 << (i - 1);                  
  340. //                 m2 = m1 << 1;
  341. //                 m3 = 1 << (NUM_2_LOG - i);
  342. //                 for(j = 0; j < m3; j++)
  343. //                 {
  344. //                         m4 = j * m2;
  345. //                         for(r = 0; r < m1; r++)
  346. //                         {
  347. //                                 p = r * m3;
  348. //                                 k1 = m4 + r;
  349. //                                 k2 = k1 + m1;
  350. //              u = (FFT_REAL[k2] * COS_TAB[p]) >> 7 + (FFT_IMAGE[k2] * SIN_TAB[p]) >> 7;
  351. //                                 v = (FFT_IMAGE[k2] * COS_TAB[p]) >> 7 + (FFT_REAL[k2] * SIN_TAB[p]) >> 7;
  352. //                                 FFT_REAL[k2] = FFT_REAL[k1] - u;       
  353. //                                 FFT_IMAGE[k2] = FFT_IMAGE[k1] - v;
  354. //                                 FFT_REAL[k1] = FFT_REAL[k1] + u;
  355. //                                 FFT_IMAGE[k1] = FFT_IMAGE[k1] + v;
  356. //              FFT_REAL[k1]  >>= 1;            
  357. //              FFT_IMAGE[k1]  >>= 1;
  358. //              FFT_REAL[k2]  >>= 1;                 
  359. //              FFT_IMAGE[k2]  >>= 1;
  360. //                         }
  361. //                 }
  362. //         }
  363.         for(i = 0; i < 16; i++)
  364.         {
  365.                 ulReal = FFT_REAL[i + 1];
  366.                 ulReal *= ulReal;
  367.                 ulImage = FFT_IMAGE[i + 1];
  368.                 ulImage *= ulImage;
  369.                 AMP_TAB[i] = sqrt(ulImage + ulReal);
  370.                 if(AMP_TAB[i] < FFT_OUT_MIN)
  371.                         AMP_TAB[i] = 0;
  372.                 else
  373.                         AMP_TAB[i] -= FFT_OUT_MIN;
  374.                 if(AMP_TAB[i] > MAX)
  375.                         MAX = AMP_TAB[i];
  376.         }
  377.         if(MAX > 12)
  378.         {
  379.                 MAX /= 12;
  380.                 for(i = 0; i < 16; i++)
  381.                         AMP_TAB[i] /= MAX;
  382.         }
  383. }
  384. /**********************************************************
  385. *名                稱:Display_zzz
  386. *功                能;顯示動(dòng)畫
  387. **********************************************************/
  388. void Display_zzz(void)
  389. {
  390.         //逐行掃描-4幀
  391.         unsigned char code TAB_LED[4][24] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  392.                                                                                  {0x07, 0x00, 0x02, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  393.                                                                                  {0x07, 0x00, 0x02, 0x00, 0x07, 0x00, 0xe0, 0x01, 0x40, 0x00, 0x80, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  394.                                                                                  {0x07, 0x00, 0x02, 0x00, 0x07, 0x00, 0xe0, 0x01, 0x40, 0x00, 0x80, 0x00, 0xe0, 0x01, 0x00, 0xf8, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0xf8}};
  395.         unsigned char i, j;
  396.         P0 = 0x00; LED_R9 = 0; LED_R10 = 0; LED_R11 = 0; LED_R12 = 0;
  397.         for(i = 0; i < 4; i++)
  398.         {
  399.                 for(j = 0; j < 100; j++)
  400.                 {
  401.                         LED_C1_8 = TAB_LED[i][2 * 0];
  402.                         LED_C9_16 = TAB_LED[i][2 * 0 + 1];
  403.                         LED_R1 = 1;
  404.                         Delay_ms(2);
  405.                         LED_R1 = 0;
  406.                        
  407.                         LED_C1_8 = TAB_LED[i][2 * 1];
  408.                         LED_C9_16 = TAB_LED[i][2 * 1 + 1];
  409.                         LED_R2 = 1;
  410.                         Delay_ms(2);
  411.                         LED_R2 = 0;

  412.                         LED_C1_8 = TAB_LED[i][2 * 2];
  413.                         LED_C9_16 = TAB_LED[i][2 * 2 + 1];
  414.                         LED_R3 = 1;
  415.                         Delay_ms(2);
  416.                         LED_R3 = 0;
  417.                        
  418.                         LED_C1_8 = TAB_LED[i][2 * 3];
  419.                         LED_C9_16 = TAB_LED[i][2 * 3 + 1];
  420.                         LED_R4= 1;
  421.                         Delay_ms(2);
  422.                         LED_R4 = 0;

  423.                         LED_C1_8 = TAB_LED[i][2 * 4];
  424.                         LED_C9_16 = TAB_LED[i][2 * 4 + 1];
  425.                         LED_R5 = 1;
  426.                         Delay_ms(2);
  427.                         LED_R5 = 0;

  428.                         LED_C1_8 = TAB_LED[i][2 * 5];
  429.                         LED_C9_16 = TAB_LED[i][2 * 5 + 1];
  430.                         LED_R6 = 1;
  431.                         Delay_ms(2);
  432.                         LED_R6 = 0;

  433.                         LED_C1_8 = TAB_LED[i][2 * 6];
  434.                         LED_C9_16 = TAB_LED[i][2 * 6 + 1];
  435.                         LED_R7 = 1;
  436.                         Delay_ms(2);
  437.                         LED_R7 = 0;

  438.                         LED_C1_8 = TAB_LED[i][2 * 7];
  439.                         LED_C9_16 = TAB_LED[i][2 * 7 + 1];
  440.                         LED_R8 = 1;
  441.                         Delay_ms(2);
  442.                         LED_R8 = 0;

  443.                         LED_C1_8 = TAB_LED[i][8 * 2];
  444.                         LED_C9_16 = TAB_LED[i][8 * 2 + 1];
  445.                         LED_R9 = 1;
  446.                         Delay_ms(2);
  447.                         LED_R9 = 0;
  448.                        
  449.                         LED_C1_8 = TAB_LED[i][9 * 2];
  450.                         LED_C9_16 = TAB_LED[i][9 *2 + 1];
  451.                         LED_R10 = 1;
  452.                         Delay_ms(2);
  453.                         LED_R10 = 0;
  454.                
  455.                         LED_C1_8 = TAB_LED[i][10 *2];
  456.                         LED_C9_16 = TAB_LED[i][10 * 2 + 1];
  457.                         LED_R11 = 1;
  458.                         Delay_ms(2);
  459.                         LED_R11 = 0;                       

  460.                         LED_C1_8 = TAB_LED[i][11 * 2];
  461.                         LED_C9_16 = TAB_LED[i][11 * 2 + 1];
  462.                         LED_R12 = 1;
  463.                         Delay_ms(2);
  464.                         LED_R12 = 0;
  465.                 }
  466.         }
  467. }
  468. /************************************************
  469. *名                稱:main
  470. *功                能:主函數(shù)
  471. ************************************************/
  472. void main()
  473. {
  474.         IOInit();                                                            //初始化
  475.         TimerInit();
  476.         DISP_NUM = 0;
  477.         KEEP = 0;
  478.         KEEP_NUM = 0;
  479.         EA = 1;                                                                        //開中斷
  480.         ET1 = 1;
  481.         while(1)
  482.         {
  483.                 if(SWITCH_ON == 0)
  484.                 {
  485.                         ET0 = 0;
  486.                         Display_zzz();
  487.                 }
  488.                 if(SWITCH_ON == 1)
  489.                 {
  490.                         ET0 = 1;
  491.                         FFT();
  492.                 }
  493.         }
  494. }

  495. /************************************************
  496. *名                稱:Timer0Interrupt
  497. *功                能:定時(shí)器0中斷服務(wù)程序-顯示
  498. ************************************************/
  499. void Timer0Interrupt() interrupt 1
  500. {
  501.         Display();
  502.         Delay(300);
  503. }
  504. /************************************************
  505. *名                稱:Timer1Interrupt
  506. *功                能:定時(shí)器1中斷服務(wù)程序-檢測(cè)開關(guān)狀態(tài)
  507. ************************************************/
  508. void Timer1Interrupt() interrupt 3
  509. {
  510.         if(SWITCH == 1)
  511.                 SWITCH_ON = 1;
  512.         if(SWITCH == 0)
  513.                 SWITCH_ON = 0;
  514. }
復(fù)制代碼


評(píng)分

參與人數(shù) 4黑幣 +70 收起 理由
7914251a + 10 很給力!
天0 + 5 贊一個(gè)!
愛玩的學(xué)旨 + 5 很給力
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:108508 發(fā)表于 2016-5-7 10:06 | 只看該作者
下載保留學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

板凳
ID:84948 發(fā)表于 2016-5-14 14:14 | 只看該作者
多謝樓主的分享!~~
回復(fù)

使用道具 舉報(bào)

地板
ID:61840 發(fā)表于 2016-6-15 23:19 | 只看該作者
不錯(cuò)的程序,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

5#
ID:136460 發(fā)表于 2016-9-1 05:36 來自手機(jī) | 只看該作者
好人,天下好人多
回復(fù)

使用道具 舉報(bào)

6#
ID:138343 發(fā)表于 2016-9-17 07:22 | 只看該作者
感謝樓主分享,最近在想關(guān)于頻譜的顯示問題,如同一行,假如第一列的不顯示,而第二列的顯示,在同一時(shí)間里這個(gè)問題怎么處理
回復(fù)

使用道具 舉報(bào)

7#
ID:42417 發(fā)表于 2016-9-25 00:33 | 只看該作者
好東西,多謝樓主的分享!~~
回復(fù)

使用道具 舉報(bào)

8#
ID:100826 發(fā)表于 2016-9-25 07:35 | 只看該作者
多謝樓主的分享!
回復(fù)

使用道具 舉報(bào)

9#
ID:148612 發(fā)表于 2016-11-18 11:15 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

10#
ID:33848 發(fā)表于 2017-6-1 09:02 | 只看該作者
看上去似乎不錯(cuò)
回復(fù)

使用道具 舉報(bào)

11#
ID:220055 發(fā)表于 2017-9-5 23:38 | 只看該作者
看上去似乎不錯(cuò)
回復(fù)

使用道具 舉報(bào)

12#
ID:14237 發(fā)表于 2017-9-6 08:54 | 只看該作者
多謝樓主的分享!
回復(fù)

使用道具 舉報(bào)

13#
ID:239055 發(fā)表于 2017-11-9 07:56 | 只看該作者
我又來了,謝謝樓主
回復(fù)

使用道具 舉報(bào)

14#
ID:127160 發(fā)表于 2017-11-15 14:05 | 只看該作者
謝謝分享。
回復(fù)

使用道具 舉報(bào)

15#
ID:229527 發(fā)表于 2017-11-23 10:53 | 只看該作者
謝謝樓主!
回復(fù)

使用道具 舉報(bào)

16#
ID:128101 發(fā)表于 2018-8-1 21:07 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

17#
ID:128101 發(fā)表于 2018-10-9 21:44 | 只看該作者
感謝分享 學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

18#
ID:73030 發(fā)表于 2019-1-20 17:42 | 只看該作者
感謝樓主分享。
回復(fù)

使用道具 舉報(bào)

19#
ID:524014 發(fā)表于 2019-6-11 18:42 | 只看該作者
下載保存,學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

20#
ID:578423 發(fā)表于 2020-5-16 12:21 | 只看該作者
先頂再看,好東西
回復(fù)

使用道具 舉報(bào)

21#
ID:53667 發(fā)表于 2020-5-22 06:08 | 只看該作者
謝謝分享,收下了慢慢研究
回復(fù)

使用道具 舉報(bào)

22#
ID:78387 發(fā)表于 2020-6-2 00:30 來自手機(jī) | 只看該作者
謝謝樓主分享!學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

23#
ID:653833 發(fā)表于 2020-10-24 20:12 | 只看該作者
我想知道三極管的作用,,,
回復(fù)

使用道具 舉報(bào)

24#
ID:833128 發(fā)表于 2020-12-11 08:45 | 只看該作者
收藏了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表