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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自制音樂頻譜-帶源碼 帶視頻

  [復制鏈接]
跳轉到指定樓層
樓主
      看到論壇上有很多朋友做了音樂頻譜,感覺很炫,于是也模仿著做了一個。在制作過程中,從網上查了很多資料,得到很多幫助。我要非常感謝那些辛勤付出的網友們,是你們無私的付出讓我們可以站在更高的起點奔跑。詩經有云:投我以木桃,報之以瓊瑤。如果一味的索取,泉源也會枯竭。故將我制作的所有資料傳上來,以作為對那些幫助過我的網友的答謝,也希望看到此貼的人能將此一做法傳承下去, 為論壇貢獻自己的一份力量。
效果圖:

視頻:

這個作品的制作可以分為三個過程:1、焊接LED點陣;2、設計控制電路;3、編程
所謂音樂頻譜就是將音樂的各個頻率分量顯示出來,LED點陣的水平軸代表各個頻率,豎直軸代表強度。從下面的圖中可以看出,該點陣大小為16*30(本來要做16*32,限于萬用板大小只能容下30列)。每兩列為一組,共15組,由于是陰極接在一起,姑且稱之為共陰極組;同理,每一行的陽極接在一起,稱為共陽極組,共16組。
點陣接線圖:

正面:

(圍成圓圈的燈是七彩快閃LED,只要接上電源,其顏色自動變換。)
背面:

從圖中可以看到,所有的陰極線(15根)、陽極線(16根) 都用排針引出來,再用杜邦線就可以和控制板相連。
控制電路圖:

單片機用的是ATMEGA324PA(內部晶振,8MHZ),只用到通用IO功能,移植到其他單片機上也很方便。基本控制思路:掃描。每一時刻只讓一個共陰極組接地,其它接高電平,從左至右依次選通每個共陰極組。每次選中共陰極組后,需要對其陽極寫入數據,由于有16行,需要寫入兩個字節。假如以上方為高字節,我想讓選中的共陰極組下面的9行燈亮,則應往陽極段寫入的兩個字節為:0x01,0xff。控制電路采用了4個鎖存器74HC573,2個ULN2803(八路達林頓管,其實是一個8路反向器,可以承受大電流 ) 。左邊兩個573用來對陽極寫入數據,右邊兩個573和2803接在一起,用來選通共陰極組。4個573的數據輸入端都連到一起,接在單片機的PB口。573還有一個選通端LE,當其為高電平時,可以對其寫入數據,低電平時輸出鎖存。將其作為片選(SS0,SS1,SS2,SS3)依次接單片機PA0,PA1,PA2,PA3。每次只讓一個片選為1,就可以對每個573分開寫入數據了。
最后說說編程。用了一個聲音模塊采集聲音,聲音模塊 原理為:麥克接收聲音,OUT端輸出聲音信號波形。OUT端接在單片機的PA7(AD轉換端口)上。程序的循環中,先進行32次AD采樣,得到32(必須是2的n次方)個采樣值,做快速傅里葉變換,得到32個頻率的強度,由于是前后對稱的,只取其前15個頻率的強度,經過幅值調整(調為0~16),在15個共陰極組上依次顯示出來。

評分

參與人數 1黑幣 +15 收起 理由
_4061N_ + 15 絕世好帖!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏21 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:70481 發表于 2014-12-17 14:42 | 只看該作者
1、<main.c>
主函數(AD轉換,FFT變換)
  1. #define   F_CPU  8  //可定義為你所用的晶振頻率(單位Mhz)
  2. #include <ioavr.h>
  3. #include "delay.h"
  4. #include "data.h"
  5. #include "display.h"
  6. #define DATA PORTB
  7. #define SS0 PORTA_Bit0
  8. #define SS1 PORTA_Bit1
  9. #define SS2 PORTA_Bit2
  10. #define SS3 PORTA_Bit3
  11. #define pi 3.141592654
  12. #include<math.h>//要調入數學(和諧)運算的頭文件
  13. //定義復數結構
  14. struct compx
  15. {
  16.   float real;
  17.   float imag;
  18. };
  19. //定義復數乘法
  20. struct compx EE(struct compx a,struct compx b)
  21. {
  22.   struct compx c;
  23.   c.real=a.real*b.real-a.imag*b.imag;
  24.   c.imag=a.real*b.imag+a.imag*b.real;
  25.   return(c);
  26. }
  27. //定義復數求模
  28. float cmplxabs(struct compx a)
  29. {
  30.   float b;
  31.   b=sqrt(a.real*a.real+a.imag*a.imag);
  32.   return(b);
  33. }
  34. //FFT子程序
  35. //入口:復數數組指針和點數。
  36. //出口:原復數數組,取模后為強度,可用于頻譜。
  37. void FFT(struct compx *xin,unsigned int N)
  38. {
  39.   int f,m,nv2,nm1,i,k,j=1,l;
  40.   int le,lei,ip;
  41.   struct compx v,w,t;
  42.   nv2=N/2;
  43.   f=N;
  44.   for(m=1;(f=f/2)!=1;m++);
  45.   nm1=N-1;
  46.   for(i=1;i<=nm1;i++)
  47.   {
  48.     if(i<j)
  49.       {
  50.         t=xin[j-1];
  51.         xin[j-1]=xin[i-1];
  52.         xin[i-1]=t;
  53.       }
  54.     k=nv2;
  55.     while(k<j){j=j-k;k=k/2;}
  56.     j=j+k;
  57.   }
  58.   /* FFT*/
  59.   for(l=1;l<m;l++)
  60.   {
  61.     le=(int)pow(2.0,l);
  62.     lei=le/2;
  63.     v.real=1.0;v.imag=0.0;
  64.     w.real=cos(pi/lei);w.imag=-sin(pi/lei);
  65.     for(j=1;j<=lei;j++)
  66.     {
  67.       for(i=j;i<=N;i+=le)
  68.       {
  69.         ip=i+lei;
  70.         t=EE(xin[ip-1],v);
  71.         xin[ip-1].real=xin[i-1].real-t.real;
  72.         xin[ip-1].imag=xin[i-1].imag-t.imag;
  73.         xin[i-1].real=xin[i-1].real+t.real;
  74.         xin[i-1].imag=xin[i-1].imag+t.imag;
  75.       }
  76.       v=EE(v,w);
  77.     }
  78.   }
  79. }
  80. void ADC_Init()
  81. {
  82.   ADCSRA=0xE3;//ADC使能,開始轉換,自動觸發轉換,中斷bit3,8分頻
  83.   ADCSRB=0x00;//自由轉換模式
  84.   ADMUX=0x47;//基準電壓Internal 1.1V Voltage,通道0 4n通道n
  85. }
  86. char s[15][2]={0};
  87. void start()
  88. {
  89.   flash2(1);
  90.   flash4(1);
  91.   flash5(5);
  92. }
  93. void end()
  94. {
  95.   scroll(67,word,1);
  96.   flash2(1);
  97.   while(1)xiaolian(5);
  98. }
  99. char counter=0;
  100. #pragma vector=TIMER1_OVF_vect
  101. __interrupt void TIMER1_OVF_ISR()
  102. {
  103.   TCNT1=0;//8.4s
  104.     counter++;
  105.   if(counter==28)
  106.     end();
  107. }
  108. void TIMER1_INIT()//TIMER1 16位定時器
  109. {
  110.   TCNT1=0;
  111.   TIMSK1=0x01;//T1溢出中斷使能
  112.   SREG=0x80;//總中斷使能
  113.   TCCR1A=0x00;
  114.   TCCR1B=0x05;//1024分頻,開始計數
  115. }
  116. struct compx ss[32];
  117. char w=0,bar[15]={0};
  118. unsigned int t,tL,tH;
  119. void main()
  120. {
  121.   PORTA=0x00;
  122.   DDRA=0x0f;  
  123.   PORTB=0x00;
  124.   DDRB=0xFF;
  125.   ADC_Init();
  126.   start();
  127.   TIMER1_INIT();
  128.   while(1)
  129.   {   
  130.     tL=ADCL;
  131.     tH=ADCH<<8;
  132.     t=tH+tL;
  133.     ss[w].real=(float)t;//采樣結果送實部,注意數據類型轉換
  134.     ss[w].imag=0;
  135.     w++;
  136.     for(char i=1;i<10;i++)refresh(bar);
  137.     if(w==32)
  138.     {
  139.       w=0;
  140.       clear();
  141.       FFT(ss,32);
  142.       unsigned int sum;
  143.       for(char i=1;i<=15;i++)sum+=cmplxabs(ss);
  144.       sum/=15;//平均值
  145.       for(char i=0;i<=14;i++)
  146.       {
  147.         char temp=(char)(cmplxabs(ss[i+1])/250);
  148.         if(temp>16)temp=16;
  149.         if(bar>temp)
  150.           bar-=1;
  151.         else
  152.         {
  153.           bar=temp;
  154.         }
  155.       }
  156.     }
  157.   }
  158. }
復制代碼
回復

使用道具 舉報

板凳
ID:70481 發表于 2014-12-17 14:43 | 只看該作者
2、<dasplay.c>
底層驅動函數、動畫顯示函數、刷新函數

  1. #define   F_CPU  8 //可定義為你所用的晶振頻率(單位Mhz)#include <ioavr.h>
  2. #include "delay.h"
  3. #include "data.h"
  4. #define DATA PORTD
  5. #define SS0 PORTA_Bit0
  6. #define SS1 PORTA_Bit1
  7. #define SS2 PORTA_Bit2
  8. #define SS3 PORTA_Bit3
  9. void clear()
  10. {
  11.       PORTA&=0XF0;
  12.       PORTD=0X00;
  13.       PORTA|=0X03;//SS0,SS1
  14.       PORTA&=0XF0;
  15. }
  16. void clear_all()//全部清除
  17. {
  18.   for(char i=0;i<15;i++)
  19.   {
  20.     s[0]=0;
  21.     s[1]=0;
  22.   }
  23. }
  24. void refresh(char *p)//刷新頻譜
  25. {
  26.   char k=0,tempU,tempD;
  27.     k=0;

  28.     PORTA&=0XF0;
  29.     PORTD=0X00;
  30.     PORTA|=0X02;//SS1  
  31.     for(char i=0;i<=6;i++)
  32.     {
  33.       tempU=0;tempD=0;  
  34.       if(p[k]>8)
  35.       {
  36.         for(char j=0;j<p[k]-8;j++)tempU+=(1<<j);
  37.         tempD=0xff;
  38.       }
  39.       else
  40.       {
  41.         tempU=0;
  42.         for(char j=0;j<p[k];j++)tempD+=(1<<j);
  43.       }

  44.       PORTA&=0XF0;
  45.       PORTD=0X00;
  46.       PORTA|=0X0c;//SS2,SS3         

  47.       PORTA&=0XF0;
  48.       PORTD=(1<<i);
  49.       PORTA|=0X01;//SS0              

  50.       PORTA&=0XF0;
  51.       PORTD=tempD;
  52.       PORTA|=0X04;//SS2 下8行   

  53.       PORTA&=0XF0;
  54.       PORTD=tempU;
  55.       PORTA|=0X08;//SS3  上8行   
  56.       //delay_ms(500);
  57.       k++;
  58.     }   

  59.     delay_us(30);
  60.     PORTA&=0XF0;
  61.     PORTD=0X00;
  62.     PORTA|=0X0c;//SS2,SS3

  63.     PORTA&=0XF0;
  64.     PORTD=0X00;
  65.     PORTA|=0X01;//SS0   
  66.     for(char i=0;i<=7;i++)
  67.     {
  68.       tempU=0;tempD=0;
  69.       if(p[k]>8)
  70.       {
  71.         for(char j=0;j<p[k]-8;j++)tempU+=(1<<j);
  72.         tempD=0xff;
  73.       }
  74.       else
  75.       {
  76.         tempU=0;
  77.         for(char j=0;j<p[k];j++)tempD+=(1<<j);
  78.       }           

  79.       PORTA&=0XF0;
  80.       PORTD=0X00;
  81.       PORTA|=0X0c;//SS2,SS3                    

  82.       PORTA&=0XF0;
  83.       PORTD=(1<<i);
  84.       PORTA|=0X02;//SS1     

  85.       PORTA&=0XF0;
  86.       PORTD=tempD;
  87.       PORTA|=0X04;//SS2  下8行  
  88.       delay_us(10);

  89.       PORTA&=0XF0;
  90.       PORTD=tempU;
  91.       PORTA|=0X08;//SS3 上8行     
  92.       k++;
  93.     }
  94.     delay_us(30);
  95.   }
  96. }
  97. void show(char p[15][2])//顯示圖片
  98. {
  99.   char k=0;
  100.     k=0;

  101.     PORTA&=0XF0;
  102.     PORTD=0X00;
  103.     PORTA|=0X02;//SS1  
  104.     for(char i=0;i<=6;i++)
  105.     {         
  106.       PORTA&=0XF0;
  107.       PORTD=0X00;
  108.       PORTA|=0X0c;//SS2,SS3         

  109.       PORTA&=0XF0;
  110.       PORTD=(1<<i);
  111.       PORTA|=0X01;//SS0

  112.       PORTA&=0XF0;
  113.       PORTD=p[k][0];
  114.       PORTA|=0X08;//SS3  上8行

  115.       PORTA&=0XF0;
  116.       PORTD=p[k][1];
  117.       PORTA|=0X04;//SS2 下8行            
  118.       k++;
  119.     }        
  120.     PORTA&=0XF0;
  121.     PORTD=0X00;
  122.     PORTA|=0X0c;//SS2,SS3

  123.     PORTA&=0XF0;
  124.     PORTD=0X00;
  125.     PORTA|=0X01;//SS0   
  126.     for(char i=0;i<=7;i++)
  127.     {        

  128.       PORTA&=0XF0;
  129.       PORTD=0X00;
  130.       PORTA|=0X0c;//SS2,SS3                    

  131.       PORTA&=0XF0;
  132.       PORTD=(1<<i);
  133.       PORTA|=0X02;//SS1

  134.       PORTA&=0XF0;
  135.       PORTD=p[k][0];
  136.       PORTA|=0X08;//SS3  上8行

  137.       PORTA&=0XF0;
  138.       PORTD=p[k][1];
  139.       PORTA|=0X04;//SS2 下8行   
  140.       k++;
  141.     }
  142.   }
  143. }

  144. void clear_dot(char x,char y)//x:0~14 y:0~15清除點
  145. {
  146.   if(y>=8)
  147.   {
  148.     s[x][0]&=~(1<<(y-8));
  149.   }
  150.   else
  151.   {
  152.     s[x][1]&=~(1<<y);
  153.   }
  154. }
  155. void set_dot(char x,char y)//x:0~14 y:0~15顯示點
  156. {
  157.   if(y>=8)
  158.   {
  159.     s[x][0]|=1<<(y-8);
  160.   }
  161.   else
  162.   {
  163.     s[x][1]|=1<<y;
  164.   }
  165. }
  166. void set_dot(char x,char y,char q[15][2])//x:0~14 y:0~15
  167. {
  168.   if(y>=8)
  169.   {
  170.     q[x][0]|=1<<(y-8);
  171.   }
  172.   else
  173.   {
  174.     q[x][1]|=1<<y;
  175.   }
  176. }
  177. void rise(char p[15][2],char n)//n:1~15 圖像上移n行
  178. {
  179.   unsigned int temp;
  180.   char q[15][2]={0};
  181.   for(char j=0;j<15;j++)
  182.   {
  183.     temp=(int)p[j][0]*256+p[j][1];
  184.     temp<<=n;
  185.     q[j][0]=temp/256;
  186.     q[j][1]=temp%256;
  187.   }
  188.   for(long i=0;i<300;i++)show(q);
  189.   clear();
  190. }
  191. void flash1(int t)//列右移
  192. {
  193.   for(int v=0;v<t;v++)
  194.   {
  195.     clear_all();
  196.     s[0][0]=0xff;
  197.     s[0][1]=0xff;
  198.     for(char j=0;j<15;j++)
  199.     {
  200.       s[(j+1)%15][0]=s[j][0];
  201.       s[(j+1)%15][1]=s[j][1];
  202.       s[j][0]=0x00;
  203.       s[j][1]=0x00;
  204.       for(long i=0;i<400;i++)show(s);
  205.     }
  206.   }
  207. }
  208. void flash2(long t)//縮小的圈
  209. {
  210.   signed char x=0,y=15;
  211.   for(int v=0;v<t;v++)
  212.   {
  213.     clear_all();
  214.     x=0;y=15;
  215.     for(char i=0;i<15;i++)
  216.     {
  217.       while(x<15-i)
  218.       {
  219.         set_dot(x,y);
  220.         x++;
  221.         for(int i=0;i<100;i++)show(s);
  222.       }
  223.       x--;
  224.       while(y>=i)
  225.       {
  226.         set_dot(x,y);
  227.         y--;
  228.         for(int i=0;i<100;i++)show(s);
  229.       }
  230.       y++;
  231.       while(x>=i)
  232.       {
  233.         set_dot(x,y);
  234.         x--;
  235.         for(int i=0;i<100;i++)show(s);
  236.       }
  237.       x++;
  238.       while(y<15-i)
  239.       {
  240.         set_dot(x,y);
  241.         y++;
  242.         for(int i=0;i<100;i++)show(s);
  243.       }
  244.       y--;
  245.     }
  246.   }
  247. }
  248. void xiaolian(int t)//笑臉
  249. {
  250.   for(int v=0;v<t;v++)
  251.   {
  252.     for(long i=0;i<5000;i++)show(xiaolian1);
  253.     for(long i=0;i<2000;i++)show(xiaolian2);
  254.   }
  255.   //for(long i=0;i<5000;i++)show(xiaolian1);
  256. }
  257. void flash3(long t)//“RUN”垂直落下
  258. {
  259.   for(int v=0;v<t;v++)
  260.   {
  261.     for(signed char i=15;i>=0;i--)rise(run,i);
  262.     for(long i=0;i<20000;i++)show(run);
  263.   }
  264. }
  265. void flash4(long t)//“RUN”筆畫書寫
  266. {
  267.   int dd=200;
  268.   for(int v=0;v<t;v++)
  269.   {
  270.     clear_all();
  271.     for(signed char i=15;i>=1;i--)
  272.     {
  273.       set_dot(0,i);
  274.       for(int i=0;i<dd;i++)show(s);
  275.     }
  276.     for(signed char i=1;i<=3;i++)
  277.     {
  278.       set_dot(i,15);
  279.       for(int i=0;i<dd;i++)show(s);
  280.     }
  281.     for(signed char i=14;i>=9;i--)
  282.     {
  283.       set_dot(3,i);
  284.       for(int i=0;i<dd;i++)show(s);
  285.     }
  286.     for(signed char i=3;i>=1;i--)
  287.     {
  288.       set_dot(i,9);
  289.       for(int i=0;i<dd;i++)show(s);
  290.     }
  291.     for(signed char i=8;i>=7;i--)
  292.     {
  293.       set_dot(1,i);
  294.       for(int i=0;i<dd;i++)show(s);
  295.     }
  296.     for(signed char i=7;i>=5;i--)
  297.     {
  298.       set_dot(2,i);
  299.       for(int i=0;i<dd;i++)show(s);
  300.     }
  301.     for(signed char i=5;i>=1;i--)
  302.     {
  303.       set_dot(3,i);
  304.       for(int i=0;i<dd;i++)show(s);
  305.     }
  306.     for(int i=0;i<2000;i++)show(s);
  307.     for(signed char i=15;i>=2;i--)
  308.     {
  309.       set_dot(5,i);
  310.       for(int i=0;i<dd;i++)show(s);
  311.     }  
  312.     for(signed char i=6;i<=7;i++)
  313.     {
  314.       set_dot(i,1);set_dot(i,2);
  315.       for(int i=0;i<dd;i++)show(s);
  316.     }  
  317.     for(signed char i=2;i<=15;i++)
  318.     {
  319.       set_dot(8,i);
  320.       for(int i=0;i<dd;i++)show(s);
  321.     }  
  322.     for(int i=0;i<2000;i++)show(s);
  323.     for(signed char i=15;i>=1;i--)
  324.     {
  325.       set_dot(10,i);
  326.       for(int i=0;i<dd;i++)show(s);
  327.     }
  328.     for(signed char i=13;i>=11;i--)
  329.     {
  330.       set_dot(11,i);
  331.       for(int i=0;i<dd;i++)show(s);
  332.     }  
  333.     for(signed char i=10;i>=7;i--)
  334.     {
  335.       set_dot(12,i);
  336.       for(int i=0;i<dd;i++)show(s);
  337.     }  
  338.     for(signed char i=6;i>=3;i--)
  339.     {
  340.       set_dot(13,i);
  341.       for(int i=0;i<dd;i++)show(s);
  342.     }   
  343.     for(signed char i=1;i<=15;i++)
  344.     {
  345.       set_dot(14,i);
  346.       for(int i=0;i<dd;i++)show(s);
  347.     }  
  348.     for(int i=0;i<2000;i++)show(s);
  349.   }
  350. }
  351. void scroll(char l,char p[][2],char t)//滾屏
  352. {
  353.   for(char j=0;j<l;j++)
  354.   {
  355.     for(int i=0;i<3200;i++)show(p);
  356.     p+=2;
  357.   }
  358. }
  359. void flash5(long t)//“RUN”閃爍
  360. {
  361.   for(int v=0;v<t;v++)
  362.   {
  363.     for(int i=0;i<1000;i++)show(run);
  364.     clear();
  365.     delay_ms(50);
  366.   }
  367. }
復制代碼
回復

使用道具 舉報

地板
ID:70481 發表于 2014-12-17 14:43 | 只看該作者
3、<data.c>
存放需要顯示的漢字字模

  1. char word[][2]=
  2. {
  3. 0x08,0x08,0x0b,0x30,0x08,0xc2,
  4. 0xff,0xff,0x08,0xc0,0x2b,0x30,
  5. 0x18,0x08,
  6. 0x00,0x00,
  7. 0x02,0x03,0xfa,0x7c,
  8. 0xaa,0x0c,0xab,0xfe,0xaa,0x63,
  9. 0xfa,0x63,0x02,0x01,0x00,0x01,//求是
  10. 0x00,0x00,

  11. 0x04,0x00,0x1b,0xff,0xe4,0x03,
  12. 0x33,0xc3,0x08,0x07,0x0f,0xf8,
  13. 0x00,0x02,0xff,0xff,
  14. 0x00,0x00,
  15. 0x32,0x48,0x2a,0x52,0xe7,0xff,
  16. 0x2a,0x50,0x32,0x48,0x0f,0xff,
  17. 0x12,0x00,0x23,0xff,0x42,0x00,//創新
  18. 0x00,0x00,0x00,0x00,0x00,0x00,

  19. 0x21,0x04,0xff,0xff,0x00,0x04,
  20. 0x3f,0xfa,0x65,0x12,0xa5,0x11,
  21. 0x3d,0xf1,
  22. 0x00,0x00,
  23. 0x00,0x01,0x08,0x08,
  24. 0x0b,0x30,0x08,0xc2,0xff,0xff,
  25. 0x08,0xc0,0x2b,0x30,0x18,0x08,//追求
  26. 0x00,0x00,

  27. 0x00,0x08,0x0f,0xc8,0x09,0x48,
  28. 0xf9,0x7f,0x49,0x48,0x4f,0xc8,
  29. 0x00,0x00,
  30. 0x02,0x0c,0x12,0x38,0xff,0xfc,
  31. 0x12,0x44,0x02,0x04,0x1f,0xfa,
  32. 0x10,0x92,0xff,0xe2,0x52,0x19,//卓越
  33. 0x00,0x00,0x00,0x00,0x00,0x00,

  34. 0x24,0x10,0x24,0x22,0x7f,0xff,
  35. 0x84,0x88,0x7f,0xf0,0x24,0x3e,
  36. 0x14,0xc3,
  37. 0x00,0x00,
  38. 0x08,0x00,0x3f,0xff,
  39. 0xc0,0x00,0x17,0xff,0x28,0x00,
  40. 0x20,0x00,0x20,0x02,0x3f,0xff,//我們
  41. 0x00,0x00,

  42. 0x02,0x03,0xfa,0x7c,
  43. 0xaa,0x0c,0xab,0xfe,0xaa,0x63,
  44. 0xfa,0x63,0x02,0x01,0x00,0x01,//是
  45. 0x00,0x00,

  46. 0xff,0xfe,0x83,0x80,0x82,0xe0,
  47. 0xfe,0x3e,0x00,0x00,0xff,0xfc,
  48. 0x00,0x06,0x00,0x06,0xff,0xfc,
  49. 0x00,0x00,0xff,0xfe,0x38,0x00,
  50. 0x07,0x80,0x00,0x78,0xff,0xfe,//RUN
  51. 0x00,0x00,0x00,0x00,

  52. 0x7f,0xfe,0x44,0x12,0x44,0x62,
  53. 0x44,0x8a,0x7f,0xfe,0x44,0x02,
  54. 0x7f,0xfe,0x00,0x00,0x7f,0xfe,
  55. 0x44,0x82,0x7b,0x0c,0x00,0x30,
  56. 0x7f,0xc0,0x00,0x30,0x00,0x0e,//團隊

  57. 0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x00,0x00,0x00,0x00,0x00,
  59. 0x00,0x00,0x00,0x00,0x00,0x00,
  60. 0x00,0x00,0x00,0x00,0x00,0x00,
  61. 0x00,0x00,0x00,0x00,0x00,0x00,
  62. };
復制代碼
回復

使用道具 舉報

5#
ID:70481 發表于 2014-12-17 14:44 | 只看該作者
本帖最后由 xiaoyao 于 2014-12-17 14:45 編輯

4、頭文件 有好幾個文件
(1)<delay.h>
#ifndef __IAR_DELAY_H#define __IAR_DELAY_H
#include <intrinsics.h>
#define   delay_us(x)   __delay_cycles ((unsigned long)(x * F_CPU))
#define   delay_ms(x)   __delay_cycles ((unsigned long)(x * F_CPU*1000UL))
#define   delay_s(x)    __delay_cycles ((unsigned long)(x * F_CPU*1000000UL))
#endif


(2)<data.h>
#ifndef __IAR_DATA_H
#define __IAR_DATA_H
extern char s[15][2];
extern char run[15][2];
extern char tuandui[15][2];
extern char chuanxin1[15][2];
extern char chuanxin2[18][2];
extern char qiushi[15][2];
extern char women[15][2];
extern char zhuiqiu[15][2];
extern char zhuoyue[15][2];
extern char xiaolian1[15][2];
extern char xiaolian2[15][2];
extern char word[][2];
#endif



(3)<display.h>
#ifndef __IAR_DISSPLAY_H
#define __IAR_DISPLAY_H
extern void refresh(char *p);
extern void clear_all();
extern void clear();
extern void show(char p[15][2]);
extern void refresh1(char *p);
extern void clear_dot(char x,char y,char q[15][2]);//x:0~14 y:0~15
extern void set_dot(char x,char y,char q[15][2]);//x:0~14 y:0~15
extern void clear_dot(char x,char y);//x:0~14 y:0~15
extern void set_dot(char x,char y);//x:0~14 y:0~15
extern void rise(char p[15][2],char n);//n:1~15
extern void flash1(int t);
extern void flash2(long t);
extern void xiaolian(int t);
extern void flash3(long t);
extern void flash4(long t);
extern void scroll(char l,char p[][2],char t);
extern void flash5(long t);
#endif

回復

使用道具 舉報

6#
ID:71697 發表于 2015-1-6 01:02 | 只看該作者
真好看  不知道搞小一點程序該怎么改
回復

使用道具 舉報

7#
ID:72901 發表于 2015-1-28 12:56 | 只看該作者
不錯,值得學習。51hei有你更精彩!!
回復

使用道具 舉報

8#
ID:73711 發表于 2015-4-12 19:04 | 只看該作者
謝謝  分享  51單片機可以直接播放MP3文件嗎
回復

使用道具 舉報

9#
ID:79481 發表于 2015-5-10 01:17 | 只看該作者
收藏備用!!!!!!!!!!!!!
回復

使用道具 舉報

10#
ID:79544 發表于 2015-5-10 19:38 | 只看該作者
牛人,學習啦!!!!!!!!!!!!!!!
回復

使用道具 舉報

11#
ID:76502 發表于 2015-5-29 13:02 | 只看該作者
支持下         
回復

使用道具 舉報

12#
ID:72624 發表于 2015-5-31 19:02 | 只看該作者
太好了,就是不知道用64X16的燈板可以用嗎
回復

使用道具 舉報

13#
ID:78841 發表于 2015-6-1 20:40 | 只看該作者
能換別的歌曲嗎
回復

使用道具 舉報

14#
ID:81667 發表于 2015-6-1 22:11 | 只看該作者
牛氣! 我們學校要這樣的仿真實物!
回復

使用道具 舉報

15#
ID:92858 發表于 2015-11-28 12:40 | 只看該作者
樓主為啥不用74hc595和138
回復

使用道具 舉報

16#
ID:104503 發表于 2016-1-26 22:39 | 只看該作者
真心覺得不錯
回復

使用道具 舉報

17#
ID:105742 發表于 2016-2-18 15:00 | 只看該作者
厲害,真想學
回復

使用道具 舉報

18#
ID:124243 發表于 2016-7-4 20:59 | 只看該作者
樓主技術不錯哦   膜拜  學習學習  
回復

使用道具 舉報

19#
ID:138211 發表于 2016-9-1 22:35 | 只看該作者
來學習的,謝謝了!!1
回復

使用道具 舉報

20#
ID:136460 發表于 2016-9-5 09:10 | 只看該作者
膜拜  學習學習
回復

使用道具 舉報

21#
ID:136460 發表于 2016-9-5 09:11 | 只看該作者
真心覺得不錯
回復

使用道具 舉報

22#
ID:134810 發表于 2016-9-20 16:46 來自手機 | 只看該作者
洋氣,轉換過程學習借鑒
回復

使用道具 舉報

23#
ID:130561 發表于 2016-9-22 18:08 | 只看該作者
很厲害啊
回復

使用道具 舉報

24#
ID:145058 發表于 2016-11-19 10:08 | 只看該作者
厲害,可以借鑒來學習了
回復

使用道具 舉報

25#
ID:151305 發表于 2016-12-13 10:44 | 只看該作者
樓主不如一起打包了給鏈接,謝謝
回復

使用道具 舉報

26#
ID:153777 發表于 2016-12-13 22:34 | 只看該作者
謝謝  分享  51單片機可以直接播放MP3文件嗎
回復

使用道具 舉報

27#
ID:168651 發表于 2017-3-8 20:38 | 只看該作者
請問沒有單片機開發板如何下載進去呢
回復

使用道具 舉報

28#
ID:175439 發表于 2017-5-10 17:21 | 只看該作者
厲害,學習學習
回復

使用道具 舉報

29#
ID:199490 發表于 2017-5-15 11:26 | 只看該作者
好厲害,長見識
回復

使用道具 舉報

30#
ID:257489 發表于 2017-12-5 08:52 來自手機 | 只看該作者
感謝分享。。。。。
回復

使用道具 舉報

31#
ID:283159 發表于 2018-4-18 16:05 | 只看該作者
xiaoyao 發表于 2014-12-17 14:44
4、頭文件 有好幾個文件
(1)
#ifndef __IAR_DELAY_H#define __IAR_DELAY_H

不錯,程序有注釋就好啦
回復

使用道具 舉報

32#
ID:292103 發表于 2018-5-16 21:35 來自手機 | 只看該作者
好程序,值得一試究竟啊!
回復

使用道具 舉報

33#
ID:281465 發表于 2018-5-19 15:57 | 只看該作者
大贊樓主,連線不容易啊
回復

使用道具 舉報

34#
ID:353235 發表于 2018-6-17 22:39 | 只看該作者
牛人,不錯
回復

使用道具 舉報

35#
ID:33522 發表于 2018-7-9 16:38 | 只看該作者
學習一下
回復

使用道具 舉報

36#
ID:471573 發表于 2019-1-22 12:39 | 只看該作者
很好的學習資料!
回復

使用道具 舉報

37#
ID:453838 發表于 2019-1-22 14:17 | 只看該作者
強迫癥啊,這是全部代碼嗎?
回復

使用道具 舉報

38#
ID:566161 發表于 2019-6-18 21:29 | 只看該作者
請教一下大神哈。為什么說FFT轉換求得的32個頻率的強度是對稱的
回復

使用道具 舉報

39#
ID:566621 發表于 2019-6-19 11:43 來自手機 | 只看該作者
感謝分享收獲許多
回復

使用道具 舉報

40#
ID:13396 發表于 2019-9-3 22:13 | 只看該作者
謝謝 ,分享.
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 俺去俺来也www色官网cms | 欧美黄色一级毛片 | av网站在线播放 | 欧美一级免费看 | 日韩av中文 | 日日日日日日bbbbb视频 | 黄网免费看 | 亚洲精品一区二区网址 | 波多野结衣精品在线 | 国产一区二区精品在线 | 欧美性生交大片免费 | 搞黄视频免费看 | 午夜精品一区二区三区在线观看 | 天天色av| 精品九九 | 手机看片在线播放 | 色综合一区二区三区 | 精品亚洲一区二区三区 | 亚州成人 | 欧美性tv | 国产精品久久久久久久久久免费看 | 国产欧美一区二区精品忘忧草 | 在线免费小视频 | 99视频免费在线 | 成人av免费在线观看 | 国产精品久久精品 | 五月婷婷亚洲 | 亚洲午夜av | 日本高清精品 | 亚洲精品视频在线播放 | 欧美日韩国产一区二区三区 | 久久精品亚洲一区 | 欧美在线| 中文字幕伊人 | 欧美黑人国产人伦爽爽爽 | 日韩欧美三级电影在线观看 | 一级黄色片一级黄色片 | 亚洲精品一区二三区不卡 | 国产剧情一区二区三区 | 99精品免费视频 | 一区二区电影网 |