?? main.c
字號:
/*********************************************************
程序功能:用固定頻率的方波驅動蜂鳴器,共16種音調;在蜂鳴器
發出不同音調的同時,LED發光以二進制數字形式指示
當前音調的編號(1~16)
----------------------------------------------------------
測試說明:聆聽蜂鳴器發聲的音調變化。
**********************************************************/
#include <msp430.h>
#include "BoardConfig.h"
uchar step = 0xff;
/************************主函數************************/
void main( void )
{
uchar i;
WDTCTL = WDTPW + WDTHOLD; //關狗
BoardConfig(0xb0); //關數碼管、流水燈和電平轉換
/*------選擇系統主時鐘為8MHz-------*/
BCSCTL1 &= ~XT2OFF; //打開XT2高頻晶體振蕩器
do
{
IFG1 &= ~OFIFG; //清除晶振失敗標志
for (i = 0xFF; i > 0; i--); //等待8MHz晶體起振
}
while ((IFG1 & OFIFG)); //晶振失效標志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK選擇高頻晶振
TACCTL0 |= CCIE; //使能比較中斷
TACTL |= TASSEL_2 + ID_3 ; //計數時鐘選擇SMLK=8MHz,1/8分頻后為1MHz
TBCCR0 = 4096*2 - 1; //周期兩秒
TBCCTL0 |= CCIE;
TBCTL |= TBSSEL_1 + ID_3 + MC_1; //時鐘源ACLK/8,up mode
P6DIR |= BIT7; //蜂鳴器對應IO設置為輸出
P2DIR = 0xff;
P2OUT = 0xff;
_EINT();
LPM1;
}
/*******************************************
函數名稱:Timer_A
功 能:定時器A的中斷服務函數,在這里驅動
蜂鳴器發聲
參 數:無
返回值 :無
********************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P6OUT ^= BIT7; // Toggle P6.7
}
/*******************************************
函數名稱:Timer_B
功 能:定時器B的中斷服務函數,在這里更改
蜂鳴器發聲頻率
參 數:無
返回值 :無
********************************************/
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
if(step == 0xff) //up mode
TACTL |= MC_1;
step++;
switch(step)
{
case 0: TACCR0 = 5000; P2OUT = ~1; break; // 100Hz
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; // 循環播放
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -