<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)制作電子琴

          51單片機(jī)制作電子琴

          作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          #include

          unsigned char tone;
          unsigned char op;

          本文引用地址:http://www.ex-cimer.com/article/201611/320305.htm

          sbit led=P1^1;
          sbit spk=P1^0;
          sbit key1=P3^2; //兩只老虎演奏按鍵
          sbit key2=P3^3;//1~i演奏按鍵
          unsigned char code shuma[]={

          0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

          //用于使定時器初值變化以產(chǎn)生相應(yīng)頻率的定時
          unsigned char code yinfu_H[]=

          {0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0x00};
          unsigned char code yinfu_L[]=

          {0xe9,0x5c,0xc1,0xef,0x45,0x92,0xd0,0xee,0x00};

          void delay(unsigned int N)
          {
          unsigned int j=N;
          while(j--)
          {
          unsigned char i;
          for(i=0;i<250;i++);
          }
          }
          unsigned char code laohu[]=

          {1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,3,1,1,3

          ,1,1};//兩只老虎樂譜
          unsigned char code laohuys[]=

          {220,220,220,220,220,220,220,220,220,220,235,220,220,210,150

          ,150,

          170,170,200,200,150,150,170,170,200,200,244,240,250,244,220,

          250};
          //定時器初始化
          void initTimer(void)
          {
          TMOD=0x01;
          TH0=yinfu_H[tone];
          TL0=yinfu_L[tone];
          }

          //定時器T0中斷服務(wù)程序
          void timer0(void) interrupt 1
          {
          TH0=yinfu_H[tone];
          TL0=yinfu_L[tone];
          spk=~spk;//
          }

          void laohu_yz()//兩只老虎 演奏程序
          {
          unsigned char i;
          for(i=0;i<32;i++)
          {
          led=1;
          tone=laohu[i]-1;
          delay(laohuys[i]/1.2);
          led=0; //每個音符閃爍一次
          delay(laohuys[i]/1.5);
          }
          }
          void yuep_yz()//1~i音符演奏程序
          {
          unsigned char i;
          for(i=0;i<16;i++)
          {
          led=1;
          if(i<8)
          {
          tone=i;
          }
          else
          {
          tone=15-i;
          }
          delay(220);
          led=0;
          delay(180);
          }
          }


          void jianpan()
          {
          op=P2;
          switch(op)
          {
          case 0xfe:led=0;tone=0;P0=shuma[1];TR0=1;break;
          case 0xfd:led=0;tone=1;P0=shuma[2];TR0=1;break;
          case 0xfb:led=0;tone=2;P0=shuma[3];TR0=1;break;
          case 0xf7:led=0;tone=3;P0=shuma[4];TR0=1;break;
          case 0xef:led=0;tone=4;P0=shuma[5];TR0=1;break;
          case 0xdf:led=0;tone=5;P0=shuma[6];TR0=1;break;
          case 0xbf:led=0;tone=6;P0=shuma[7];TR0=1;break;
          case 0x7f:led=0;tone=7;P0=shuma[8];TR0=1;break;
          default:break;
          }
          delay(4);
          TR0=0;
          led=1;
          P0=0xff;
          }

          //主程序
          void main(void)
          {
          initTimer();
          ET0=1;
          EA=1;

          spk=0;
          while(1)
          {

          if(key1==0)//判斷K1鍵是否按下
          {
          delay(10);
          if(key1==0)
          {
          TR0=1;
          laohu_yz();
          spk=0;
          }
          }
          else if(key2==0)//判斷K2鍵是否按下
          {
          delay(10);
          if(key2==0)
          {
          TR0=1;
          yuep_yz();
          spk=0;
          }
          }

          jianpan();//鍵盤檢測
          }
          }



          關(guān)鍵詞: 51單片機(jī)電子

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();