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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機通過I/O口控制蜂鳴器播放音樂程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:1091106 發表于 2023-9-10 13:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*********************************************************************************
* 【外部晶振】: 11.0592mhz   
* 【主控芯片】: STC89C52
* 【編譯環境】: Keil μVisio4   
* 【程序功能】: 點亮開發板上的LED1                                                      
* 【使用說明】:
**********************************************************************************/
#include <reg52.h>
sbit beep = P2^3;
unsigned char timer0H, timer0L, time;

//單片機晶振采用11.0592MHz
// 頻率-半周期數據表 高八位     本軟件共保存了四個八度的28個頻率數據
code unsigned char FREQH[] = {
    0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567
    0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
    0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567
    0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567
// 頻率-半周期數據表 低八位
code unsigned char FREQL[] = {
    0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567
    0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
    0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567
    0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567
//數據表           
code unsigned char song[] = {
5, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 6, 5, 1, 6, //
1, 2, 2, 3, 2, 2, 1, 3, 2, 7, 2, 2, 6, 2, 3, 3, 2, 1, 5, 2, 12,            //一刻也不能分割
6, 2, 2, 7, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 6, 6, 1, 6,    //無論我走到哪里
7, 1, 2, 6, 1, 2, 5, 1, 2, 5, 2, 2, 1, 2, 3, 2, 2, 1, 3, 2, 12,            //都唱出一首贊歌
5, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 6, 5, 1, 6,    //我歌唱每一座高山
1, 2, 2, 3, 2, 2, 1, 3, 2, 7, 2, 2, 2, 3, 3, 1, 3, 1, 6, 2, 12,            //我歌唱每一條河
1, 3, 2, 7, 2, 2, 6, 2, 2, 5, 2, 6,                                        //裊裊炊煙
6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 6,                                        //小小村落
7, 1, 4, 6, 1, 2, 5, 1, 4, 2, 2, 2, 1, 2, 12,                            //路上一道轍
8, 2, 2, 2, 3, 2, 3, 3, 2, 2, 3, 2, 8, 2, 2, 6, 2, 2, 7, 2, 2, 6, 2, 3, 3, 2, 1, 5, 2, 12,//
8, 2, 2, 2, 3, 2, 3, 3, 2, 2, 3, 2, 8, 2, 2, 6, 2, 2, 7, 2, 2, 5, 2, 3, 3, 2, 1, 6, 2, 12,//我永遠緊依著你的心窩
5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 6, 7, 1, 2, 6, 1, 2, 5, 1, 2, 3, 2, 6,4, 2, 6, 2, 2, 4, 1, 2, 2,1, 2, 10,//你用你那母親的脈搏和我訴說
};
//一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。
//6, 2, 3 分別代表:6, 中音, 3個半拍;
//5, 2, 1 分別代表:5, 中音, 1個半拍;

void t0int() interrupt 1         //T0中斷程序,控制發音的音調
{
    TR0 = 0;                     //先關閉T0
    beep = !beep;          //輸出方波, 發音
    TH0 = timer0H;               //下次的中斷時間, 這個時間, 控制音調高低
    TL0 = timer0L;
    TR0 = 1;                     //啟動T0
}

void delay(unsigned char t)     //延時程序,控制發音的時間長度
{
    unsigned char t1;
    unsigned long t2;
    for(t1 = 0; t1 < t; t1++)    //雙重循環, 共延時t個半拍
      for(t2 = 0; t2 < 4000; t2++); //延時期間, 可進入T0中斷去發音
    TR0 = 0;                        //關閉T0, 停止發音
}

void sing()                      //演奏一個音符
{
    TH0 = timer0H;               //控制音調
    TL0 = timer0L;
    TR0 = 1;                     //啟動T0, 由T0輸出方波去發音
    delay(time);                 //控制時間長度
}

void main(void)
{
    unsigned char k, i;
    TMOD = 1;                    //置T0定時工作方式1
    ET0 = 1;                     //開T0中斷
    EA = 1;                      //開總中斷
    while(1)
    {
      i = 0;
      time = 1;
      while(time)
      {
        k = song[i] + 7 * song[i + 1] - 1;//第i個是音符, 第i+1個是第幾個八度
        timer0H = FREQH[k];      //從數據表中讀出頻率數值
        timer0L = FREQL[k];      //實際上, 是定時的時間長度
        time = song[i + 2];   //讀出時間長度數值
        i += 3;
        sing();                  //發出一個音符
      }  
    }  
}

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

使用道具 舉報

沙發
ID:562099 發表于 2023-9-10 15:57 | 只看該作者
不錯。注解詳細,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人久久综合一区,久久久国产99 | 精品国产18久久久久久二百 | 网站国产| 青青草综合网 | 久久成人精品视频 | 免费激情网站 | 日韩一区二区福利视频 | 日韩成人在线电影 | 亚洲成人毛片 | 中文字幕一区二区在线观看 | 久久专区| 午夜免费观看体验区 | 超碰日韩 | 亚洲欧美中文日韩在线v日本 | 久久香蕉网 | 一区二区三区在线电影 | 国产一级视频在线观看 | 欧美日本韩国一区二区三区 | 不卡一区| 丁香婷婷综合激情五月色 | 国产精品久久久久久久一区探花 | 一区二区三区欧美 | 久草精品视频 | 国产成人免费视频网站高清观看视频 | 欧美精品一区久久 | 国产亚洲精品精品国产亚洲综合 | 99re在线视频 | 成人免费片 | 久久久久久中文字幕 | 亚洲第一视频 | 中文字幕中文字幕 | 欧美日韩一二区 | 欧美精品一区三区 | 精品国产乱码久久久久久丨区2区 | 祝你幸福电影在线观看 | 麻豆久久久9性大片 | 午夜性视频| 日韩喷潮 | 国产自产c区 | 久久99久久 | 91在线精品秘密一区二区 |