找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15098|回复: 23
打印 上一主题 下一主题
收起左侧

音乐频谱电路原理图与源程序分享

  [复制链接]
跳转到指定楼层
楼主
一个学习单片机的程序及电路
原理图上画的是16 x 8的,实物是16 x 12的,另外加的4行LED分别由由P1.6、P1.7、P5.4和P5.5控制。

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


音乐频谱电路图:


音乐频谱源程序:
  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. }
复制代码


评分

参与人数 4黑币 +70 收起 理由
7914251a + 10 很给力!
天0 + 5 赞一个!
爱玩的学旨 + 5 很给力
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:108508 发表于 2016-5-7 10:06 | 只看该作者
下载保留学习
回复

使用道具 举报

板凳
ID:84948 发表于 2016-5-14 14:14 | 只看该作者
多谢楼主的分享!~~
回复

使用道具 举报

地板
ID:61840 发表于 2016-6-15 23:19 | 只看该作者
不错的程序,学习学习
回复

使用道具 举报

5#
ID:136460 发表于 2016-9-1 05:36 来自手机 | 只看该作者
好人,天下好人多
回复

使用道具 举报

6#
ID:138343 发表于 2016-9-17 07:22 | 只看该作者
感谢楼主分享,最近在想关于频谱的显示问题,如同一行,假如第一列的不显示,而第二列的显示,在同一时间里这个问题怎么处理
回复

使用道具 举报

7#
ID:42417 发表于 2016-9-25 00:33 | 只看该作者
好东西,多谢楼主的分享!~~
回复

使用道具 举报

8#
ID:100826 发表于 2016-9-25 07:35 | 只看该作者
多谢楼主的分享!
回复

使用道具 举报

9#
ID:148612 发表于 2016-11-18 11:15 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

10#
ID:33848 发表于 2017-6-1 09:02 | 只看该作者
看上去似乎不错
回复

使用道具 举报

11#
ID:220055 发表于 2017-9-5 23:38 | 只看该作者
看上去似乎不错
回复

使用道具 举报

12#
ID:14237 发表于 2017-9-6 08:54 | 只看该作者
多谢楼主的分享!
回复

使用道具 举报

13#
ID:239055 发表于 2017-11-9 07:56 | 只看该作者
我又来了,谢谢楼主
回复

使用道具 举报

14#
ID:127160 发表于 2017-11-15 14:05 | 只看该作者
谢谢分享。
回复

使用道具 举报

15#
ID:229527 发表于 2017-11-23 10:53 | 只看该作者
谢谢楼主!
回复

使用道具 举报

16#
ID:128101 发表于 2018-8-1 21:07 | 只看该作者
感谢分享
回复

使用道具 举报

17#
ID:128101 发表于 2018-10-9 21:44 | 只看该作者
感谢分享 学习学习
回复

使用道具 举报

18#
ID:73030 发表于 2019-1-20 17:42 | 只看该作者
感谢楼主分享。
回复

使用道具 举报

19#
ID:524014 发表于 2019-6-11 18:42 | 只看该作者
下载保存,学习
回复

使用道具 举报

20#
ID:578423 发表于 2020-5-16 12:21 | 只看该作者
先顶再看,好东西
回复

使用道具 举报

21#
ID:53667 发表于 2020-5-22 06:08 | 只看该作者
谢谢分享,收下了慢慢研究
回复

使用道具 举报

22#
ID:78387 发表于 2020-6-2 00:30 来自手机 | 只看该作者
谢谢楼主分享!学习了
回复

使用道具 举报

23#
ID:653833 发表于 2020-10-24 20:12 | 只看该作者
我想知道三极管的作用,,,
回复

使用道具 举报

24#
ID:833128 发表于 2020-12-11 08:45 | 只看该作者
收藏了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表