单片机-LED-流水灯实验.docx
实验一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
大家可以换一种亮灭的方式,只是通过修改表中的相应的信息,同时将程序做适当的修改,就可以达到预想的效果。