×
嵌入式 > 技术百科 > 详情

msp430f149的呼吸灯的制作

发布时间:2020-06-01 发布时间:
|

根据控制430f149单片机pwm的输出以及延时的时间来控制呼吸灯的亮暗程度及时间:

#include "msp430x14x.h"
//*************************************************************
// 延时函数,对于1M主频,约延时1ms
//*************************************************************
void delay_1ms(void)
{
unsigned int k;
for (k=0;k<195;k++);
}

// *************************************************************
// 延时函数,延时n*ms
//*************************************************************
void delay_nms(unsigned int n)
{
unsigned int j;
for (j=0;j
{
delay_1ms();
}
}

//*************************************************************
// 主程序
//*************************************************************
void main(void)
{
unsigned const PWMPeriod = 1500; //设置PWMPeriod参数
volatile unsigned int i,j; //变量
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
BCSCTL1=RSEL0+RSEL1+RSEL2; //1M内部时钟,其他也可以
DCOCTL =DCO0+DCO1+DCO2;
P1DIR |=BIT2;
P1SEL |=BIT2;
P1DIR |=BIT3;
P1SEL |=BIT3;
TACCR0 = PWMPeriod; // 设置PWM 周期
TACCTL1 = OUTMOD_7; // 设置PWM 输出模式为:7 - PWM复位/置位模式,
TACCTL2 = OUTMOD_7; // 设置PWM 输出模式为:7 - PWM复位/置位模式,
// 即输出电平在TAR的值等于CCR1时复位为0,当TAR的值等于CCR0时置位为1,改变CCR1,从而产生PWM。其实模式2也可以
TACTL = TASSEL_2 +MC_1; // 设置TIMERA的时钟源为SMCLK, 计数模式为up,到CCR0再自动从0开始计数

while(1)
{

CCR1=0;
CCR2  = 1000;
for(i=0;i
{
CCR1=i;

delay_nms(4-(i/500)); //占空比变化的延时,调整延迟时间可改变呼吸灯变暗的速度
//在暗的时候延长delay时间,可增强效果
}
for(j=PWMPeriod;j>0;j-=1)
{
CCR2=j;
delay_nms(4-(j/500)); //占空比变化的延时,调整延迟时间可改变呼吸灯变暗的速度
//在暗的时候延长delay时间,可增强效果
}


CCR1=1000;
CCR2=0;
delay_nms(600); //暗0.6S增强效果
}
}


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题