#include <msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
#define keyin (P1IN & 0x0F)
void delay(void);
void main(void)
{
uchar temp= 0;
uint PWM_T = 1000; //占空比控制变量
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P6DIR |= BIT2;P6OUT |= BIT2;//关闭电平转换
P1DIR = BIT7; //设置P1.0~P.3为输入状态,P.7为输出
P1OUT = 0;
P2DIR=0XFF;
P1DIR |= 0x04; // P1.2 输出
P1SEL |= 0x04; // P1.2 TA1模式
P3DIR |= BIT4; //设置P3.4为输出状态
//P3OUT |= BIT4; //P3.4输出1
TACTL = TASSEL_1 + MC0; // ACLK, 清零Tar,增模式启动Timer_A
CCR0=65535-1; // PWM 周期2S
CCTL1 = OUTMOD_7; // CCR1 reset/set模式
CCR1= PWM_T ; // CCR1 PWM 任务周期
while(1)
{
if(keyin != 0x0f) //如果有键被按下
{
delay(); //延时消抖
if(keyin != 0x0f) //再次检测按键状态
{
temp=keyin;
while(keyin != 0x0f); //等待按键被放开
switch(temp) //转换键值
{
case 0x0e:
P2OUT&=~BIT3;break;//1110CCR1= ++PWM_T
case 0x0d:
CCR1= --PWM_T ;break;//1101
case 0x0b:
break;//1011
case 0x07:
break;//0111
default:
CCR1= PWM_T ;break;
}
P3OUT &= ~BIT4; //P3.4连接的LED闪烁一下
delay();delay();
P3OUT |= BIT4;
_BIS_SR(LPM3_bits); // 进入LPM3省电模式
// _NOP(); // C-spy使用
}
}
}
}
/*******************************************
函数名称:delay
功 能:用于消抖的延时
参 数:无
返回值 :无
********************************************/
void delay(void)
{
uint tmp;
for(tmp = 1000;tmp > 0;tmp--);
}
此帖出自
小平头技术问答
产生pwm 占空比可变 请问程序下进去没反映啊
#include#define uint unsigned int
#define uchar unsigned char
#define keyin (P1IN & 0x0F)
void delay(void);
void main(void)
{
uchar temp= 0;
uint PWM_T = 1000; //占空比控制变量
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 //可能应该要养成习惯,关看门狗放在第一句,虽然放在这里应该没事
P6DIR |= BIT2;P6OUT |= BIT2;//关闭电平转换 //可能是要养成习惯,out,dir顺序颠倒一下
P1DIR = BIT7; //设置P1.0~P.3为输入状态,P.7为输出
P1OUT = 0;
P2DIR=0XFF;
P1DIR |= 0x04; // P1.2 输出
P1SEL |= 0x04; // P1.2 TA1模式
P3DIR |= BIT4; //设置P3.4为输出状态
//P3OUT |= BIT4; //P3.4输出1
TACTL = TASSEL_1 + MC0; // ACLK, 清零Tar,增模式启动Timer_A //可能要养成习惯,开定时器计数要放在定时器各设置最后。我的习惯,用MC_1更明了
CCR0=65535-1; // PWM 周期2S //可能应该养成习惯,直接付减后的值。放在注释。当然这样应该也没影响,编译器应该默认就会自动优化的,不过我觉得还是弄个习惯好。数字是否对?
CCTL1 = OUTMOD_7; // CCR1 reset/set模式
CCR1= PWM_T ; // CCR1 PWM 任务周期
while(1)
{
if(keyin != 0x0f) //如果有键被按下
{
delay(); //延时消抖
if(keyin != 0x0f) //再次检测按键状态
{
temp=keyin;
while(keyin != 0x0f); //等待按键被放开
switch(temp) //转换键值
{
case 0x0e:
P2OUT&=~BIT3;break;//1110CCR1= ++PWM_T
case 0x0d:
CCR1= --PWM_T ;break;//1101 //减到负数是怎样的?
case 0x0b:
break;//1011
case 0x07:
break;//0111
default:
CCR1= PWM_T ;break;
}
P3OUT &= ~BIT4; //P3.4连接的LED闪烁一下
delay();delay();
P3OUT |= BIT4;
_BIS_SR(LPM3_bits); // 进入LPM3省电模式 //停止在这里没有唤醒的地方,除非复位
// _NOP(); // C-spy使用
}
}
}
}
/*******************************************
函数名称:delay
功 能:用于消抖的延时
参 数:无
返回值 :无
********************************************/
void delay(void)
{
uint tmp;
for(tmp = 1000;tmp > 0;tmp--);
}
[ 本帖最后由 t_shaojun126 于 2012-3-11 10:14 编辑 ]
一周热门 更多>