基于MSP430跑马灯程序
#include
void Delay(unsigned int time)
{
while(time--)
{
_NOP();
}
}
unsigned int FLASH_led[]= //跑马灯花样
{0x0001,0x8000,0x0003,0xc000,0x0007,0xe000,
0x000f,0xf000,0x001f,0xf800,0x003f,0xfc00,
0x007f,0xfe00,0x00ff,0xff00,0x01ff,0xff80,
0x03ff,0xffc0,0x07ff,0xffe0,0x0fff,0xfff0,
0x1fff,0xfff8,0x3fff,0xfffc,0x7fff,0xfffe,
0xffff,0xffff,0x0005,0xa000,0x0015,0xa800,
0x0055,0xaa00,0x0155,0xaa80,0x0555,0xaaa0,
0x1555,0xaaa8,0x5555,0xaaaa};
unsigned int Time_led[]= //跑马灯速度
{0x0fff,0x1fff,0x2fff,0x3fff,0x4fff,0x5fff,
0x6fff,0x7fff,0x8fff,0x9fff,0xafff,0xbfff,
0xcfff,0xdfff,0xefff,0xffff};
int main(void)
{
unsigned char i;
unsigned char count; //跑马灯花样计数
unsigned char count_time=0; //跑马灯时间循环计数
unsigned char speed_up=0; //加速标志位
unsigned int temp;
WDTCTL = WDTPW + WDTHOLD; //关开门狗
P3DIR |= BIT2; //使能跑马灯的电源信号P3OUT &= ~BIT2;
P8SEL = 0X00; //配置P8.6,P8.7
PADIR = 0xffff;
PAOUT = 0x0000; //点亮全部LED,用于测试for(i=0;i<10;i++)
{
Delay(0xffff);
}
{
for(count=0;count<46;count++)
{
temp=FLASH_led[count];
if(count%2==0) //正向旋转
{
for(i=0;i<16;i++)
{
PAOUT = 0xffff-temp;
temp = temp << 1;
Delay(Time_led[count_time]);
}
}
else //反向旋转
{
for(i=0;i<16;i++)
{
PAOUT = 0xffff-temp;
temp = temp >> 1;
Delay(Time_led[count_time]);
}
}
}
for(count=0;count<50;count++) //间隔旋转
{
if(count%2==0)
{
PAOUT = 0x5555;
}
else
{
PAOUT = 0xaaaa;
}
Delay(Time_led[count_time]);
}
if(speed_up==0)
{
count_time++;
if(count_time==16) //计数到16则为一个周期
{
speed_up = 1;
}
else
{
count_time--;
if(count_time==0)
{
speed_up = 0;
}
}
}
}