单片机跑马灯实验报告

单片机跑马灯实验报告
单片机跑马灯实验报告

学号序号 19

单片机原理与接口技术

实验报告

实验项目序号一

实验项目名称跑马灯实验

姓名卢志雄专业电子信息工程班级电信14-2BF

完成时间2016年4月2日

一、实验容

实验容为3项,其中第1、2项必做。

1、基本的流水灯。

根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。每点亮一个LED,采用软件延时一段时间。

2、简单键控的流水灯。

不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。松手后,又按正序点亮流水灯。

3、键控的流水灯。

上电,不点亮LED,按一下K1键,按正序点亮流水灯。按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。

二、电路原理图

图1 跑马灯实验电路原理图三、程序流程图

图2 简单键控的流水灯程序流程图

四、源程序

1、基本的流水灯

#include

#define uint unsigned int

#define uchar unsigned char

void delay( j ) //延时函数

data uint j;

{ data uint i;

while(j--)

for(i=0;i<250;i++);

}

void main( ) //主函数

{ data uchar a;

a=1; //保证只有一个点亮 while(1) //不断循环

{ P2=~a; //低电平点亮

a=a<<1; //左移一位,右补0 if(a==0)a=1; //全0

delay(2250);} //流动点亮延时

}

2、简单键控的流水灯

#include

#define uchar unsigned char

#define uint unsigned int

void delay(uint i)

{ uchar t;

while(i--)

{

for(t=0;t<120;t++);

}

}

void main()

{ data uchar a;

a=1;

while(P2==0xff)

{ P0=~a;

a=a<<1;

if(a==0)

a=1;

delay(250);

}

while(P2==0xfe)

{ P0=~a;

a=a>>1;

if(a==0)

a=128;

delay(250);

}

}

3、键控的流水灯

#include

#define uchar unsigned char #define uint unsigned int void delay(uint i)

{ uchar t;

data uchar b=0xfb;

while(i--)

{ if(P2==0xfe) b=0xfe;

if(P2==0xfd) b=0xfd;

if(P2==0xfb) b=0xfb;

for(t=0;t<120;t++);

}

}

void main()

{ data uchar a;

a=1;

while(P2==0xfe)

{ P0=~a;

a=a<<1;

if(a==0)

a=1;

delay(250);

while(P2==0xff)

{

P0=~a;

a=a<<1;

if(a==0)

a=1;

delay(250);

}

}

while(P2==0xfd)

{ P0=~a;

a=a>>1;

if(a==0)a=128;

delay(250);

while(P2==0xff)

{ P0=~a;

a=a>>1;

if(a==0)a=128;

delay(250);

}

}

while(P2==0xfb)

{ P0=0xff;}

}

五、实验结果

1、基本的流水灯

基本流水灯仿真图

相关主题
相关文档
最新文档