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

標(biāo)題: 51單片機(jī)電子琴程序代碼 [打印本頁]

作者: das    時間: 2015-4-16 03:04
標(biāo)題: 51單片機(jī)電子琴程序代碼
51 電子琴程序代碼 姬家寨電子科技實(shí)驗(yàn)室 程序編程:姬學(xué)瑞   版權(quán)所有,侵權(quán)必究!
  1. #include <REGX51.H>
  2. #define   FOSC    12000000
  3. //=================================================================================================
  4. //--- 音階頻率表 ---
  5. unsigned int code JINJIEFREQ[] =
  6. {
  7.   262,294,330,349,392,440,494,
  8.   523,587,659,699,784,880,988,
  9.   1046,1175,1319,1391,1568,1760,1976,
  10. };
  11. //sfr     P4    = 0xC0;
  12. //sfr     P5    = 0xC8;
  13. //sbit    P5_5  = P5^5;
  14. #define SPK     P3_7//P5_5
  15. bit RunFlag = 0;
  16. unsigned char STH0,STL0;
  17. //sfr     AUXR  = 0x8E;
  18. #define T0FENPING  12
  19. //=================================================================================================
  20. //--- 定時器T0溢出中斷服務(wù)程序 ---
  21. void T0_ISR(void) interrupt 1
  22. {
  23.   if(1 == RunFlag)                                  //--- 在音階播放標(biāo)志為1情況下 ---
  24.     {
  25.       TH0 = STH0;                                   //--- 重新裝初值 ---
  26.       TL0 = STL0;
  27.       SPK = ~SPK;                                   //--- P5.5引腳上的電平翻轉(zhuǎn) ---
  28.     }
  29. }
  30. //=================================================================================================
  31. //--- main()主程序 ---
  32. void main(void)
  33. {
  34.   unsigned int i;
  35.   unsigned char j;

  36. //  AUXR |= 0x80;                                     //--- 使能T0的計數(shù)器時鐘分頻值為1 ---
  37.   TMOD = 0x01;                                      //--- 配置T0為定時模式,工作于方式2 ---
  38.   ET0 = 1;                                          //--- 使能T0中斷 ---
  39.   TR0 = 1;
  40.   EA = 1;                                           //--- CPU開中斷 ---
  41.   while(1)
  42.     {
  43.       for(j=0;j<7;j++)
  44.         {
  45.           if(0 == (P1 & (1 << j)))                  //--- 判斷低音部分是否有鍵按下 ---
  46.             {
  47.               for(i=0;i<2000;i++);                  //--- 去按鍵抖動 ---
  48.               if(0 == (P1 & (1 << j)))              //--- 再判斷低音部分是否真得有鍵按下 ---
  49.                 { //--- 根據(jù)表計算低音音階頻率的定時器T0的初值 ---
  50.                   STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ[j]) / 256;
  51.                   STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ[j]) % 256;
  52.                   TH0 = STH0;                       //--- 裝入TH0,TL0的計數(shù)寄存器 ---
  53.                   TL0 = STL0;
  54.                   RunFlag = 1;                      //--- 置音階播放標(biāo)志為1 ---
  55.                 }
  56.               while(0 == (P1 & (1 << j)));          //--- 等待按鍵釋放 ---
  57.               RunFlag = 0;                          //--- 清音階播放標(biāo)志 ---
  58.               SPK = 1;
  59.             }
  60.           if(0 == (P3 & (1 << j)))                  //--- 判斷中音部分是否有鍵按下 ---
  61.             {
  62.               for(i=0;i<2000;i++);                  //--- 去按鍵抖動 ---
  63.               if(0 == (P3 & (1 << j)))              //--- 再判斷中音部分是否真得有鍵按下 ---
  64.                 { //--- 根據(jù)表計算中音音階頻率的定時器T0的初值 ---
  65.                   STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ[j + 7]) / 256;
  66.                   STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ[j + 7]) % 256;
  67.                   TH0 = STH0;                       //--- 裝入TH0,TL0的計數(shù)寄存器 ---
  68.                   TL0 = STL0;
  69.                   RunFlag = 1;                      //--- 置音階播放標(biāo)志為1 ---
  70.                 }
  71.               while(0 == (P3 & (1 << j)));          //--- 等待按鍵釋放 ---
  72.               RunFlag = 0;                          //--- 清音階播放標(biāo)志 ---
  73.               SPK = 1;
  74.             }
  75.           if(0 == (P2 & (1 << j)))                  //--- 判斷高音部分是否有鍵按下 ---
  76.             {
  77.               for(i=0;i<2000;i++);                  //--- 去按鍵抖動 ---
  78.               if(0 == (P2 & (1 << j)))              //--- 再判斷高音部分是否真得有鍵按下 ---
  79.                 { //--- 根據(jù)表計算高音音階頻率的定時器T0的初值 ---
  80.                   STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ[j + 14]) / 256;
  81.                   STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ[j + 14]) % 256;
  82.                   TH0 = STH0;                       //--- 裝入TH0,TL0的計數(shù)寄存器 ---
  83.                   TL0 = STL0;
  84.                   RunFlag = 1;                      //--- 置音階播放標(biāo)志為1 ---
  85.                 }
  86.               while(0 == (P2 & (1 << j)));          //--- 等待按鍵釋放 ---
  87.               RunFlag = 0;                          //--- 清音階播放標(biāo)志 ---
  88.               SPK = 1;
  89.             }
  90.         }
  91.     }
  92. }
復(fù)制代碼




作者: 913059794    時間: 2015-5-7 15:44
好東西,謝謝
作者: uva2015    時間: 2015-5-8 17:28
謝謝分享
作者: 萬叢草111    時間: 2015-5-8 19:16
樓主真厲,不錯!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 理论片午午伦夜理片影院 | 免费视频二区 | 中文字幕亚洲一区 | 国产视频一区二区在线观看 | 在线观看国产视频 | 精品自拍视频 | 国产一区二区三区在线 | 国产a一区二区 | 国产免费又黄又爽又刺激蜜月al | 久久精品二区亚洲w码 | 精品国产一级 | 人干人人 | 免费午夜视频在线观看 | 在线一级片 | 久久综合一区 | 99国产精品99久久久久久粉嫩 | 欧美a区 | 久久国产精品视频 | 久久国产传媒 | 国产精品久久 | 97超碰免费| 精品国产鲁一鲁一区二区张丽 | 日韩精品在线播放 | 国产在线一 | 亚洲高清av | 中文字幕男人的天堂 | 欧美一级在线 | 97人澡人人添人人爽欧美 | 免费看91| 色婷婷激情 | 成人精品一区二区三区中文字幕 | 欧美视频在线观看 | 久久一二 | 五月婷婷导航 | 亚洲一区二区三区四区五区中文 | 国产农村妇女毛片精品久久麻豆 | 欧美 日韩 亚洲91麻豆精品 | 欧美日韩在线视频一区二区 | 九九伊人sl水蜜桃色推荐 | 欧美伦理一区 | 中文字幕一区二区三区四区不卡 |