文档详情

单片机-LED-流水灯实验.docx

发布:2025-04-11约2千字共3页下载文档
文本预览下载声明

实验一LED流水灯实验

一、实验目的:

1、进一步熟悉KeilC51集成开发环境调试功能的使用

2、学会自己编写程序,进行编译、仿真调试

3、学会使用单片机的P0口作为I/O口去控制外围电路,实现LED灯以固定的频率进行闪烁。

二、实验设备:

1、PC机

2、SW-51PROC单片机综合实验平台

三、实验内容:

1、编写一段程序,用单片机P0口的8个输出去控制8个LED灯,实现如下功能:

先使8个LED灯轮流点亮,从左向右移动,时间间隔0.5s。以上过程循环实现。

四、实验步骤:

1、实验原理图:

2、硬件连线方式:

用杜邦线将“MCU”区的P0口“”与“8-LED”模块区的“L1-L8”依次相连。

编写程序思路:

用单片机P0口的8位输出控制8个LED灯,每次只点亮一只LED,8只LED灯依次点亮,如此循环即可形成流水灯。

3、实验箱的时钟:

晶振频率为11.0592MHz

Tose=1/(11.0592*1000000)=0.0904us

1个机器周期为0.0904us*12=1.085us

4、源程序:

************************************************************************************/

#includereg52.h

#defineucharunsignedchar

#defineuintunsignedint

#definePORTP0

ucharcodedis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};

/***********************************延时函数****************************************/

voiddelay_50ms(uintt)

{

uinti;

for(;t0;t--)

for(i=6245;i0;i--);

}

/************************************主函数*****************************************/

voidmain(void)

{

uchar*p=dis;

while(1)

{

for(p=dis;p(dis+14);p++)

{

PORT=*p;

delay_50ms(10);

}

}

}

/*************************************结束*******************************************/

5、运行程序:

把编写好的程序输入PC机中,用Keil软件进行编译,编译无误的情况下,运行该程序,此时LED灯会依次轮流点亮。

6、实验报告要求:

1、实验名称

2、实验目的

3、实验设备

4、实验内容

5、实验原理(图要画完整)及控制方法合过程详细的说明

6、实验编写的程序

7、实验结果

8、心得和建议

(1)首先知道LED的工作原理。共阴级共阳极,此实验板是共阳极,要亮,的加一个高电平。由于这8个LED灯与P0口相连,所以直接通过P0口控制其亮灭就可以。依次开启每个灯,同时开启时要亮一定的时间。时间可以自己定义,也可以利用定时器实现。具体的汇编程序如下:

ORG0000H

LJMPMAIN

ORG0050H

MAIN:MOVR0,#14

MOVDPTR,#TABLE

L0:MOVA,#0

L1:MOVCA,@DPTR+A

MOVP0,A

ACALLDELAY1

INCA

DJNZR0,L1

SJMPL0

DELAY1:

MOVR1,#250

LOOP1:

MOVR2,#250

LOOP2:

NOP

NOP

NOP

NOP

NOP

DJNZ R0,LOOP2

DJNZ R1,LOOP1

RET

TABLE:

DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH

END

大家可以换一种亮灭的方式,只是通过修改表中的相应的信息,同时将程序做适当的修改,就可以达到预想的效果。

显示全部
相似文档