单片机跑马灯实验分析报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机跑马灯实验报告
————————————————————————————————作者:————————————————————————————————日期:
学号14142200277序号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 跑马灯实验电路原理图
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD
17
P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C51
D0D1D2D3D4D5D6D7
+5V
K1K2K3K4
三、程序流程图
开
检测
完成对应
判断P2
图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;}
}