STC89C52單片機蜂鳴器唱歌實驗

2021-01-08 電子產品世界
////////////////////////////////////////////////////////////////////////

實現功能:通過對單片機定時器的配置,讓其產生不同頻率的方波,蜂鳴器根據頻
率的不同而發出不同的聲音,來達到唱歌的目的
實驗板型號:KBL-XYD-C52
實驗名稱: 蜂鳴器唱歌實驗
編寫人: 謝應東
編寫日期: 2012-4-26
////////////////////////////////////////////////////////////////////////
#include

本文引用地址:http://www.eepw.com.cn/article/201611/319236.htm

#define uchar unsigned char
#define uint unsigned int

uchar cCount;

sbit FMQ =P2^4; //定義實驗板上蜂鳴器器控制腳


unsigned char code SONG[] ={ //祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
//路邊的野華不要採
0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,

};
////////////////////////////////////////////////////////////////////////
函數名稱:Time0_Init
函數功能:定時器的初始化配置,使其能中斷,中斷的時間間隔為10ms
參數介紹:無
返回值:
注意事項:注意此時實驗板上用到的晶振為11.0592M的,要選用其他的,得重新配置
////////////////////////////////////////////////////////////////////////
void Init_Time0()
{
TMOD = 0x01; //設置定時器0為模式1(16bit)

TH0 = 0xDC; //給定時器0高八位賦初值
TL0 = 0x00; //給定時器0第八位賦初值

ET0 = 1; //允許定時器0中斷
EA = 1; //打開全局中斷
}
////////////////////////////////////////////////////////////////////////
函數名稱:Time0_Routine
函數功能:定時器0中斷服務函數,重新給定時器0賦值,同時把全局變量cCount加1
參數介紹:無
返回值:
注意事項:無
////////////////////////////////////////////////////////////////////////
void Time0_Routine() interrupt 1 using 1
{
TH0 = 0xDC;//重新給高八位賦新值
TL0 = 0x00;//重新給第八位賦新值
cCount++;//計數變量加1
}
////////////////////////////////////////////////////////////////////////
函數名稱:DelayUs
函數功能:延時函數,通過示波器測試,此函數每執行一次大概能延時55us
參數介紹:iDelay_Us:執行此延時函數的次數
iNumber1:第一個for語句所用的記錄循環的變量
iNumber2:第二個for語句所用的記錄循環的變量
返回值:
注意事項:無
////////////////////////////////////////////////////////////////////////
void DelayUs(unsigned int iDelay_Us)
{
uint iNumber1,iNumber2;
for(iNumber1=0;iNumber1 {
for(iNumber2=0;iNumber2<3;iNumber2++);
}
}
////////////////////////////////////////////////////////////////////////
函數名稱:FMQ_PlaySong
函數功能:控制實驗板上與蜂鳴器相連的引腳輸出不同的頻率的方波,依次來控制蜂鳴
器唱歌
參數介紹:cNumber:歌曲的選擇,0代表「祝你平安」,『1』代表「路邊的野花不要採」
返回值:
注意事項:無
////////////////////////////////////////////////////////////////////////
void FMQ_PlaySong(unsigned char cNumber)
{
uchar cTemp1,cTemp2;
uint iAddr;
cCount = 0;//中斷計數器清0
iAddr = cNumber * 217;//歌曲的地址,可以參看SONG[],你就會明白
while(1)
{ //把音碼變量數組裡的值賦給臨時變量
cTemp1 = SONG[iAddr++];
if (cTemp1 == 0xFF) //休止符
{
TR0 = 0;
DelayUs(100); //延時
}
else if (cTemp1 == 0x00) //判斷是否歌曲結束
{
return;
}
else
{
cTemp2 = SONG[iAddr++];//判斷完,不是休止符與結束符後,讓蜂鳴器唱歌
TR0 = 1; //讓定時器0開始工作
while(1)
{
FMQ = ~FMQ; //讓蜂鳴器不停地在開與關之間切換
DelayUs(cTemp1);
if(cTemp2 == cCount)
{
cCount = 0;
break;
}
}
}
}
}
////////////////////////////////////////////////////////////////////////
函數名稱:main
函數功能:完成系統的初始化,讓實驗板上的蜂鳴器不停循環的唱上面的兩首歌
參數介紹:無
返回值:
注意事項:無
////////////////////////////////////////////////////////////////////////
void main()
{
DelayUs(100); //穩定系統
Init_Time0();//定時器0中斷初始化
while(1)
{
FMQ_PlaySong(0); //播放「祝你平安」
DelayUs(100); //延時一下,以便播放下一首歌
FMQ_PlaySong(1); //播放「祝你平安」
DelayUs(100); //延時一下,以便播放下一首歌
}
}

相關焦點

  • 從零開始學單片機(八)蜂鳴器唱歌
    本文引用地址:http://www.eepw.com.cn/article/201611/319879.htm只要給一個0,它就會「叫」。讓它唱歌的原理很簡單,聲音大小是固定的,讓它的頻率變化,就能讓它發出不同的音符。代碼中在軟體循環延時過程中,依次給它一個固定頻率的方波,讓它唱起來。
  • 51單片機玩轉物聯網基礎篇04-蜂鳴器
    前言上一節,我們完成了按鍵操作,本節我們學習使用蜂鳴器,首先我們介紹下蜂鳴器,然後完成實驗:上電後默認驅動頻率為5KHZ,通過KEY1控制驅動頻率為1KHZ ,蜂鳴器,KEY2控制驅動頻率為 2KHZ,可以聽到不同的效果。
  • 單片機驅動蜂鳴器C51程序
    intsbit k1=P1^4; //按鈕1sbit k2=P1^5; //按鈕2sbit beep=P3^7; //接蜂鳴器/*********************************************************本程序出自http://www.51hei.com會員uiesers的辛勤勞動,作用是驅動蜂鳴器發出聲音
  • 單片機小白學步(22) IO口:蜂鳴器的使用/三極體的工作原理
    ======================================這一篇繼續上一篇的內容,我們來做實驗四:按鍵控制有源蜂鳴器,按下按鍵蜂鳴器響,釋放按鍵不響。本文引用地址:http://www.eepw.com.cn/article/201611/318511.htm蜂鳴器實驗四之前簡單介紹下蜂鳴器。
  • 單片機驅動蜂鳴器原理與設計
    蜂鳴器是一種一體化結構的電子訊響器,本文介紹如何用單片機驅動蜂鳴器,他廣泛應用於計算機、印表機、複印機、報警器、電話機等電子產品中作發聲器件。   蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。
  • 基於STC89C52單片機的溫度檢測系統設計
    其中一種解決方案是將單片機作為下位機採樣現場溫度,將其上傳給PC機繪製曲線。有鑑於點陣型圖形液晶顯示器成本逐年降低、顯示容量越來越大、工耗越來越小、而且可以方便地與單片機接口,本文設計了一種溫度檢測系統。
  • 單片機基礎:燥起來吧,蜂鳴器
    一、不可不知道的蜂鳴器基礎知識1、 蜂鳴器簡介:蜂鳴器是一種發聲器件 (這就夠了,就像知道LED是一種發光器件就OK)2、蜂鳴器分類:根據結構分,有壓電式和電磁式;根據」源「分,有無源蜂鳴器和有源蜂鳴器。3、必備知識點:物理學裡定義,聲音是由物體振動發出的,蜂鳴器也是如此,故」源」指的是蜂鳴器帶不帶振蕩源。
  • 圖形化編程玩51單片機(十三)簡單實用門鈴實驗
    特別提示:從本期起,將原來的文章標題「零基礎學51單片機」更改為「圖形化編程玩51單片機」本期實驗:模擬簡易門鈴;且有關閉門鈴功能。【使用說明】:當按下單片機上的S2按鍵後,蜂鳴器會發出八次短暫的「嘟嘟」聲作為呼叫。S3用於關閉或者打開門鈴。當門鈴處於關閉時,按下S2不會有呼叫效果。實際應用中,S2按鍵可作為門外的來客呼叫開關。S3可作為室內的門鈴控制開關。
  • 以STC89C52單片機為核心的電子密碼鎖設計
    電子密碼鎖通常使用ARM和單片機控制,單片機相對ARM實現較為簡單,功能較為完善,因此使用單片機控制較多。用單片機控制的窖碼鎖常使用彙編語言編寫程序,顯示器多數用數碼管。而本文所介紹的電子密獁鎖使用移植性及可讀性強的高級語言C語言編寫,便於修改和增減功能蚤同時採用顯示清楚,功率消耗小而且壽命長的1602 液晶顯示器,顯示更加直觀,使用更加方便。
  • 51單片機學習14-蜂鳴器驅動
    這篇驅動蜂鳴器,單片機IO口通過開關三極體來驅動蜂鳴器,這裡用PNP的三極體,常用SS8550。三極體b極電阻一般選用1K。
  • 基於Proteus單片機的音樂演奏實現系統
    單片機系統的設計分兩大部分:硬體設計部分和軟體設計部分。 1 硬體設計 硬體部分比較簡單,如果在開發板上做實驗可仿下面圖1 電路連接。 圖2 在Proteus 環境下用單片機控制蜂鳴器發聲的原理圖。 需要的關鍵元件:單片機和蜂鳴器。 為了便於軟體編程,先要了解單片機唱歌的基本原理。
  • 51單片機按鍵控制蜂鳴器啟停程序
    51單片機按鍵控制蜂鳴器啟停程序#include<reg52.h> #define uint unsigned int //宏定義sbit SPK=P3^5; //定義喇叭埠sbit key=
  • 蜂鳴器原理
    導讀:本文主要介紹的是蜂鳴器的原理,感興趣的盆友們快來學習一下吧~~~很漲姿勢的哦~~~本文引用地址:http://www.eepw.com.cn/article/277228.htm1.蜂鳴器原理--簡介  蜂鳴器其實就是一種一體化結構的電子訊響器
  • 一個蜂鳴器的原理圖
    ===============================================================電路圖:電路功能:本電路模塊,可直接連接到單片機的I/O進行使用,是一個通用的蜂鳴器驅動模塊。
  • 利用蜂鳴器和單片機演奏簡單的音樂電路設計
    利用蜂鳴器和單片機演奏簡單的音樂本文引用地址:http://www.eepw.com.cn/article/172876.htm實驗原理圖實驗程序/* =========================================================== *//* ---- *//* 曲譜存貯格式 uchar
  • 蜂鳴器是什麼_蜂鳴器報警工作原理
    消耗電流: 電磁式的依電壓的不同,從幾十到上百毫安培都有,壓電式的就省電的多,幾毫安培就可以正常的動作, 且在蜂鳴器啟動時,瞬間需消耗約三倍的電流,驅動方式: 二種蜂鳴器都有自激式的,只要接上直流電(DC)即可發聲,因為已內建了驅動線路在蜂鳴器中了,因為動作原理的不同,電磁式蜂鳴器要用1/2方波來驅動,壓電的用方波,才能有較好的聲音輸出。
  • 單片機ISP編程器使用
    單片機ISP編程器就是用來把這個hex文件燒寫到單片機裡去的工具,這樣我們的程序才會被執行。簡單介紹一下我們使用的ISP編程器,什麼是在系統編程技術呢?在系統可編程技術即In System Programming,簡單地說就是指待編程的單片機在實驗板(目標板)上,不用拆下來用編程器進行編程,只需利用ISP編程接口,通過下載線就可把程序代碼下載到單片機內部,ISP技術是對傳統編程技術的一大革新。通過ISP技術,我們在燒寫程序的時候就不用頻繁拔插晶片,只要滑鼠點擊即可把程序寫入單片機,徹底告別以前那樣用編程器反覆燒寫撥插晶片的煩惱。
  • 從零開始學習51單片機(八)獨立按鍵S1實驗3:一鍵控制N個設備
    今天的學習內容是:系統化編程讓一個按鍵能夠控制N個設備獨立按鍵S1的實驗3:在「獨立按鍵S1實驗2」的基礎上進一步改進,讓程序再次優化,學會怎樣將程序模塊化編寫,掌握了程序模塊化編寫,就能夠用一個獨立按鍵同時控制N個設備了
  • 串行口通信單片機根據上位機發送的數字控制蜂鳴器發聲
    程序源碼#include //聲明程序需要的全局變量unsigned char flag, a, num, benum;//聲明單片機的蜂鳴器sbit beep = P2 ^ 3;//聲明初始化函數void init(
  • 蜂鳴器驅動電路設計原理圖講解
    以下介紹的幾種蜂鳴器驅動電路是針對單片機I/O口的驅動電路,適用於現行的壓電式蜂鳴器。