#include <msp430x16x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//控制位的宏定义
#define Ctrl_Out P3DIR |= BIT3 + BIT6 + BIT7;
#define Ctrl_0 P3OUT &= ~(BIT3 + BIT6 + BIT7)
#define SRCLK_1 P3OUT |= BIT7
#define SRCLK_0 P3OUT &= ~BIT7
#define SER_1 P3OUT |= BIT6
#define SER_0 P3OUT &= ~BIT6
#define RCLK_1 P3OUT |= BIT3
#define RCLK_0 P3OUT &= ~BIT3
//板上资源配置函数
void BoardConfig(uchar cmd)
{
uchar i;
Ctrl_Out;
Ctrl_0;
for(i = 0; i < 8; i++)
{
SRCLK_0;
if(cmd & 0x80) SER_1;
else SER_0;
SRCLK_1;
cmd <<= 1;
}
RCLK_1;
_NOP();
RCLK_0;
}
/**********************主函数****************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关狗
BoardConfig(0x38); // 打开电平转换,关闭流水灯和蜂鸣器
P1DIR |= BIT7; // P1.7选择为输出
P1SEL |= BIT7; // P1.7作为TA的OUT2输出
CCR0 = 128; // PWM Period
CCTL2 = OUTMOD_6; // CCR2 toggle/set
CCR2 = 64; // CCR2 PWM duty cycle
TACTL = TASSEL_1 + MC_3; // ACLK, up-down mode
TBCCR0 = 4096*5-1; //定时5S
TBCTL = TBSSEL_1 + ID_3 + MC_1; // 时钟源ACLK/8
_BIS_SR(LPM3_bits); // Enter LPM3
}