对LED流水灯的学习总结.docx
《对LED流水灯的学习总结.docx》由会员分享,可在线阅读,更多相关《对LED流水灯的学习总结.docx(10页珍藏版)》请在冰点文库上搜索。
对LED流水灯的学习总结
单片机的学习总结
第一个实验:
一、从点亮一个发光二极管到实现流水灯的操作实验报告
实验目的:
(1)知道单片机最小系统和典型系统
(2)知道如何建立一个工程,完成一个点亮发光二极管的编译和烧写
实验器件以及基础知识描述:
(1)LED发光二极管是一种半导体二极管,可以把电能转换成光能,有一个PN结构成。
(2)晶振:
全称为晶体振荡器,其作用是产生原始的时钟频率,这个频率晶振经过频率发生器的放大或缩小后就成为了电脑中各种不同的总线频率。
(3)IO端口的驱动能力:
每个I/O端口允许的做大20mA的灌电流,可以直接驱动LED和继电器;高电平输出时一般对负载提供电流其提供的电流叫“拉电流”;低电平输出时一般是要吸收负载的电流,其吸收的电流叫“灌电流”。
(4)P1.0---P1.7:
准双向接口(内置上拉电阻),端口P1的数据寄存器用P1表示,端口置一表示高电平,设置为0表示输出低电平。
(5)如何进行程序烧写:
5.1、用传统的并行烧写器
5.2采用目前流行的IAP在线下载程序,STC的单片机可以不要编程器,通过USB或串口下载程序
(6)延时函数:
每条指令都占有一定的时间,如果让机器什么都不干机器就会延时,外加循环此数
一个完整的点亮LED源代码程序如下:
#include
SbitLED=P1^0;
voidmain()
{
LED=1;
LED=0;
While
(1)
}
有这一个简单的程序实现使p1^0端口控制的LED灯点亮,如果要实现多个灯同时点亮呢?
可以定义多个端口,使之输出低电平即可:
//实现第1、3、5、7个LED灯点亮
#include
sbitLED0=P1^0;
sbitLED2=P1^2;
sbitLED4=P1^4;
sbitLED6=P1^6;
main(void)
{
LED0=0;
LED2=0;
LED4=0;
LED6=0;
while
(1)
{
}
}
实现了控制灯亮暗后,程序中添加一段延时程序即可实现灯的闪烁:
延时函数分为有参延时和无参延时;
//一个简单的有参延时函数:
voiddelay(unsignedintt)
{
While(--t);
}
//无参延时函数:
voiddelay()
{
for(inti=1000;i>0;i++)
for(intj=1000;j>0;j++);
}
或者:
voiddelay()
{
Unsignedinti=300;
While(--i);
}
通过进一步的分析可以进行流水灯的设计:
设计目的:
从实际工程出发,在理论和实践上掌握流水灯系统的基础组成,工作原理。
对设计流水灯有一个完整的概念。
任务描述:
本任务通过左移亮灯电路来学习单片机系统开发设计是电路原理图的设计和步骤,掌握单片机应用电路和程序的开发过过程。
任务目标:
分别用位输出操作,移位操作、循环操作完成三个典型的流水灯设计
问题解决:
如何改变流水灯的流动的速度:
1、改变调用延时函数的实参
2、更换不同频率的晶振
流水灯的设计:
由以上基础可以设计出不同形式的流水灯,第一可以先对IO端口进行初始化,使之P1=1;接着是第一个灯亮——》然后延时——》第一个灯暗——》第二个灯亮——>》延时——》第二个灯暗。
。
。
。
。
。
。
。
依次循环下去;
方案二:
可以运用左移或者右移使灯依次亮暗
原理图如下:
实现第一个框图时程序如下:
#include
sbitLED0=P1^0;
sbitLED1=P1^1;
sbitLED2=P1^2;
sbitLED3=P1^3;
sbitLED4=P1^4;
sbitLED5=P1^5;
sbitLED6=P1^6;
sbitLED7=P1^7;
#defineON0
#defineOFF1
voiddelay(floatt)
{
unsignedinti,j;
i=t*100;
while(i--)
{
for(j=8000;j;j--)
;
}
}
voidmain()
{
while
(1)
{
LED0=ON;
delay(0.01);
LED0=OFF;
LED1=ON;
delay(0.1);
LED1=OFF;
LED2=ON;
delay(0.1);
LED2=OFF;
LED3=ON;
delay(0.1);
LED3=OFF;
LED4=ON;
delay(0.1);
LED4=OFF;
LED5=ON;
delay(0.1);
LED5=OFF;
LED6=ON;
delay(0.1);
LED6=OFF;
LED7=ON;
delay(0.1);
LED7=OFF;
}
}
实现框图二的程序为:
#include
voiddelay(unsignedintt)
{
while(--t);
}
voidmain()
{
unsignedchari;
P1=0xfe;
while
(1)
{
for(i=0;i<8;i++)
{
delay(50000);
P1<<=1;
P1=P1|0x01;
}
}
}
实现框图三的程序如下:
voidinitial()
{
led0=off;
led1=off;
led2=off;
led3=off;
led4=off;
led5=off;
led6=off;
led7=off;
}
voidmain()
{
initial();
delay(0.2);
while
(1)
{
led0=on;
delay(0.01);
led0=off;
delay(0.01);
led1=on;
delay(0.01);
led1=off;
delay(0.01);
led2=on;
delay(0.01);
led2=off;
delay(0.01);
led3=on;
delay(0.01);
led3=off;
delay(0.01);
led4=on;
delay(0.01);
led4=off;
delay(0.01);
led5=on;
delay(0.01);
led5=off;
delay(0.01);
led6=on;
delay(0.01);
led6=off;
delay(0.01);
led7=on;
delay(0.01);
led7=off;
delay(0.01);
}
}