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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15439|回復: 14
打印 上一主題 下一主題
收起左側(cè)

單片機聲光電子琴,含原理圖,源代碼(c代碼),成品圖

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:101345 發(fā)表于 2018-5-17 16:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是之前做過的一個聲光電子琴小制作;
很有意思;
51單片機的,拿來和大家一起分享一下




電路原理圖如下:

單片機源程序如下:
  1. /*
  2. 8個按鍵發(fā)出8個基本音,
  3. 能播放內(nèi)置音樂,音樂跟隨燈光閃爍
  4. */
  5. #include<reg52.h>
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. sbit speaker=P1^4;//喇叭接30腳
  9. sbit key1=P1^0;//流水燈按鍵(暫時)
  10. sbit key2=P1^1;//播放音樂按鍵(暫定)
  11. uchar a,b,num1,s1num,n1,n2;
  12. uchar qushu=0;
  13. char num;//定義num為可以負數(shù)
  14. uchar code yinfu[]={0xfb,0xe9,      //Do
  15.                    0xfc,0x5c,      //Re
  16.                    0xfc,0xc1,      //Mi
  17.                    0xfc,0xef,      //Fa
  18.                    0xfd,0x45,      //So
  19.                    0xfd,0x92,      //La
  20.                    0xfd,0xd0,      //Si
  21.                    0xfd,0xee,      //Do#
  22.                                    0x00,0x00,           //間隔
  23. };
  24. uchar code shengri_tone[]={   1,0,1,2,1,4,3,0, //生日快樂音調(diào)
  25.                                    1,0,1,2,1,5,4,0,
  26.                                    1,0,1,8,6,4,3,2,0,
  27.                                    7,0,7,6,4,5,4,0       //0代表不發(fā)聲,即停頓;數(shù)字即為音調(diào)
  28. };
  29. uchar code laohu_tone[]={1,2,3,1,0,1,2,        //兩只老虎樂譜 40個音符
  30.                                         3,1,0,3,4,5,0,3,
  31.                                         4,5,0,5,6,5,4,3,
  32.                                         1,0,5,6,5,4,3,1,
  33.                                         0,3,2,1,0,3,2,1,0

  34. };
  35. uchar code yishan_tone[]={1,1,5,5,6,6,5,        //星星樂譜  54個音符
  36.                                                 0,4,4,3,3,2,2,
  37.                                                 1,0,5,5,4,4,3,
  38.                                                 3,2,0,5,5,4,4,
  39.                                                 3,3,2,0,1,1,5,5,
  40.                                                 6,6,5,0,4,4,3,
  41.                                                 3,2,2,1,0
  42. };
  43. uchar code shengri_beat[]={   24,1,24,48,48,48,72,5,//節(jié)拍
  44.                                    24,1,24,48,48,48,72,5,
  45.                                    24,1,24,48,48,48,48,72,5,
  46.                                    24,1,24,48,48,48,72,5    //節(jié)拍,即tone表各音調(diào)的延時
  47. };
  48. uchar code laohu_beat[]={   24,24,24,48,5,24,24,//節(jié)拍
  49.                                    24,48,5,24,24,48,5,24,
  50.                                     24,72,5,24,24,24,24,//節(jié)拍
  51.                                    24,48,5,24,24,24,24,24,72,
  52.                                                                      5,24,24,48,5,24,24,//節(jié)拍
  53.                                    72,5//節(jié)拍  //節(jié)拍,即tone表各音調(diào)的延時
  54. };
  55. uchar code yishan_beat[]={   24,24,24,24,24,24,48,//節(jié)拍
  56.                                    5,24,24,24,24,24,24,72,
  57.                                     5,24,24,24,24,24,24,//節(jié)拍
  58.                                    48,5,24,24,24,24,24,24,72,
  59.                                                                      5,24,24,24,24,24,24,//節(jié)拍
  60.                                    48,5,24,24,24,24,24,24,72,5//節(jié)拍,即tone表各音調(diào)的延時
  61. };
  62. uchar code ledtable[]={0x7f,0xbf,0xdf,0xef, //取反
  63. 0xf7,0xfb,0xfd,0xfe};//P0組口的發(fā)光二極管代碼(焊接過程可能會相反,具體更改)
  64. uchar code ledtable2[]={0x7f,0xbf,0xdf,0xef, //取反
  65. 0xf7,0xfb,0xfd,0xfe};//P2組口發(fā)光二極管代碼,相反!
  66. void check_key();//改為P3組為按鍵
  67. void keyscan();
  68. void turn();//順時針流動
  69. void back();
  70. void qianhou();
  71. void dangshuang();
  72. void delay(uint z);//延時函數(shù)聲明
  73. void delay1(void);//聲明第二個延時函數(shù)
  74. void play1(void);//播放生日快樂

  75. void main()
  76. {
  77.         s1num=0;//流水燈種類標志
  78.         key1=1;
  79.         key2=1;
  80.         TMOD=0x01;
  81.         TH0=a;
  82.         TL0=b;
  83.         ET0=1;//打開定時器,但是未允許中斷
  84.         TR0=1;
  85.         while(1)
  86.         {
  87.         check_key();
  88.         keyscan();
  89.         }
  90. }

  91. void time0() interrupt 1
  92. {
  93.         TH0=a;
  94.         TL0=b;
  95.         speaker=~speaker;
  96. }
  97. void check_key()
  98. {
  99.         P3=0xff;//先賦給P2組口高電平
  100.         switch(P3)//按下一個鍵相應4個燈亮
  101.         {
  102.                 case 0xfe:P0=0xee;P2=0x77;a=0xfb;b=0xe9;EA=1;break;//P0,P2組為發(fā)光二極管組
  103.                 case 0xfd:P0=0xdd;P2=0xbb;a=0xfc;b=0x5c;EA=1;break;//注意:EA不能改為TR0
  104.                 case 0xfb:P0=0xbb;P2=0xdd;a=0xfc;b=0xc1;EA=1;break;
  105.                 case 0xf7:P0=0x77;P2=0xee;a=0xfc;b=0xef;EA=1;break;
  106.                 case 0xef:P0=0xee;P2=0x77;a=0xfd;b=0x45;EA=1;break;
  107.                 case 0xdf:P0=0xdd;P2=0xbb;a=0xfd;b=0x92;EA=1;break;
  108.                 case 0xbf:P0=0xbb;P2=0xdd;a=0xfd;b=0xd0;EA=1;break;
  109.                 case 0x7f:P0=0x77;P2=0xee;a=0xfd;b=0xee;EA=1;break;
  110.                 default:EA=0;speaker=0;//P0=0xff;P2=0xff ;
  111.         }
  112. }
  113. void delay(uint z)
  114. {
  115.         uint x,y;
  116.         for(x=z;x>0;x--)
  117.         for(y=110;y>0;y--);
  118. }
  119. void keyscan()
  120. {
  121.           if(key1==0)
  122.           {
  123.                   delay(5);
  124.                 if(key1==0)
  125.                 {
  126.                         s1num++;
  127.                         while(!key1);
  128.                         if(s1num==1)
  129.                         {
  130.                                 turn();
  131.                         }
  132.                 }
  133.                 if(s1num==2)
  134.                 {
  135.                         back();
  136.                 }
  137.                 if(s1num==3)
  138.                 {
  139.                         qianhou();
  140.                 }
  141.                 if(s1num==4)
  142.                 {
  143.                         dangshuang();
  144.                 }
  145.                 if(s1num==5)
  146.                         s1num=1;
  147.           }
  148.                 if(key2==0)
  149.                 {
  150.                         delay(5);
  151.                         if(key2==0)
  152.                         {
  153.                                    qushu++;
  154.                                  if(qushu==4)
  155.                                 {
  156.                                          qushu=1;
  157.                             }
  158.                                  while(~key2);
  159.                                  play1();
  160.                         }                                         
  161.                
  162.                 }
  163. }

  164. void delay1(void)//第二個延時函數(shù)
  165. {
  166.        uchar n=15;
  167.        while(n--)
  168.        {
  169.               uchar i;
  170.               for(i=0;i<125;i++);
  171.        }
  172. }
  173. void play1(void)//播放生日快樂
  174. {

  175.        uchar m=0;
  176.        uchar s;     
  177.        uchar c=1;
  178.            P0=0xaa;
  179.            P2=0x55;
  180.            if(qushu==1)
  181.            {
  182.                while(1)
  183.                {
  184.                       EA=0;
  185.                       c=shengri_tone[m];                            //取音符
  186.                       s=shengri_beat[m];                      //取節(jié)拍
  187.                       a=yinfu[2*c-2];                           
  188.                       b=yinfu[2*c-1];                           
  189.                       EA=1;
  190.                       while(s--)
  191.                       {
  192.                              delay1();
  193.                                                  P0=~P0;
  194.                                                  P2=~P2;
  195.                       }
  196.                       m++;
  197.                       if(m>=33) return;                      //數(shù)值是shengri相關(guān)表中的元素數(shù)量  
  198.                }
  199.           }
  200.           else if(qushu==2)
  201.           {
  202.                    while(1)
  203.                {
  204.                       EA=0;
  205.                       c=laohu_tone[m];                            //取音符
  206.                       s=laohu_beat[m];                      //取節(jié)拍
  207.                       a=yinfu[2*c-2];                           
  208.                       b=yinfu[2*c-1];                           
  209.                       EA=1;
  210.                       while(s--)
  211.                       {
  212.                              delay1();
  213.                                                  P0=~P0;
  214.                                                  P2=~P2;
  215.                       }
  216.                       m++;
  217.                       if(m>=40) return;                      //數(shù)值是shengri相關(guān)表中的元素數(shù)量  
  218.                }
  219.           }  
  220.                     else if(qushu==3)
  221.           {
  222.                    while(1)
  223.                {
  224.                       EA=0;
  225.                       c=yishan_tone[m];                            //取音符
  226.                       s=yishan_beat[m];                      //取節(jié)拍
  227.                       a=yinfu[2*c-2];                           
  228.                       b=yinfu[2*c-1];                           
  229.                       EA=1;
  230.                       while(s--)
  231.                       {
  232.                              delay1();
  233.                                                  P0=~P0;
  234.                                                  P2=~P2;
  235.                       }
  236.                       m++;
  237.                       if(m>=48) return;                      //數(shù)值是shengri相關(guān)表中的元素數(shù)量  
  238.                }
  239.           }   
  240. }


  241. /*以下為N種流水燈流動花式*/
  242. void turn()//流水燈順時針走動(5次)
  243. {

  244.          for(num1=0;num1<8;num1++)
  245.          {
  246.          for(num=0;num<8;num++)
  247.          {
  248.                    P0=ledtable[num];
  249.                   delay(30);//時間暫定
  250.          }
  251.          P0=0xff;//之后關(guān)閉P1組
  252.          for(num=7;num>-1;num--)
  253.          {
  254.                  P2=ledtable2[num];
  255.                 delay(30);
  256.          }
  257.          P2=0xff;//之后關(guān)閉P2組
  258.          }
  259. }
  260. void back()//逆時針流動
  261. {
  262.         for(num1=0;num1<8;num1++)
  263.         {
  264.         for(num=0;num<8;num++)
  265.         {
  266.                 P2=ledtable[num];
  267.                 delay(30);
  268.         }
  269.         P2=0xff;
  270.         for(num=7;num>-1;num--)
  271.         {
  272.                 P0=ledtable2[num];
  273.                 delay(30);
  274.         }
  275.         P0=0xff;
  276.         }
  277. }
  278. void qianhou()//前后來回
  279. ……………………

  280. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
聲光電子琴.zip (8.96 MB, 下載次數(shù): 180)












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

使用道具 舉報

沙發(fā)
ID:331965 發(fā)表于 2018-5-23 00:10 來自手機 | 只看該作者
元件清單有嗎,還有供多少V電壓的???
回復

使用道具 舉報

板凳
ID:242960 發(fā)表于 2018-5-23 18:33 | 只看該作者
我下載了 什么都沒有(只有一個代碼) 我真的是心寒 心碎了 有沒有原理圖啊 仿真圖啊啊啊啊啊 求求求 可憐.JPG
回復

使用道具 舉報

地板
ID:1 發(fā)表于 2018-5-24 00:28 | 只看該作者
蜉蝣的夢鄉(xiāng) 發(fā)表于 2018-5-23 18:33
我下載了 什么都沒有(只有一個代碼) 我真的是心寒 心碎了 有沒有原理圖啊 仿真圖啊啊啊啊啊 求求求 可憐. ...

我剛看了一下 確實只有電路原理圖+代碼   沒有仿真
回復

使用道具 舉報

5#
ID:101345 發(fā)表于 2018-5-25 17:58 | 只看該作者
pan888 發(fā)表于 2018-5-23 00:10
元件清單有嗎,還有供多少V電壓的???

5V電源就ok了、

回復

使用道具 舉報

6#
ID:101345 發(fā)表于 2018-5-25 17:59 | 只看該作者
蜉蝣的夢鄉(xiāng) 發(fā)表于 2018-5-23 18:33
我下載了 什么都沒有(只有一個代碼) 我真的是心寒 心碎了 有沒有原理圖啊 仿真圖啊啊啊啊啊 求求求 可憐. ...

有原理圖的啊
回復

使用道具 舉報

7#
ID:367110 發(fā)表于 2018-7-8 20:14 | 只看該作者
蜉蝣的夢鄉(xiāng) 發(fā)表于 2018-5-23 18:33
我下載了 什么都沒有(只有一個代碼) 我真的是心寒 心碎了 有沒有原理圖啊 仿真圖啊啊啊啊啊 求求求 可憐. ...

為什么我下載沒有代碼啊。。。。。請問可以發(fā)一份嗎!156397614@qq.com拜托了!
回復

使用道具 舉報

8#
ID:437399 發(fā)表于 2018-12-1 22:26 | 只看該作者
有元件清單嗎,求~~~~
回復

使用道具 舉報

9#
ID:435783 發(fā)表于 2018-12-4 03:52 | 只看該作者
我下進去了怎么在亂叫,用蜂鳴器不行嗎
回復

使用道具 舉報

10#
ID:447455 發(fā)表于 2018-12-17 09:07 | 只看該作者
我想把每個獨立按鍵對應的燈設置為一顆,要怎么改這個程序呀?
回復

使用道具 舉報

11#
ID:432687 發(fā)表于 2019-4-22 16:05 來自手機
靈感和學習效果的完美頁面..我對這項創(chuàng)新感到非常驚訝好主意,和我們在一起!不幸的是,我不懂你的語言,我嚴重依賴翻譯。謝謝分享。

12#
ID:492586 發(fā)表于 2019-4-29 21:06 | 只看該作者
原理圖有錯誤,怎么改
回復

使用道具 舉報

13#
ID:551847 發(fā)表于 2019-5-31 15:11 | 只看該作者
有大神可以發(fā)一份完整代碼給我嗎 很急
回復

使用道具 舉報

14#
ID:510532 發(fā)表于 2019-6-1 01:07 來自手機 | 只看該作者
樓主強啊
回復

使用道具 舉報

15#
ID:868129 發(fā)表于 2020-12-26 09:57 | 只看該作者
請教一下
a=yinfu[2*c-2];                           
b=yinfu[2*c-1];
是什么意思呢?
回復

使用道具 舉報

16#
ID:868957 發(fā)表于 2020-12-28 10:14 | 只看該作者
額,就一個原理圖
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲伊人久久综合 | 丁香六月激情 | 四虎影院免费在线 | 91国内精品久久 | 色啪网 | 在线观看中文字幕 | 综合久久综合久久 | 久久久久资源 | 中文字幕一区二区三 | h肉视频| 亚洲一区在线日韩在线深爱 | 亚洲精品一区二区网址 | 亚洲精品久久久久中文字幕二区 | 一级免费毛片 | 99久久婷婷国产亚洲终合精品 | 国产精品亚洲成在人线 | 久久久这里都是精品 | 欧美午夜一区 | 成人亚洲精品久久久久软件 | 亚洲一区视频在线 | 男人天堂手机在线视频 | 国产精品成人在线观看 | 午夜精品一区二区三区在线视频 | 免费在线观看一区二区 | 国产资源在线视频 | 美日韩中文字幕 | 欧美视频免费 | 亚洲人在线 | 久久成人av电影 | 91精品一区二区三区久久久久久 | 最近中文字幕第一页 | 久久久久成人精品 | 国产婷婷精品av在线 | 午夜精品视频在线观看 | 超碰最新在线 | 国产精品欧美一区喷水 | 久久精品亚洲精品国产欧美kt∨ | aⅴ色国产 欧美 | 99精品久久久 | 亚洲区一区二 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 |