如题所述
你的要求说的不是太清,没有说明当哪个IO口输入低时驱动蜂鸣器,也没有说明是高还是低电平驱动蜂鸣器。我这个程序的作用是p30输入低时,p67输出高,否则p67输出低,不合适的话,你只需稍微改下,即可满足你的要求
#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;
}
}
#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;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-12-21
/*蜂鸣器接在P67口上*/
#include <msp430x14x.h>
#define CPU_F ((double)8000000) //假设晶振8M
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
/*系统时钟初始化*/
void Clock_Init()
{ unsigned char i;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ
do{
IFG1&=~OFIFG; //清除振荡器错误标志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待
IFG1&=~OFIFG;
}
/*端口初始化*/
void Port_Init()
{ P6SEL&= ~BIT7; //p67口为普通I/O
P6DIR |= BIT7; //P67为输出方向
P6OUT |= BIT7; //P67口初始高,蜂鸣器不响
}
/*主程序*/
void main(void)
{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化
while(1)
{ P6OUT &= ~BIT7; //P67置低,蜂鸣器响
delay_ms(200); //延时200ms
P6OUT |= BIT7; //P67置高,蜂鸣器不响
delay_ms(200); //延时200ms
}
}追问
#include <msp430x14x.h>
#define CPU_F ((double)8000000) //假设晶振8M
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
/*系统时钟初始化*/
void Clock_Init()
{ unsigned char i;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ
do{
IFG1&=~OFIFG; //清除振荡器错误标志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待
IFG1&=~OFIFG;
}
/*端口初始化*/
void Port_Init()
{ P6SEL&= ~BIT7; //p67口为普通I/O
P6DIR |= BIT7; //P67为输出方向
P6OUT |= BIT7; //P67口初始高,蜂鸣器不响
}
/*主程序*/
void main(void)
{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化
while(1)
{ P6OUT &= ~BIT7; //P67置低,蜂鸣器响
delay_ms(200); //延时200ms
P6OUT |= BIT7; //P67置高,蜂鸣器不响
delay_ms(200); //延时200ms
}
}追问
谢谢,很详细。但是主程序没有I/O口输入(任意一个)。另外我没说清楚 低电平输入有效,蜂鸣器接P67 高电平响。