#include <msp430x14x.h>//声明库
void main(void) //主函数
{
WDTCTL=WDTPW+WDTHOLD//关掉看门狗
P6DIR |=0x80 //设定P67为颂乱指输出
P3DIR &=0xfe //设定P30为输输入
while(1) {
if(P3IN&0X01==0)
P6OUT|=0x80
else
P6OUT&=0x7f
}
}
和定时器A一样用:)给端程序段祥仿先看看:
/握纤*********************************************************
程序功能:用固定频率的方波驱动蜂鸣器,共16种音调;在蜂鸣器
发出不同音调的同时,LED发光以二进制数字形式指示
当前音调的编号(1~16)
----------------------------------------------------------
测试说明:聆听蜂鸣器发声的音调变化。
**********************************************************/
#include
"MSP430x14x.h"
#include
"CLK.h"
#include
"LCD1602.h"
unsigned
char
step
=
0xff
void
main()
{
//
Stop
watchdog
timer
to
prevent
time
out
reset
WDTCTL
=
WDTPW
+
WDTHOLD
Init_CLK()//8Mhz起震
BCSCTL2
|=SELM_2+SELS//MCLK和SMCLK选择高频晶振
Init_LCD()
LCD_set_position(0x00)
LCD_prints("BUZZER
PLAYER:")
LCD_set_position(0x40)
LCD_prints("Current:")
TACCTL0
|=CCIE//使能比较中断
TACTL=TASSEL_2+ID_3//TimerA选择SMCLK,8分频后为1MHz
TBCCTL0
|=CCIE
TBCTL=TASSEL_1+ID_3+MC_1//时钟源ACLK/8,up
mode
TBCCR0=4096-1//(32768/8),周期为宴圆1秒
P3DIR
|=BIT7
P3OUT
|=BIT7
_EINT()
LPM1
}
#pragma
vector=TIMERA0_VECTOR
__interrupt
void
Timer_A
(void)//蜂鸣器发声
{
P3OUT
^=BIT7
}
#pragma
vector=TIMERB0_VECTOR
__interrupt
void
Timer_B(void)//改变频率
{
if(step==0xff)
TACTL
|=MC_1
step++
LCD_set_position(0x48)LCD_printc(step+48)
switch(step)
{
case
0:
TACCR0
=
5000break
//
100Hz
case
1:
TACCR0
=
2500
break
//
200Hz
case
2:
TACCR0
=
1250
break
//
400Hz
case
3:
TACCR0
=
625
break
//
800Hz
case
4:
TACCR0
=
500
break
//
1KHz
case
5:
TACCR0
=
250
break
//
2KHz
case
6:
TACCR0
=
167
break
//
3KHz
case
7:
TACCR0
=
125
break
//
4KHz
case
8:
TACCR0
=
100
break
//
5KHz
case
9:
TACCR0
=
83
break
//
6KHz
case
10:
TACCR0
=
71
break
//
7KHz
case
11:
TACCR0
=
63
break
//
8KHz
case
12:
TACCR0
=
56
break
//
9KHz
case
13:
TACCR0
=
50
break
//
10KHz
case
14:
TACCR0
=
33
break
//
15KHz
case
15:
TACCR0
=
25
break
//
20KHz
case
16:
step
=
0xff
//
循环播放
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)