
#define uint unsigned int
delay(uint);
void main()
{
WDTCTL = 0x5A80
uint ch[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}
uint i,j
P2DIR = 0xff
P2OUT = 0xff//低电平点亮明拦
while(1)
{
for(i=0i<8i++)
{
P2OUT = ch[i]
delay(50000)
}
for(j=6j>0j--)
{
P2OUT = ch[j]
delay(50000)
}
}
}
void delay(uint z)
{
uint a
for(a=0a<za++)
}
1.这是较为简单的流水灯程序,没有使用定时器,只是简单的延时纯蔽;
若要精确延时,需要设置定时器A或做槐州B.
2.也可以通过移位 *** 作来实现流水灯,移位 *** 作放入中断内最好
/*流水灯,P4口连接LED
*/
#include
"msp430x14x.h"
//__interrupt
void
TimerB_ISR(void)
void
Init_Port(void)
void
Init_TimerB(void)
void
InitSystemClock(void)
//
初始化系统时钟
unsigned
char
led
void
main(
void
)
{
//
Stop
watchdog
timer
to
prevent
time
out
reset
WDTCTL
=
WDTPW
+
WDTHOLD//关闭看门狗
InitSystemClock()
Init_Port()
Init_TimerB()
_EINT()
led=0x01
while(1)/橘悄和/LPM0
}
void
InitSystemClock(void)
//
初始化系统时钟
{
unsigned
char
i
BCSCTL1=0x00//Set
430
clk
开启XT2,DOC的标称频率为最低
且不分频;XT1为低速晶体(32.768K)
BCSCTL2=SELM_2+SELS//选择MCLK
SCLK的时钟源为高速时钟
不分频,均为8M
do
{
IFG1&=~OFIFG
for(i=0xffi>0i--)
}
while
((IFG1&OFIFG)!=0)
P5DIR=BIT4+BIT5+BIT6
P5SEL|=BIT4+BIT5+BIT6/圆盯/将MCLK
SCLK
ACLK分别输出至P5.4
5
6口
}
void
Init_Port(void)
{
P4DIR=0XFF
P4SEL=0
return
}
void
Init_TimerB(void)
{
/运尘/选择ACLK,清除TAR
TBCTL
=TBSSEL0
+TBCLR
//TBCCRO允许中断
TBCCTL0=
CCIE
//时间间隔为1s
TBCCR0=32768
//增计数模式
TBCTL
|=MC0
return
}
#pragma
vector=TIMERB0_VECTOR
__interrupt
void
TimerB_ISR(void)
{
led=(led==0x80)?
0x01:(led<<1)//led的流水灯的输出值计算:循环左移
P4OUT
=led
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)