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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子琴 帶4*4矩陣鍵盤和8*8點陣仿真與源程序

[復制鏈接]
跳轉到指定樓層
樓主
電子琴仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源碼:
  1. /*
  2. 名稱:簡易電子琴設計
  3. 說明:本程序運行時,按下矩陣鍵盤中的按鍵,數碼管會顯示當前的按鍵值,蜂鳴器會播放對應的音符
  4. */
  5. #include <reg52.h>
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. #define KeyIO  P1   //矩陣鍵盤的控制IO
  9. sbit    BEEP = P3^4;  //蜂鳴器對應的控制IO
  10. sbit L1=P1^0;
  11. sbit L2=P1^1  ;
  12. sbit L3=P1^2   ;
  13. sbit L4=P1^3 ;
  14. uchar code string[] = {0x01,0x03,
  15. 0x07,0x0f,0x1f,0x3f,0x7f,0xff};
  16. uchar code dis[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  17. //各音符對應的延時
  18. uint code Table_Tone[] = {
  19. 63628,63835,64021,64103,
  20. 64260,64400,64524,64580};
  21. uchar KeyNo;    //按鍵序號
  22. /**  延時子函數  **/
  23. void DelayMS(uchar time)
  24.   {
  25. uchar i;
  26. while(time--)
  27.    {
  28.   for(i=0; i<120; i++);
  29.    }
  30.   }
  31. /**  矩陣鍵盤的掃描子函數  **/
  32. void Key_Scan(void)
  33.   {
  34.   uchar temp,i;
  35.   uchar Num;
  36.   P1=0xfe;
  37.   for(i=0;i<=3;i++)
  38.   {
  39.    if(L1==0)Num=dis[i*4+0];
  40. if(L2==0)Num=dis[i*4+1];
  41. if(L3==0)Num=dis[i*4+2];
  42. if(L4==0)Num=dis[i*4+3];
  43. DelayMS(5);
  44. temp=P1;
  45. temp=temp|0x0f;
  46. temp=temp<<1;
  47. temp=temp|0x0f;
  48. P1=temp;
  49.   }
  50. // uchar Temp, Num;
  51. //
  52. // P1 = 0x0f;      //高四位置 0 ,放入四列
  53. //
  54. // DelayMS(2);
  55. //         //按鍵按下后 00001111 將變成 0000XXXX,X 中 1 個為 0,3個仍為 1
  56. // Temp = KeyIO ^ 0x0f;   //異或操作會把 3 個 1 變成 0,唯一的 0 變成 1
  57. //
  58. // switch(Temp)
  59. //   {
  60. //  case 1 : Num = 0; break;
  61. //  case 2 : Num = 1; break;
  62. //  case 4 : Num = 2; break;
  63. //  case 8 : Num = 3; break;
  64. //  default : return;
  65. //   }
  66.   //
  67. // KeyIO = 0xf0;     //低四位置 0 ,放入四列
  68. //
  69. // DelayMS(2);
  70. //         //按鍵按下后 11110000 將變成 XXXX0000,X 中 1 個為 0,3個仍為 1
  71. // Temp = (KeyIO >> 4) ^ 0x0f;  //將高四位移至低四位,并將其中唯一的 0 變為 1,其余為 0
  72. //
  73. // switch (Temp)
  74. //   {
  75. //  case 1 : Num +=  0; break;
  76. //  case 2 : Num +=  4; break;
  77. //  case 4 : Num +=  8; break;
  78. //  case 8 : Num += 12; break;
  79. //  default : return;
  80. //   }
  81. // KeyNo = Num;
  82.   }
  83. void led_shi()
  84. {
  85. uchar n;
  86. for(n=0;n<40;n++)
  87. {
  88.   P0=string[KeyNo];
  89.   P2=0x00;
  90. }
  91. }
  92. /**  定時器 0 中斷服務程序,不同頻率的聲音由該中斷產生  **/
  93. void Play_Tone() interrupt 1
  94.   {
  95. TH0  = Table_Tone[KeyNo] / 256;
  96. TL0  = Table_Tone[KeyNo] % 256;
  97. BEEP = ~BEEP;
  98.   }
  99. /**  主函數  **/
  100. void main(void)
  101.   {
  102. TMOD  = 0x01;
  103. IE    = 0x82;
  104. while(1)
  105.    {
  106.   KeyIO = 0xf0;     //發送掃描碼
  107.   if (KeyIO != 0xf0)    //如果有按鍵按下
  108.     {
  109.    Key_Scan();     //矩陣鍵盤的掃描
  110.    led_shi();
  111.    TR0 = 1;     //啟動定時器,并發出對應的聲音
  112.     }
  113.   else
  114.     {
  115.    TR0 = 0;     //停止播放聲音
  116.     }
  117.   DelayMS(2);
  118.    }
  119.   }
復制代碼

110.zip

132.07 KB, 下載次數: 102, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:650766 發表于 2019-12-2 13:12 | 只看該作者
哥,怎么我弄出來按那個都是滴滴滴呀,點陣也不變
回復

使用道具 舉報

板凳
ID:650766 發表于 2019-12-2 13:18 | 只看該作者
哥,聲音不變呀,點陣也不變
回復

使用道具 舉報

地板
ID:1084700 發表于 2023-6-17 22:49 | 只看該作者
哥,右上角那個顯示器怎么才能搜出來啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品v| 日本视频在线播放 | 成人福利视频网站 | 精品国产一区二区三区性色av | 亚洲三区在线观看 | 欧美精品在线免费观看 | 国产美女在线观看 | 中文字幕av网址 | 欧美成人免费在线 | 99re热精品视频 | 日韩在线免费看 | 国产精品无码专区在线观看 | 久久精品欧美一区二区三区不卡 | 99精品国产一区二区三区 | 成人在线视频免费观看 | 天堂久久久久久久 | 欧美一级免费看 | 午夜av一区二区 | 午夜天堂精品久久久久 | 国产精品日韩 | av网站在线播放 | 91亚洲精品国偷拍自产在线观看 | 亚洲日本成人 | 91在线观 | h视频在线观看免费 | h视频在线观看免费 | 欧美全黄| 一级片免费观看 | 午夜激情在线视频 | 久久一二| 亚洲午夜av久久乱码 | 国产69精品久久99不卡免费版 | 欧洲性生活视频 | 国产欧美日韩一区二区三区在线观看 | 美女久久视频 | 国产人成在线观看 | 亚洲欧美第一视频 | 极品电影院| 91在线综合 | 国产一区不卡在线观看 | 国产区精品 |