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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1988|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

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

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

//單片機(jī)晶振采用11.0592MHz
// 頻率-半周期數(shù)據(jù)表 高八位     本軟件共保存了四個(gè)八度的28個(gè)頻率數(shù)據(jù)
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
// 頻率-半周期數(shù)據(jù)表 低八位
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
//數(shù)據(jù)表           
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,//我永遠(yuǎn)緊依著你的心窩
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,//你用你那母親的脈搏和我訴說
};
//一個(gè)音符有三個(gè)數(shù)字。前為第幾個(gè)音、中為第幾個(gè)八度、后為時(shí)長(zhǎng)(以半拍為單位)。
//6, 2, 3 分別代表:6, 中音, 3個(gè)半拍;
//5, 2, 1 分別代表:5, 中音, 1個(gè)半拍;

void t0int() interrupt 1         //T0中斷程序,控制發(fā)音的音調(diào)
{
    TR0 = 0;                     //先關(guān)閉T0
    beep = !beep;          //輸出方波, 發(fā)音
    TH0 = timer0H;               //下次的中斷時(shí)間, 這個(gè)時(shí)間, 控制音調(diào)高低
    TL0 = timer0L;
    TR0 = 1;                     //啟動(dòng)T0
}

void delay(unsigned char t)     //延時(shí)程序,控制發(fā)音的時(shí)間長(zhǎng)度
{
    unsigned char t1;
    unsigned long t2;
    for(t1 = 0; t1 < t; t1++)    //雙重循環(huán), 共延時(shí)t個(gè)半拍
      for(t2 = 0; t2 < 4000; t2++); //延時(shí)期間, 可進(jìn)入T0中斷去發(fā)音
    TR0 = 0;                        //關(guān)閉T0, 停止發(fā)音
}

void sing()                      //演奏一個(gè)音符
{
    TH0 = timer0H;               //控制音調(diào)
    TL0 = timer0L;
    TR0 = 1;                     //啟動(dòng)T0, 由T0輸出方波去發(fā)音
    delay(time);                 //控制時(shí)間長(zhǎng)度
}

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

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

使用道具 舉報(bào)

沙發(fā)
ID:562099 發(fā)表于 2023-9-10 15:57 | 只看該作者
不錯(cuò)。注解詳細(xì),
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲色图综合网 | 欧美日韩久久精品 | 亚洲综合久久精品 | 欧美一区二区久久 | www.日韩 | 中文字幕在线视频免费观看 | 久久精品国产99国产精品 | 亚洲成人一二区 | 天堂视频中文在线 | 精品久久电影 | 国产成人精品一区二区三区四区 | 成人在线中文字幕 | 九九九久久国产免费 | 欧美激情综合色综合啪啪五月 | 91国内外精品自在线播放 | 黄色片视频网站 | 欲色av| 日韩欧美一区二区三区免费观看 | 成人欧美一区二区三区黑人孕妇 | 国产在线精品一区 | 91高清免费观看 | 成人深夜福利在线观看 | 九九热在线精品视频 | 91精品国产91综合久久蜜臀 | 波多野结衣中文字幕一区二区三区 | 国产高清一区二区三区 | 精品产国自在拍 | 成人精品鲁一区一区二区 | 久久精品亚洲国产奇米99 | 91在线一区二区三区 | 蜜桃一区二区三区 | 波多野结衣av中文字幕 | 青青草一区 | 欧美一区二区在线视频 | 视频在线亚洲 | 精品日韩欧美一区二区 | 国产精品欧美一区二区三区不卡 | 一区二区激情 | 九九综合| 超碰导航| 一区二区三区四区毛片 |