#include <msp430x14x.h>
#define CPU_F ((double)8000000)
#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 main(void)
{
WDTCTL = WDTPW +WDTHOLD;
unsigned int temp1,temp2;
P5DIR = 0XFF;
P5OUT = 0XFF;
TACTL = TASSEL0 + TACLR; // ACLK, 清除 TAR
CCR0 = 512-1; // PWM周期
CCTL1 = OUTMOD_7;
CCR1 = 2; //占空比 384/512=0.75
CCTL2 = OUTMOD_7;
CCR2 = 128; //占空比128/512=0.25
P1DIR |= 0x04; // P1.2 输出
P1SEL |= 0x04; // P1.2 TA1
P2DIR |= 0x01; // P2.0 输出
P2SEL |= 0x01; // P2.0 TA2
TACTL |= MC0; // Timer_A 增计数模式
for (;;)
{
temp1=P1IN & 0X0F; //读取按键IO口电平
if(temp1 !=0X0F) //判断是否有按键被按下
{
delay_ms(100); //按键延时防抖动
temp2=P1IN&0X0F;
if(temp2==temp1)
{
while(temp2!=0X0F) //等待松开按键
temp2=P1IN&0X0F;
{
switch(temp1)
{
case 0x0E: CCR1+=50; break;
case 0x0d: CCR1-=50; break;
case 0x0b: P5OUT=0XFD; break;
case 0x07: P5OUT=0XFE; break;
}
}
}
}
}
}
评论0