硬件描述
两个LED灯:
P1.0接LED1(红),P4.7接LED2(绿).
IO口输出高电平时,LED亮
IO口输出低电平时,LED灭
点亮红灯
(ccs中的c语言代码,用430进行调试)
P1口八个引脚
.7 .6 .5 .4 .3 .2 .1 .0
P1.0 红色LED1
控制:P1.7 6 5 4 3 2 1 0
二进制 : 0 0 0 0 0 0 0 1
八进制 : 0x01
输出:P1DIR = 0x01;
输出寄存器:P1OUT = 0x01;
#include<msp430.h>
int main(void)
{
//关闭看门狗
WDTCTL=WDTPW | WDTHOLED;
//设置P1.0为输出
P1DIR = 0x01;
//设置P1.0为高电平,点亮LED灯
P1OUT = 0x01;
//设置P1.0为低电平,熄灭LED灯
P1OUT = 0x00;
//设置P1.0为高电平,点亮LED灯
P1OUT = 0x01;
}
点亮绿灯
P4口八个引脚
.7 .6 .5 .4 .3 .2 .1 .0
P4.7 绿色LED2
控制:P4.7 6 5 4 3 2 1 0
二进制 : 1 0 0 0 0 0 0 0
八进制 : 0x80
输出:P4DIR = 0x80;
输出寄存器:P4OUT = 0x80;
#include<msp430.h>
int main(void)
{
//关闭看门狗
WDTCTL=WDTPW | WDTHOLED;
//设置P4.7为输出
P4DIR = 0x80;
//设置P4.7为高电平,点亮LED灯
P4OUT = 0x80;
//设置P4.7为低电平,熄灭LED灯
P4OUT = 0x00;
//设置P4.7为高电平,点亮LED灯
P4OUT = 0x80;
}
红色LED灯的闪烁
亮→灭→亮 (每个中间需要有时间延时)
#include<msp430.h>
int main(void)
{
unsigned int T_deley;
//关闭看门狗
WDTCTL = WDTPW | WDTHOLED;
//设置P1.0的方向为输出
P1DITR = 0x01;
while(1)
{
P1OUT = 0x01;
//时间延时
for(T_deley=0;T_deley<50000;T_deley++);
P1OUT = 0x00;
for(T_deley=0;T_deley<50000;T_deley++);
}
}
绿色LED灯的闪烁
#include<msp430.h>
int main(void)
{
unsigned int T_deley;
//关闭看门狗
WDTCTL = WDTPW | WDTHOLED;
//设置P4.7的方向为输出
P4DIR = 0x80;
while(1)
{
P4OUT = 0x80;
//时间延时
for(T_deley=0;T_deley<50000;T_deley++);
P4OUT = 0x00;
for(T_deley=0;T_deley<50000;T_deley++);
}
}
红绿灯交替闪烁
#include<msp430.h>
int main(void)
{
unsigned int T_deley;
//关闭看门狗
WDTCTL = WDTPW | WDTHOLED;
//设置P1.0的方向为输出
P1DIR = 0x01;
//设置P4.7的方向为输出
P4DIR = 0x80;
while(1)
{
P1OUT = 0x01;
P4OUT = 0x00;
for(T_deley=0;T_deley<50000;T_deley++);
P1OUT = 0x00;
P4OUT = 0x80;
for(T_deley=0;T_deley<50000;T_deley++);
}
}
呼吸灯
亮灯频率超前,灭的频率降低就行,具体原理还未深刻理解,只会照猫画虎
注:以下代码仓促写完,未调试,可能会有小问题
#include<msp430.h>
int main(void)
{
WDTCTL = WDTPW | WDTHOLD;
unsigned int de1,de2,deley,i;
i=0;
de1=0;
de2=500-de1;
P1DIR=0x01;
while(1)
{
if(i==0)
{
P1OUT=0x01;
for(deley=0;deley<de1;deley++)
{
if(de1!=500)
de1++;
if(de1==500)
i=1;
}
P1OUT=0x00;
for(deley=0;deley<de2;deley++);
}
if(i==1)
{
P1OUT=0x01;
for(deley=0;deley<de1;deley++)
{
if(de1!=0)
de1--;
if(de1==0)
i=0;
}
P1OUT=0x00;
for(deley=0;deley<de2;deley++);
}
}
}
补作业原因
寒假老师布置作业,但只学会了控制灯的开关,没有学多少,这几天会补到老师要求的地方