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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

52單片機想實現流水燈和蜂鳴器共存,流水燈跟隨蜂鳴器播放音樂,花樣閃爍

[復制鏈接]
跳轉到指定樓層
樓主
ID:253883 發表于 2017-12-16 22:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10黑幣
想實現流水燈和蜂鳴器共存,流水燈跟隨蜂鳴器播放音樂,花樣閃爍

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

使用道具 舉報

沙發
ID:21069 發表于 2017-12-17 12:28 | 只看該作者
很簡單啊!你只要簡譜中的節后取出來做流水路控制就OK

不知這個代碼你是否能看懂
                51單片機音樂播放實驗
-----------------------------------------------*/
#include<reg51.h>                //51頭文件,

//---------常用的兩個宏定義--------------
#define uint8        unsigned char
#define uint16  unsigned int

sbit Music=P2^0;

uint16 code FreTab_Low[7]={262,294,330,349,392,440,494};                //低音頻率表
uint16 code FreTab_Mid[7]={523,578,659,698,784,880,988};                //中音頻率表
uint16 code FreTab_Hight[7]={1046,1175,1318,1397,1568,1760,1976};        //高音頻率表

/*-----------------------------------------------------
曲譜存貯格式 uchar code MusicName{音高,音長,...., 0,0};       
        末尾:0,0 表示結束。
        音高由頻率決定,音長也就是節拍可以自己規定,在本程序中,
定時器T1用作節拍定時,定時時間為50ms,那么在該樂譜中1拍
表示50ms。
-------------------------------------------------------*/
uint8 code  Happy_Birthday[]={0x11,0x05,0x11,0x05,0x12,0x0a,0x11,0x0a,
                                                0x14,0x0a,0x13,0x14,
                                                0x11,0x05,0x11,0x05,0x12,0x0a,0x11,0x0a,
                                                0x15,0x0a,0x14,0x14,
                                                0x11,0x05,0x11,0x05,0x21,0x0a,0x16,0x0a,
                                                0x14,0x0a,0x13,0x0a,0x22,0x0a,
                                                0x17,0x05,0x17,0x05,0x16,0x0a,0x14,0x0a,
                                                0x15,0x0a,0x14,0x14,0x00,0x00
                                                };
uint16 Fre;  //存放獲取頻率值的變量

/*-----------------------------------------------
函數名:Timer_Init()
函數功能:對兩個定時器初始化
入口參數:無
------------------------------------------------*/
void Timer_Init()
{
        TMOD=0x11;
        EA=1;
        ET0=1;
        ET1=0;
        TR0=0;
        TR1=0;
}
/*-----------------------------------------------
函數名:Timer0_Ser()
函數功能:定時器0的中斷服務程序,主要是產生需要的頻率
          從而驅動喇叭發出相應的音符
入口參數:無
------------------------------------------------*/
void Timer0_i() interrupt 1
{
        TH0=Fre/256;
        TL0=Fre%256;
        if(Music==0)
                Music=1;
        else Music=0;               
}

/*-----------------------------------------------
函數名:Music_Play(uchar *MusicTab)
函數功能:音樂播放函數,
入口參數:*MusicTab  所要播放音樂的首地址
------------------------------------------------*/
void Music_Play(uint8 *MusicTab)
{
        uint8 *pMusic;
        uint8 temp,i;

        pMusic=MusicTab;  //將歌曲首地址給指針變量
        while(*pMusic!=0)
        {
                if((*pMusic&0xf0)==0x00)
                        Fre=65536-1000000/FreTab_Low[*pMusic&0x0f];
                else if((*pMusic&0xf0)==0x10)
                        Fre=65536-1000000/FreTab_Mid[*pMusic&0x0f];
                else if((*pMusic&0xf0)==0x20)
                        Fre=65536-1000000/FreTab_Hight[*pMusic&0x0f];
                       
                TH0=Fre/256;                //計算頻率初值,賦高八位
                TL0=Fre%256;                //計算頻率初值,賦低八位
                TH1=0x3c;                    //定時器1賦初值,定時50ms
                TL1=0xb0;
               
                pMusic++;                    //獲得節拍值
                temp=*pMusic;
                TR0=1;                        //開啟定時器T0
                TR1=1;                        //開啟定時器T1
                for(i=0;i<temp;i++)
                {
                        while(TF1==0);        //判斷定時器1是否溢出
                        TH1=0x3c;
                        TL1=0xb0;
                        TF1=0;       
                }
                pMusic++;
        }
}
/*-----------------------------------------------
函數名:main()
函數功能:主函數
入口參數:無
------------------------------------------------*/
void main()
{
        Timer_Init();
        while(1)
        {
                Music_Play(Happy_Birthday);
        }
}        如果能將取得的節拍取做一個變量,放到while中,再用個switch語句將節拍值變量對應你要點亮LED的個數。比如一個節拍一個LED亮,兩個節拍是兩個LED燈亮,不要憐惜,單片機IO端口多的是,多益善!

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲乱码一区二区三区在线观看 | 精品欧美一区免费观看α√ | 2020国产在线 | 国产精品久久久久久二区 | 免费精品在线视频 | 区一区二在线观看 | 国产精品99久久久久久久久 | 国产精品黄色 | 国产精品一级 | 成人福利网 | yiren22 亚洲综合 | 国产探花在线观看视频 | 欧美老少妇一级特黄一片 | 99福利在线观看 | 亚洲电影一区二区三区 | 国产成人在线一区二区 | 99热最新 | 国产一区二区在线视频 | 国产一二三区在线 | 色小姐综合网 | 在线一区二区三区 | 午夜国产精品视频 | 天天射中文 | 成人综合视频在线观看 | 国产精品久久久久久久岛一牛影视 | 亚洲不卡在线观看 | 在线免费观看黄色网址 | 日韩av在线不卡 | 91社区在线观看播放 | 综合精品久久久 | 一级在线观看 | 久久久久久久久久久久久久国产 | 日韩欧美视频在线 | 色婷婷一区二区三区四区 | 精品一区二区三区四区 | 国产成人精品免费视频大全最热 | 日韩理论电影在线观看 | 欧美性生活视频 | 免费在线视频精品 | 青青99| 日韩aⅴ在线观看 |