分享

【新提醒】音乐频谱电路原理图与源程序分享

 求知881 2019-01-21
 一个学习单片机的程序及电路
原理图上画的是16 x 8的,实物是16 x 12的,另外加的4行LED分别由由P1.6、P1.7、P5.4和P5.5控制。

完整的资料下载:
音乐频谱.zip (476.95 KB, 下载次数: 162)


音乐频谱电路图:


音乐频谱源程序:
  1. /*-----------------------------------------------------------------------*/
  2. /*                            单片机音乐频谱                             */
  3. /*                            系统时钟33MHz                              */
  4. /*-----------------------------------------------------------------------*/

  5. /*-----------------------------宏定义-----------------------------------*/
  6. #include<stc15f2k60s2.h>                    //stc15系列1T单片机
  7. #define ADC_CHANNEL 0x01                    //AD转换通道P1.0
  8. #define ADC_POWER 0x80                                                //ADC电源控制位
  9. #define ADC_SPEED 0x60                                                //90个时钟周期
  10. #define ADC_START 0x08                                                //ADC启动控制位
  11. #define ADC_FLAG 0x10                                                //ADC完成标志位
  12. #define SAMPLE_NUM 64                       //取64点FFT算法
  13. #define NUM_2_LOG 6                                                        //2的6次方
  14. #define FFT_OUT_MIN 1                       //FFT运算最小值
  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显示数目
  48. unsigned char AMP, AMP_TAB[16];                      //频谱幅值,幅值表
  49. unsigned char DISP_NUM;                              //显示次数
  50. unsigned char KEEP, KEEP_NUM;                                                 //自动增益选择
  51. int xdata FFT_REAL[SAMPLE_NUM];                      //FFT运算结果实部
  52. int xdata FFT_IMAGE[SAMPLE_NUM];                     //FFT运算结果虚部
  53. bit SWITCH_ON;
  54. /**************************************************************
  55. *名                称:delay
  56. *功                能:微秒级延时
  57. **************************************************************/
  58. void Delay(unsigned int i)
  59. {
  60.         while(i--);
  61. }
  62. /**************************************************************
  63. *名                称:Delay_ms
  64. *功                能:毫秒级延时
  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;                        //设为AD转换
  81. }
  82. /**************************************************************
  83. *名                称:Timer0Init
  84. *功                能:定时器0初始化100us定时
  85. **************************************************************/
  86. void TimerInit(void)                //100微秒@33.000MHz
  87. {
  88.         AUXR = 0XC0;                        //定时器0-1T,定时器1-12T
  89.         TMOD = 0X00;                        //定时器0/1-方式0-16位自动重装
  90.         TL0 = 0X16;                                //定时器0-定时170us-显示幅值
  91.         TH0 = 0Xea;                               
  92.         TL1 = 0X1C;                                //定时器1-定时1ms-检测开关状态
  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;                        //显示前先关闭
  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转换结果
  233. ************************************************/
  234. unsigned char ReadADC(void)
  235. {
  236.         ADC_CONTR = ADC_POWER + ADC_START;           //启动转换
  237.         Delay(50);                                   
  238.         while(!(ADC_CONTR & ADC_FLAG));              //等待转换结束
  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时分蝶式算法
  288. {
  289. //         unsigned char i, j, r, m1, m2, m3, m4, k1, k2;       //分别为:级号,蝶群号,运算蝶号,蝶群总数,蝶群长度,运算蝶数,蝶群址,蝶址
  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. *功                能;显示动画
  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. *功                能:主函数
  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. *功                能:定时器0中断服务程序-显示
  498. ************************************************/
  499. void Timer0Interrupt() interrupt 1
  500. {
  501.         Display();
  502.         Delay(300);
  503. }
  504. /************************************************
  505. *名                称:Timer1Interrupt
  506. *功                能:定时器1中断服务程序-检测开关状态
  507. ************************************************/
  508. void Timer1Interrupt() interrupt 3
  509. {
  510.         if(SWITCH == 1)
  511.                 SWITCH_ON = 1;
  512.         if(SWITCH == 0)
  513.                 SWITCH_ON = 0;
  514. }
复制代码


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多