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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的電子琴課設

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的電子琴課設

下載:
電子琴.zip (16.84 KB, 下載次數: 41)


  1. #include <AT89X51.H>
  2. unsigned char temp;
  3. unsigned char key;
  4. unsigned char i,j;
  5. unsigned char STH0;
  6. unsigned char STL0;
  7. unsigned int code tab[]=      //音符表
  8. {64021,64103,64260,64400,
  9. 64524,64580,64684,64777,
  10. 64820,64898,64968,65030,
  11. 65058,65110,65157,65178};

  12. void main(void){                          //主程序
  13.         TMOD=0x01;
  14.         ET0=1;
  15.         EA=1;
  16.         while(1){
  17.                 P3=0xff;
  18.                 P3_4=0;
  19.                 temp=P3;
  20.                 temp=temp & 0x0f;
  21.                 if (temp!=0x0f)        {                  //從第一行開始掃描鍵盤
  22.                         for(i=50;i>0;i--)          //延時,反彈跳
  23.                         for(j=200;j>0;j--);
  24.                         temp=P3;
  25.                         temp=temp & 0x0f;
  26.                         if (temp!=0x0f){
  27.                                 temp=P3;
  28.                                 temp=temp & 0x0f;
  29.                                 switch(temp){         //讀取按鍵值
  30.                                         case 0x0e:
  31.                                                 key=0;
  32.                                                 break;
  33.                                         case 0x0d:
  34.                                                 key=1;
  35.                                                 break;
  36.                                         case 0x0b:
  37.                                                 key=2;
  38.                                                 break;
  39.                                         case 0x07:
  40.                                                 key=3;
  41.                                                 break;
  42.                                 }
  43.                                 temp=P3;
  44.                                 P1_0=~P1_0;
  45.                                 STH0=tab[key]/256;        //計算音符對應的定時器計數值
  46.                                 STL0=tab[key]%256;
  47.                                 TR0=1;
  48.                                 temp=temp & 0x0f;
  49.                                 while(temp!=0x0f){
  50.                                         temp=P3;
  51.                                         temp=temp & 0x0f;
  52.                                 }
  53.                         TR0=0;
  54.                         }
  55.                 }

  56.                 P3=0xff;
  57.                 P3_5=0;
  58.                 temp=P3;
  59.                 temp=temp & 0x0f;
  60.                 if (temp!=0x0f){                           //掃描鍵盤第二行
  61.                         for(i=50;i>0;i--)
  62.                         for(j=200;j>0;j--);
  63.                         temp=P3;
  64.                         temp=temp & 0x0f;
  65.                         if (temp!=0x0f){
  66.                                 temp=P3;
  67.                                 temp=temp & 0x0f;
  68.                                 switch(temp){
  69.                                         case 0x0e:
  70.                                                 key=4;
  71.                                                 break;
  72.                                         case 0x0d:
  73.                                                 key=5;
  74.                                                 break;
  75.                                         case 0x0b:
  76.                                                 key=6;
  77.                                                 break;
  78.                                         case 0x07:
  79.                                                 key=7;
  80.                                                 break;
  81.                                 }
  82.                                 temp=P3;
  83.                                 P1_0=~P1_0;
  84.                                 STH0=tab[key]/256;
  85.                                 STL0=tab[key]%256;
  86.                                 TR0=1;
  87.                                 temp=temp & 0x0f;
  88.                                 while(temp!=0x0f){
  89.                                         temp=P3;
  90.                                         temp=temp & 0x0f;
  91.                                 }
  92.                                 TR0=0;
  93.                         }
  94.                 }

  95.                 P3=0xff;
  96.                 P3_6=0;
  97.                 temp=P3;
  98.                 temp=temp & 0x0f;
  99.                 if (temp!=0x0f){                        //掃描鍵盤第三行
  100.                         for(i=50;i>0;i--)
  101.                         for(j=200;j>0;j--);
  102.                         temp=P3;
  103.                         temp=temp & 0x0f;
  104.                         if (temp!=0x0f){
  105.                                 temp=P3;
  106.                                 temp=temp & 0x0f;
  107.                                 switch(temp){
  108.                                         case 0x0e:
  109.                                                 key=8;
  110.                                                 break;
  111.                                         case 0x0d:
  112.                                                 key=9;
  113.                                                 break;
  114.                                         case 0x0b:
  115.                                                 key=10;
  116.                                                 break;
  117.                                         case 0x07:
  118.                                                 key=11;
  119.                                                 break;
  120.                                 }
  121.                                 temp=P3;
  122.                                 P1_0=~P1_0;
  123.                                 STH0=tab[key]/256;
  124.                                 STL0=tab[key]%256;
  125.                                 TR0=1;
  126.                                 temp=temp & 0x0f;
  127.                                 while(temp!=0x0f){
  128.                                         temp=P3;
  129.                                         temp=temp & 0x0f;
  130.                                 }
  131.                                 TR0=0;
  132.                         }
  133.                 }

  134.                 P3=0xff;
  135.                 P3_7=0;
  136.                 temp=P3;
  137.                 temp=temp & 0x0f;
  138.                 if (temp!=0x0f){                         //掃描鍵盤第四行
  139.                         for(i=50;i>0;i--)
  140.                         for(j=200;j>0;j--);
  141.                         temp=P3;
  142.                         temp=temp & 0x0f;
  143.                         if (temp!=0x0f){
  144.                                 temp=P3;
  145.                                 temp=temp & 0x0f;
  146.                                 switch(temp){
  147.                                         case 0x0e:
  148.                                                 key=12;
  149.                                                 break;
  150.                                         case 0x0d:
  151.                                                 key=13;
  152.                                                 break;
  153.                                         case 0x0b:
  154.                                                 key=14;
  155.                                                 break;
  156.                                         case 0x07:
  157.                                                 key=15;
  158.                                                 break;
  159.                                 }
  160.                                 temp=P3;
  161.                                 P1_0=~P1_0;
  162.                                 STH0=tab[key]/256;
  163.                                 STL0=tab[key]%256;
  164.                                 TR0=1;
  165.                                 temp=temp & 0x0f;
  166.                                 while(temp!=0x0f){
  167.                                         temp=P3;
  168.                                         temp=temp & 0x0f;
  169.                                 }
  170.                                 TR0=0;
  171.                         }
  172.                 }
  173.         }
  174. }

  175. void t0(void) interrupt 1 using 0 {     //定時器T0中斷服務函數
  176.         TH0=STH0;
  177.         TL0=STL0;
  178.         P1_0=~P1_0;                                  //產生方波
  179. }
復制代碼


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

使用道具 舉報

沙發
ID:400529 發表于 2018-9-20 14:41 來自觸屏版 | 只看該作者
666666666666666
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91av入口| 亚洲综合色婷婷 | 国产精品欧美一区喷水 | 麻豆精品久久久 | 欧美日韩国产在线观看 | 午夜视频导航 | 免费久久久久久 | 成人av激情 | 91精品国产自产精品男人的天堂 | 国产精久久久久久久 | 久久亚洲欧美日韩精品专区 | 91亚洲国产成人久久精品网站 | 国产免费色 | 毛片久久久 | 日韩中文字幕一区二区 | 日韩性生活网 | 福利视频日韩 | 精品久久99 | 91手机精品视频 | 精品国产伦一区二区三区观看说明 | 一级毛片在线播放 | 在线免费观看a级片 | 亚洲国产一区视频 | 91久久国产综合久久 | 久久免费高清 | 精品国产欧美一区二区三区成人 | 日日骚网| 亚洲欧美在线观看 | 亚洲黄色一级毛片 | 欧美在线一区二区三区 | 在线国产一区二区三区 | 91亚洲欧美 | 国产一级片一区二区 | 欧美一级大片免费看 | 欧美美女爱爱 | 欧美三区在线观看 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 久久久久久免费观看 | 午夜影视 | 天天综合网天天综合色 | 精品欧美一区二区三区久久久 |