430单片机点亮LED实验报告
- 格式:docx
- 大小:15.69 KB
- 文档页数:6
430单片机点亮LED实验报告
一.安装实验软件IAR
二.编写点亮LED灯程序
1.使P1.0口LED灯会不停的闪烁着,程序
#include
typedef unsigned int uint;
typedef unsigned char uchar;
/*延时函数*/
void Delay_Ms(uint x)
{
uint i;
while(x--)for(i=0;i<250;i++);
}
/*主函数*/
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset
P2DIR|=BIT0;//定义P1口为输出
while(1)//死循环
{
P2OUT^=BIT0;//P1.0口输出取反
Delay_Ms(600);//稍作延时
}
}
下载进去看到了P1.0口LED灯会不停的闪烁着。
2.实验目的让两盏灯交换闪烁程序
#include"msp430g2553.h"
void main(void) {
void Blink_LED();
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
P1DIR=BIT6;
P2DIR=BIT0;
while(1)
{
Blink_LED();
}
}
void Blink_LED()
{
_delay_cycles(1000000); //控制第二个LED P1OUT^=BIT6;
_delay_cycles(1000000); //控制第一个LED
P2OUT^=BIT0;
}
我编写这段程序的现象是一个灯先亮,另一个后亮,一个灯先灭,后一个再灭。就是两个灯的状态没有做到相反。后来我在我程序上做了一些改动。
#include"msp430g2553.h"
void main(void) {
void Blink_LED();
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
P1DIR=BIT6;
P2DIR=BIT0;
P1OUT |= BIT6;
P2OUT &= ~BIT6;
while(1)
{
Blink_LED();
}
}
void Blink_LED()
{
_delay_cycles(1000000); //控制第二个LED
P1OUT^=BIT6;
P2OUT^=BIT0;
}
3.LED灯逆循环点亮程序
#include
typedef unsigned char uint8; typedef unsigned int uint16; sbit ENLED1=P1^4;
sbit ENLED2=P1^3;
sbit ADDR0 =P1^0;
sbit ADDR1 =P1^1;
sbit ADDR2 =P1^2;
main()
{
uint16 i;
uint8 j;
ENLED1=0; ENLED2=1;
ADDR0=0; ADDR1=1; ADDR2=1; while(1)
{
P0=~(80>>j++);
for(i=1;i<20000;i++);
if(j==8)
j=0;
}
}
我写好程序了可是运行的时候结果不对),之后继续修改
程序while循环都没有对LED的串口做任何处理,把“P0=~(80>>j++); ”改成“P0=~(0x80>>j++); ”
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit ENLED1=P1^4;
sbit ENLED2=P1^3;
sbit ADDR0 =P1^0;
sbit ADDR1 =P1^1;
sbit ADDR2 =P1^2;
main()
{
uint16 i;
uint8 j;
ENLED1=0; ENLED2=1;
ADDR0=0; ADDR1=1; ADDR2=1;
while(1)
P0=~(0x80>>j++); //P0=~(80>>j++);
for(i=1;i<20000;i++);
if(j==8)
{
j=0;
}
}
四.实验总结
由于之前学过一段时间51单片机,所以有些东西比较清楚,但430和51一有很大不同,虽然内部结构很像,但430的寄存器的设置很麻烦,比如P1 P2口,那可真是麻烦得很,430这个IO口设置了如很多的功能,并且单独抽出了好几个设置的寄存器。用430单片机点亮算是入门吧。