欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機音樂盒代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:415601 發表于 2018-10-26 08:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/***************************************************************************
    程序名稱:program4-1.c
    程序功能:單片機控制的音樂盒
****************************************************************************/
    #include "reg51.h"                                        //包含頭文件reg51.h
    #define  ucharunsigned char
    #define  uintunsigned int
    sbit  BEEP=P3^7;                                        //蜂鳴器控制接口
    uchar note;                                                //音符下標
    uchar code music[]={0xFC,0x44,0xFC,0xAC, 0xFD,0x09, 0xFD,0x34, 0xFD,0x82, 0xFD,0xC8};
                                                                            //T值
    uchar code 2tiger[ ]=                             //兩只老虎音符數組
    {
         0x14,0x24,0x34,0x14,0x14,0x24,0x34,0x14,0x34,0x44,0x58,0x34,0x44,
     0x58,0x53,0x61,0x53,0x41,0x34,0x14,0x53,0x61,0x53,0x41,0x34,x14,
     0x14,0x54,0x18,0x14,0x54,0x18,0x00,0x00
    };                                                        
/***************************************************************************
    函數名稱:delay_125ms
    函數功能:實現125ms延時函數
    形式參數:無
    返回值:無
****************************************************************************/
    void delay_125ms()
    {  
           uchar counter=0;                         //計數器初始化
       TR0=1;                                 //啟動T0
      for(;counter!=5;)                         //判斷計數器值是否等于5
       {
             if(TF0==1)                                 //T0溢出判斷
             {
                    TF0 = 0;                                //定時器0溢出位清零
                    TH0=0xa6;                    //恢復計數器初值(可采用stc-isp軟件計算)
                    TL0=0x00;
                    counter++;                         //循環次數標志位加1
             }
       }
       counter = 0;                                 //計數5次,計數器清零
    }
/***************************************************************************
    函數名稱:palay_music
    函數功能:單片機控制蜂鳴器播放音樂
****************************************************************************/
                void paly_music()                                        //音樂播放函數
                {
uchar i,j,k;               
            j=0;
            while(2tiger[j]!=0x00)       //一直播放到休止符0x00為止
            {
                    k=2tiger[j]&0x0F;                         //從音符數組中得到節拍
                    note=2tiger[j]>>4;             //從音符數組中得到音符
                    TH1=music[2*note];                                //定時器1賦初值
                    TL1=music[2*note+1];               
                    TR1=1;                                                        // 啟動T1
                    if((music[2*note]==0x00)&&(music[2*note+1]==0x00))//判斷是否停止符
                    {
                            TR1=0;                                //當播放到停止符時關閉T1
                            BEEP=1;                                //關閉蜂鳴器
                    }
                    for(i=k;i>0;--i)                //延時,產生相應的節拍
                    {               
                            delay_125ms();                                
                    }
                    TR1=0;                                       
                    j++;                                            //取數組中的下一個數據
            }
    }                        
/***************************************************************************
    函數名稱:init
    函數功能:定時器T0、T1初始化
****************************************************************************/
    void  init ()               
    {
     TMOD=0x11;                                        //T0工作定時工作方式
     TH0=0xa6;                                        //賦T0計數器初值(25ms)
     TL0=0x00;
     ET1=1;                                        //允許T1中斷
     EA=1;                                                //中斷允許
    }
/***************************************************************************
    函數名稱:main
    函數功能:單片機控制蜂鳴器播放音樂
****************************************************************************/
         void main( )                                 //主函數
         {
           init();
           while(1)
      {
            paly_music( );                        // 播放音樂
  }
  }
/***************************************************************************
    函數名稱:timer1
    函數功能:T1產生音符脈沖
****************************************************************************/
  void timer1( ) interrupt 3
      {
          TH1=music[2*note];                        //恢復計數器初始值               
     TL1=music[2*note+1];                        
     BEEP=~BEEP;
         }


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表