MSP430_PWM控制的呼吸灯

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
unsigned int TL=100;
unsigned int TH=900;
unsigned int T=1000;
char IO_H=0;//PWM波高低电平标志位
int Time_05ms_Cnt=0;
char UP_Count=0;//占空比调整标志位,初始值为0(亮度减弱,即占空比减少)
int PWM_Step=20;
char Key_Pressed_Flag=0;
char Key_Front=1, Key_Current=1;
int Key_Det_1ms_Cnt=0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗

//配置系统时钟
DCOCTL = 0;
BCSCTL1 = CALBC1_1MHZ; // 设置 DCO为1M
DCOCTL = CALDCO_1MHZ;
//配置定时器
P1DIR |=BIT0; // P1.0为输出
P1OUT |=BIT0; //初始化为1,灯亮
IO_H=1;//PWM波高低电平标志位,初始化为1
CCTL0 = CCIE; // CCR0中断使能
CCR0 = TH; //设置定时器计数值
TACTL = TASSEL_2 + MC_1; // SMCLK为定时器时钟,向上计数模式


//使能全局中断
_BIS_SR(GIE); // 使能中断
while(1)
{

}
}
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
//功能1:5ms为周期进一次占空比调整(100+900=1000=1ms)
Time_05ms_Cnt++;
if(Time_05ms_Cnt==10)//每10次(1khz/10= 10ms) 调整一次占空比
{
Time_05ms_Cnt=0;
if(UP_Count) //呼吸灯 亮度调整 标志 1--增量,0--减弱
{
TH+=PWM_Step;// 占空比调整步长,确定了呼吸灯的快慢
if(TH==900)
UP_Count=0;
}
else
{
TH-=PWM_Step;
if(TH==100)
UP_Count=1;
}
}



//功能2:PWM信号输出:控制灯的亮度强弱变化
TL=T-TH;
if(IO_H)
{ P1OUT &=~BIT0; CCR0 = TL; IO_H=0; }
else
{ P1OUT |=BIT0; CCR0 = TH; IO_H=1; }
}

相关文档
最新文档