单片机跑马灯实验报告

更新时间:2023-12-29 17:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学号 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。

二、电路原理图

+5VD0D1D2D3D4D5D6D7U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617K1K2K3K418XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 图1 跑马灯实验电路原理图

三、程序流程图

开始 检测P2键值 完成对应键值的功能 判断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; //低电平点亮

//左移一位,右补0 //全0

a=a<<1;

if(a==0)a=1;

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

2、简单键控的流水灯 #include

#define uchar unsigned char #define uint unsigned int void delay(uint i) { uchar t; }

void main() {

data uchar a; a=1;

while(i--) { }

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

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; }

void main() { data uchar a; a=1;

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++);

}

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、基本的流水灯

基本流水灯仿真图

2、简单键控的流水灯

简单键控的流水灯仿真图

3、键控的流水灯

键控的流水灯仿真图

六、思考题回答

1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻?

答:电压的大小(包括它能感知的最小电压作为高电平),电流的驱动能力等,同时也要要考虑它是否要加上拉电阻。实验装置中LED串联一个电阻是为了防止电流过大而对LED灯有损坏。

2、采用I/O口作为输入口时要注意什么?键控的流水灯时为什么要在延时程序中检测是否按键?

答:在进行读操作时,必须要先向Px口的锁存器写1;本程序未采用例程所说的方法,但是在延时函数中进行按键检测是为了防止在延时程序中间有键按

下却检测不到的情况,即放在延时函数中检测间隔时间短,反应快。

3、为什么延时程序要做一个函数?

答:可以具体事情具体处理,方便调用。比如交通信号灯的控制,红灯绿灯

黄灯都有时间控制,亮的长短就要由延时程序控制等等。

七、实验心得体会

学习单片机这门课程,要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术。跑马灯实验虽然是第一个单片机实验,却让我深有体会,首先要熟悉单片机指令,上课时跟着老师走,认真对待,每次只要跟上老师上课所讲的内容以及按要求完成老师布置的课堂习题,掌握程序的编写以及完成实际上机操作是不成问题的,然后就是必须熟练运用一些基本语句,运用proteus和uVision4等仿真软件,最后是上机操作,根据教程了解单片机与其他设备相连接的输入输出中断等接口技术,运用实际,就可以完成简单有趣的跑马灯实验了!

本文来源:https://www.bwwdw.com/article/jiex.html

Top