【大赛原创经验贴】LED流水灯实验
这是我学会的唯一一个程序,方法有些笨,不过还可以当入门的参考,一开始什么都不会,看着教程慢慢学,再尝试自己编,这个只能这样了,给大家看看吧。流水灯
#include<msp430x14x.h>
#define uint unsignedint
#define uchar unsigned char
//各个LED亮灭的宏定义
#define LED1_OFF P6DIR|= BIT7,P6OUT|=BIT7//方向输出 高电平灭
#define LED2_OFF P6DIR|= BIT6,P6OUT|=BIT6
#define LED3_OFF P6DIR|= BIT5,P6OUT|=BIT5
#define LED4_OFF P6DIR|= BIT4,P6OUT|=BIT4
#define LED5_OFF P6DIR|= BIT3,P6OUT|=BIT3
#define LED6_OFF P6DIR|= BIT2,P6OUT|=BIT2
#define LED7_OFF P6DIR|= BIT1,P6OUT|=BIT1
#define LED8_OFF P6DIR|= BIT0,P6OUT|=BIT0
#define LED1_ON P6DIR|= BIT7,P6OUT&=~BIT7 //方向输出 低电平亮
#define LED2_ON P6DIR|= BIT6,P6OUT&=~BIT6
#define LED3_ON P6DIR|= BIT5,P6OUT&=~BIT5
#define LED4_ON P6DIR|= BIT4,P6OUT&=~BIT4
#define LED5_ON P6DIR|= BIT3,P6OUT&=~BIT3
#define LED6_ON P6DIR|= BIT2,P6OUT&=~BIT2
#define LED7_ON P6DIR|= BIT1,P6OUT&=~BIT1
#define LED8_ON P6DIR|= BIT0,P6OUT&=~BIT0
//时钟设置
void int_clk()
{
uchar i;
BCSCTL1&=~XT2OFF; //打开XT振荡器
BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M
do
{
IFG1 &= ~OFIFG; //清除振荡错误标志
for(i = 0; i < 100; i++)
_NOP(); //延时等待
}
while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待
IFG1&=~OFIFG;
}
//延时子函数
void delay()
{
uint i,j;
for(i=0;i<=1000;i++)
{
for(j=0;j<=1000;j++)
;
}
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
int_clk(); //初始化时钟
//循环亮灭
while(1)
{
delay();
LED1_ON;
delay();
LED2_ON;
delay();
LED3_ON;
delay();
LED4_ON;
delay();
LED5_ON;
delay();
LED6_ON;
delay();
LED7_ON;
delay();
LED8_ON;
delay();
LED1_OFF;
delay();
LED2_OFF;
delay();
LED3_OFF;
delay();
LED4_OFF;
delay();
LED5_OFF;
delay();
LED6_OFF;
delay();
LED7_OFF;
delay();
LED8_OFF;
delay();
}
}
页:
[1]