0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

開(kāi)發(fā)板產(chǎn)生不同頻率聲音的程序(兩個(gè)定時(shí)器的使用)

算法&編程學(xué)院 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:工程師3 ? 2018-04-20 09:12 ? 次閱讀

這個(gè)程序是開(kāi)發(fā)板中用來(lái)產(chǎn)生不同頻率聲音的程序,整體程序較為簡(jiǎn)單,主要是兩個(gè)定時(shí)器的使用,代碼及我的注釋如下。

[cpp] view plain copy/*********************************************************

程序功能:用固定頻率的方波驅(qū)動(dòng)蜂鳴器,共16種音調(diào);在蜂鳴器

發(fā)出不同音調(diào)的同時(shí),LED發(fā)光以二進(jìn)制數(shù)字形式指示

當(dāng)前音調(diào)的編號(hào)(1~16)

----------------------------------------------------------

撥碼開(kāi)關(guān)設(shè)置:將BUZZER位撥至ON,其余位撥至OFF

測(cè)試說(shuō)明:聆聽(tīng)蜂鳴器發(fā)聲的音調(diào)變化。同時(shí)led也有對(duì)應(yīng)的指示

**********************************************************/

#include 《msp430.h》

typedef unsigned char uchar;

uchar step = 0xff;

/************************主函數(shù)************************/

void main( void )

{

uchar i;

WDTCTL = WDTPW + WDTHOLD; //關(guān)狗

/*下面六行程序關(guān)閉所有的IO口*/

P1DIR = 0XFF;P1OUT = 0XFF;

P2DIR = 0XFF;P2OUT = 0XFF;

P3DIR = 0XFF;P3OUT = 0XFF;

P4DIR = 0XFF;P4OUT = 0XFF;

P5DIR = 0XFF;P5OUT = 0XFF;

P6DIR = 0XFF;P6OUT = 0XFF;

P6DIR |= BIT2;P6OUT |= BIT2; //關(guān)閉電平轉(zhuǎn)換

/*------選擇系統(tǒng)主時(shí)鐘為8MHz-------*/

BCSCTL1 &= ~XT2OFF; //打開(kāi)XT2高頻晶體振蕩器

do

{

IFG1 &= ~OFIFG; //清除晶振失敗標(biāo)志

//IFG1是中斷寄存器 OFIFG是晶振啟動(dòng)失敗中斷標(biāo)志位

for (i = 0xFF; i 》 0; i--); //等待8MHz晶體起振

}

while ((IFG1 & OFIFG)); //晶振失效標(biāo)志仍然存在?

//上面這一步主要是等待晶振正常工作

BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK選擇高頻晶振

TACCTL0 |= CCIE; //使能比較中斷

TACTL |= TASSEL_2 + ID_3 ; //計(jì)數(shù)時(shí)鐘選擇SMLK=8MHz,1/8分頻后為1MHz

TBCCR0 = 4096*2 - 1; //周期兩秒

//時(shí)間計(jì)算:32768/8*2+1注意使用的是手表晶振

TBCCTL0 |= CCIE;

TBCTL |= TBSSEL_1 + ID_3 + MC_1; //時(shí)鐘源ACLK/8,up mode

P6DIR |= BIT7; //蜂鳴器對(duì)應(yīng)IO為6.7設(shè)置為輸出

P2DIR = 0xff; //指示對(duì)應(yīng)的狀態(tài)

P2OUT = 0xff;

_EINT();

LPM1;

}

/*******************************************

函數(shù)名稱:Timer_A

功 能:定時(shí)器A的中斷服務(wù)函數(shù),在這里驅(qū)動(dòng)

蜂鳴器發(fā)聲

參 數(shù):無(wú)

返回值 :無(wú)

********************************************/

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

P6OUT ^= BIT7; // Toggle P6.7

}

/*******************************************

函數(shù)名稱:Timer_B

功 能:定時(shí)器B的中斷服務(wù)函數(shù),在這里更改

蜂鳴器發(fā)聲頻率

參 數(shù):無(wú)

返回值 :無(wú)

********************************************/

#pragma vector=TIMERB0_VECTOR

__interrupt void Timer_B (void)

{

if(step == 0xff) //step的初值就是0xff,

TACTL |= MC_1;//需要將TimerA設(shè)置為增計(jì)數(shù)模式,可以在初始化的時(shí)候設(shè)置,不明白為什么放在這個(gè)地方。

step++;

switch(step)

{

case 0: TACCR0 = 5000; P2OUT = ~1; break; // 100Hz

//P2OUT使用led顯示對(duì)應(yīng)的數(shù)值,只是為了便于演示,沒(méi)實(shí)際意義

case 1: TACCR0 = 2500; P2OUT = ~2; break; // 200Hz

case 2: TACCR0 = 1250; P2OUT = ~3; break; // 400Hz

case 3: TACCR0 = 625; P2OUT = ~4; break; // 800Hz

case 4: TACCR0 = 500; P2OUT = ~5; break; // 1KHz

case 5: TACCR0 = 250; P2OUT = ~6; break; // 2KHz

case 6: TACCR0 = 167; P2OUT = ~7; break; // 3KHz

case 7: TACCR0 = 125; P2OUT = ~8; break; // 4KHz

case 8: TACCR0 = 100; P2OUT = ~9; break; // 5KHz

case 9: TACCR0 = 83; P2OUT = ~10; break; // 6KHz

case 10: TACCR0 = 71; P2OUT = ~11; break; // 7KHz

case 11: TACCR0 = 63; P2OUT = ~12; break; // 8KHz

case 12: TACCR0 = 56; P2OUT = ~13; break; // 9KHz

case 13: TACCR0 = 50; P2OUT = ~14; break; // 10KHz

case 14: TACCR0 = 33; P2OUT = ~15; break; // 15KHz

case 15: TACCR0 = 25; P2OUT = ~16; break; // 20KHz

case 16: step = 0xff; // 接著往上加,和清零的效果一樣,循環(huán)播放

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3228

    瀏覽量

    114155
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    888

    瀏覽量

    45782
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32G4定時(shí)器TIM輸入捕獲頻率測(cè)量

    摘要本文章基于國(guó)信長(zhǎng)天M4開(kāi)發(fā)板,講述了STM32G4 定時(shí)器TIM輸入捕獲頻率測(cè)量的因通過(guò)用,祝各位學(xué)生藍(lán)橋杯比賽取得好成績(jī)!M4開(kāi)發(fā)板 頻率
    發(fā)表于 08-16 06:35

    定時(shí)器介紹

    同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲, 定時(shí)器0控制頻率,定時(shí)器1控制同個(gè)
    發(fā)表于 02-23 15:56 ?20次下載

    【實(shí)驗(yàn)38】定時(shí)器定時(shí)

    HL配套C實(shí)驗(yàn)例程100例之定時(shí)器定時(shí),配合開(kāi)發(fā)板學(xué)習(xí)效果更好。
    發(fā)表于 04-11 16:09 ?7次下載

    【實(shí)驗(yàn)45】用定時(shí)器產(chǎn)生方波0

    HL配套C實(shí)驗(yàn)例程100例之用定時(shí)器產(chǎn)生方波0,配合開(kāi)發(fā)板學(xué)習(xí)效果更好。
    發(fā)表于 04-11 16:09 ?6次下載

    stm32定時(shí)器中斷程序

    STM32的定時(shí)器個(gè)強(qiáng)大的模塊,定時(shí)器使用的頻率也是很高的,定時(shí)器可以做一些基本的定時(shí),還可以
    發(fā)表于 10-12 16:59 ?1.3w次閱讀

    555定時(shí)器產(chǎn)生方波原理(四款555定時(shí)器產(chǎn)生方波的電路詳解)

    本文主要介紹了555定時(shí)器產(chǎn)生方波原理(五款555定時(shí)器產(chǎn)生方波的電路詳解)。555定時(shí)器的功能主要由
    發(fā)表于 01-22 09:07 ?35.9w次閱讀
    555<b class='flag-5'>定時(shí)器</b><b class='flag-5'>產(chǎn)生</b>方波原理(四款555<b class='flag-5'>定時(shí)器</b><b class='flag-5'>產(chǎn)生</b>方波的電路詳解)

    如何同時(shí)使用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲詳細(xì)單片機(jī)程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何同時(shí)使用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲嵌套運(yùn)用的詳細(xì)單片機(jī)程序免費(fèi)下載。
    發(fā)表于 11-05 08:00 ?11次下載
    如何同時(shí)使用<b class='flag-5'>兩個(gè)</b><b class='flag-5'>定時(shí)器</b>控制蜂鳴器發(fā)聲詳細(xì)單片機(jī)<b class='flag-5'>程序</b>免費(fèi)下載

    同時(shí)使用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲的程序代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是同時(shí)使用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲的程序代碼免費(fèi)下載。
    發(fā)表于 06-20 17:44 ?6次下載
    同時(shí)使用<b class='flag-5'>兩個(gè)</b><b class='flag-5'>定時(shí)器</b>控制蜂鳴器發(fā)聲的<b class='flag-5'>程序</b>代碼免費(fèi)下載

    使用單片機(jī)開(kāi)發(fā)板實(shí)現(xiàn)LED流水和定時(shí)器程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)開(kāi)發(fā)板實(shí)現(xiàn)LED流水和定時(shí)器程序免費(fèi)下載。
    發(fā)表于 06-10 17:15 ?2次下載
    使用單片機(jī)<b class='flag-5'>開(kāi)發(fā)板</b>實(shí)現(xiàn)LED流水和<b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>程序</b>免費(fèi)下載

    MSP430F5529通過(guò)定時(shí)器A產(chǎn)生兩個(gè)反相頻率占空比可調(diào)PWM波

    兩個(gè)定時(shí)器產(chǎn)生兩個(gè)反相的PWM波并通過(guò)一個(gè)捕獲比較捕獲其中一
    發(fā)表于 11-19 20:36 ?3次下載
    MSP430F5529通過(guò)<b class='flag-5'>定時(shí)器</b>A<b class='flag-5'>產(chǎn)生</b><b class='flag-5'>兩個(gè)</b>反相<b class='flag-5'>頻率</b>占空比可調(diào)PWM波

    【國(guó)信長(zhǎng)天藍(lán)橋杯】③ STM32G431 TIM輸入捕獲,定時(shí)器輸入捕獲頻率測(cè)量使用步驟

    摘要本文章基于國(guó)信長(zhǎng)天M4開(kāi)發(fā)板,講述了STM32G4 定時(shí)器TIM輸入捕獲頻率測(cè)量的因通過(guò)用,祝各位學(xué)生藍(lán)橋杯比賽取得好成績(jī)!M4開(kāi)發(fā)板 頻率
    發(fā)表于 11-30 11:51 ?11次下載
    【國(guó)信長(zhǎng)天藍(lán)橋杯】③ STM32G431 TIM輸入捕獲,<b class='flag-5'>定時(shí)器</b>輸入捕獲<b class='flag-5'>頻率</b>測(cè)量使用步驟

    基于cubemx的stm32開(kāi)發(fā)之路(使用正點(diǎn)原子戰(zhàn)艦V3開(kāi)發(fā)板)——基本定時(shí)器的應(yīng)用

    1hz的閃爍實(shí)驗(yàn)設(shè)備正點(diǎn)原子新戰(zhàn)艦V3 STM32F103ZET6開(kāi)發(fā)板學(xué)習(xí)st-link燒錄定時(shí)器原理F103定時(shí)器組成STM32F1
    發(fā)表于 12-08 15:21 ?5次下載
    基于cubemx的stm32<b class='flag-5'>開(kāi)發(fā)</b>之路(使用正點(diǎn)原子戰(zhàn)艦V3<b class='flag-5'>開(kāi)發(fā)板</b>)——基本<b class='flag-5'>定時(shí)器</b>的應(yīng)用

    基于兩個(gè)NE555定時(shí)器的叮咚聲音發(fā)生電路圖

    這是基于兩個(gè)NE555定時(shí)器IC的叮咚聲音發(fā)生的電路圖,該電路設(shè)計(jì)用于在兩個(gè)可調(diào)頻率之間切換以
    的頭像 發(fā)表于 04-02 14:23 ?2124次閱讀
    基于<b class='flag-5'>兩個(gè)</b>NE555<b class='flag-5'>定時(shí)器</b>的叮咚<b class='flag-5'>聲音</b>發(fā)生<b class='flag-5'>器</b>電路圖

    基于兩個(gè)555定時(shí)器構(gòu)建的警笛電路

    在本教程中,您將學(xué)習(xí)如何使用兩個(gè) 555定時(shí)器 IC 構(gòu)建 555 警笛電路。
    的頭像 發(fā)表于 06-29 14:56 ?2284次閱讀
    基于<b class='flag-5'>兩個(gè)</b>555<b class='flag-5'>定時(shí)器</b>構(gòu)建的警笛電路

    stm32一個(gè)定時(shí)器能同時(shí)控制兩個(gè)燈以不同頻率閃爍嗎?

    STM32的定時(shí)器功能強(qiáng)大,**STM32的定時(shí)器可以同時(shí)控制兩個(gè)燈以不同頻率閃爍** 。
    的頭像 發(fā)表于 12-13 10:43 ?1722次閱讀