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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1639|回復: 0
收起左側

單片機電子琴Proteus仿真程序

[復制鏈接]
ID:688454 發表于 2020-4-19 15:44 | 顯示全部樓層 |閱讀模式
  1. #include <STC15F2K60S2.H>
  2. #include<intrins.h>
  3. //***************************用戶數據類型定義*********************************
  4. typedef unsigned int uint;
  5. typedef unsigned char uchar;
  6. //*****************************用戶引腳定義***********************************
  7. sbit led_dr = P3^3;
  8. sbit beep_dr = P3^7;
  9. //***************************共陽極數碼管段碼數組*****************************
  10. uchar code DigSegBuff[] =
  11. {
  12.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  13. };
  14. //******************************函數聲明區************************************
  15. void DelayMs(uint uiXms);          //有阻塞延時函數聲明
  16. void IniSystem();                  //系統初始化函數聲明
  17. void IniPeripheral();             //外圍器件初始化函數聲明
  18. void LedFlick(uint uiLedFlickNum);//LED閃爍函數聲明
  19. void DelayDo_956us();                //發do音的延時函數聲明
  20. void DelayRe_852us();                //發re音的延時函數聲明
  21. void DelayMi_759us();                //發mi音的延時函數聲明
  22. void DelayFa_716us();                //發fa音的延時函數聲明
  23. void DelaySo_638us();                //發so音的延時函數聲明
  24. void DelayLa_568us();                //發la音的延時函數聲明
  25. void DelayXi_507us();                //發xi音的延時函數聲明
  26. void DelaySo_1276us();       //發低音SO的延時函數聲明
  27. void KeySongplay();     //按鍵發聲函數聲明
  28. //******************************主函數區*************************************
  29. void main()
  30. {
  31.         IniSystem();
  32.         DelayMs(200);
  33.         IniPeripheral();
  34.         DelayMs(200);
  35.         while(1)
  36.         {
  37.                 KeySongplay();
  38.         }
  39. }
  40. //*********************函數定義區*********************************************
  41. void DelayMs(uint uiXms)//有阻塞延時函數定義
  42. {
  43.         uint h,l;
  44.         for(h=uiXms;h>0;h--)
  45.         {
  46.                 for(l=110;l>0;l--);
  47.         }
  48. }

  49. void IniSystem() //系統初始化函數定義
  50. {
  51.         P2 = 0xff;
  52.         P1 = 0xff;
  53.         led_dr = 1;
  54.         beep_dr = 0;
  55. }


  56. void IniPeripheral()//外圍器件初始化函數定義
  57. {
  58.         LedFlick(5);
  59. }


  60. void LedFlick(uint uiLedFlickNum)//LED閃爍函數定義
  61. {
  62.         uint k;
  63.         for(k=uiLedFlickNum*2;k>0;k--)
  64.         {
  65.                 led_dr = ~led_dr;
  66.                 DelayMs(400);
  67.         }
  68. }

  69. void DelayDo_956us()                //發do音的延時
  70. {
  71.         unsigned char i, j;
  72.         i = 12;
  73.         j = 37;
  74.         do
  75.         {
  76.                 while (--j);
  77.         } while (--i);
  78. }

  79. void DelayRe_852us()                //發re音的延時
  80. {
  81.         unsigned char i, j;
  82.         i = 10;
  83.         j = 239;
  84.         do
  85.         {
  86.                 while (--j);
  87.         } while (--i);
  88. }

  89. void DelayMi_759us()                //發mi音的延時
  90. {
  91.         unsigned char i, j;
  92.         i = 9;
  93.         j = 217;
  94.         do
  95.         {
  96.                 while (--j);
  97.         } while (--i);
  98. }

  99. void DelayFa_716us()                //發fa音的延時
  100. {
  101.         unsigned char i, j;

  102.         i = 9;
  103.         j = 88;
  104.         do
  105.         {
  106.                 while (--j);
  107.         } while (--i);
  108. }

  109. void DelaySo_638us()                //發so音的延時
  110. {
  111.         unsigned char i, j;

  112.         i = 8;
  113.         j = 111;
  114.         do
  115.         {
  116.                 while (--j);
  117.         } while (--i);
  118. }

  119. void DelayLa_568us()                //發la音的延時
  120. {
  121.         unsigned char i, j;

  122.         i = 7;
  123.         j = 158;
  124.         do
  125.         {
  126.                 while (--j);
  127.         } while (--i);
  128. }

  129. void DelayXi_507us()                //發xi音的延時
  130. {
  131.         unsigned char i, j;

  132.         i = 6;
  133.         j = 232;
  134.         do
  135.         {
  136.                 while (--j);
  137.         } while (--i);
  138. }

  139. void DelaySo_1276us()                //發低音so音延時
  140. {
  141.         unsigned char i, j;

  142.         i = 15;
  143.         j = 226;
  144.         do
  145.         {
  146.                 while (--j);
  147.         } while (--i);
  148. }

  149. void KeySongplay()//按鍵發聲函數定義
  150. {
  151.         while(P1 == 0xff);
  152.         DelayMs(10);
  153.         if(P1 != 0xff)
  154.         {
  155.                 switch(P1)
  156.                 {
  157.                         case 0xfe:
  158.                                 P2 = DigSegBuff[1];
  159.                                 while(P1==0xfe)
  160.                                 {
  161.                                         beep_dr = ~beep_dr;
  162.                                         DelayDo_956us();          //do
  163.                                 }
  164.                                 beep_dr = 0;
  165.                                 break;
  166.                         case 0xfd:
  167.                                 P2 = DigSegBuff[2];
  168.                                 while(P1==0xfd)
  169.                                 {
  170.                                         beep_dr = ~beep_dr;
  171.                                         DelayRe_852us();         //re
  172.                                 }
  173.                                 beep_dr = 0;  
  174.                                 break;
  175.                         case 0xfb:
  176.                                 P2 = DigSegBuff[3];
  177.                                 while(P1==0xfb)
  178.                                 {
  179.                                         beep_dr = ~beep_dr;
  180.                                         DelayMi_759us();                //發mi音
  181.                                 }  
  182.                                 beep_dr = 0;
  183.                                 break;
  184.                         case 0xf7:
  185.                                 P2 = DigSegBuff[4];
  186.                                 while(P1==0xf7)
  187.                                 {
  188.                                         beep_dr = ~beep_dr;
  189.                                         DelayFa_716us();                //發fa音
  190.                                 }  
  191.                                 beep_dr = 0;
  192.                                 break;
  193.                         case 0xef:
  194.                                 P2 = DigSegBuff[5];
  195.                                 while(P1==0xef)
  196.                                 {
  197.                                         beep_dr = ~beep_dr;
  198.                                         DelaySo_638us();                //發so音
  199.                                 }
  200.                                 beep_dr = 0;
  201.                                 break;
  202.                         case 0xdf:
  203.                                 P2 = DigSegBuff[6];
  204.                                 while(P1==0xdf)
  205.                                 {
  206.                                         beep_dr = ~beep_dr;
  207.                                         DelayLa_568us();                //發la音
  208.                                 }
  209.                                 beep_dr = 0;
  210.                                 break;
  211.                         case 0xbf:
  212.                                 P2 = DigSegBuff[7];
  213.                                 while(P1==0xbf)
  214.                                 {
  215.                                         beep_dr = ~beep_dr;
  216.                                         DelayXi_507us();                //發xi音
  217.                                 }
  218.                                 beep_dr = 0;
  219.                                 break;
  220.                         case 0x7f:
  221.                                 P2 = DigSegBuff[5];
  222.                                 while(P1==0x7f)
  223.                                 {
  224.                                         beep_dr = ~beep_dr;
  225.                                         DelaySo_1276us();          //do
  226.                                 }
  227.                                 beep_dr = 0;
  228.                                 break;
  229.                 }        
  230.         }
  231. }
復制代碼


electronicorgan.zip

149.08 KB, 下載次數: 7, 下載積分: 黑幣 -5

源程序,仿真

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 特黄特黄a级毛片免费专区 av网站免费在线观看 | 亚洲国产成人在线 | 69av网| 91国在线观看 | 一级少妇女片 | 国产精品视频播放 | 免费视频久久 | 日韩一区二区av | 精品久草 | 欧美影院 | 免费观看av网站 | 秋霞在线一区二区 | 日韩成人在线观看 | 中文字幕亚洲视频 | 成人在线观看中文字幕 | 日韩精品在线一区二区 | 国产日产欧产精品精品推荐蛮挑 | 日日夜夜天天 | 妞干网福利视频 | 国产精品自在线 | 精品真实国产乱文在线 | 日韩欧美在 | 成人av看片 | 成人小视频在线观看 | 国产欧美日韩一区二区三区在线观看 | 91在线视频观看免费 | 99久久免费精品国产免费高清 | 人成久久| 亚洲二区在线 | 一本综合久久 | 中文字幕在线第二页 | 一区二区三区在线看 | 国产精品日韩欧美一区二区三区 | 欧美一区二区三区 | 日韩三级免费网站 | 亚洲国产精久久久久久久 | 久久久久av| 高清人人天天夜夜曰狠狠狠狠 | 99精品久久久久 | 91精品国产欧美一区二区 | 亚洲精品久久久久中文字幕二区 |