51单片机学习篇-- --LED的介绍、点亮、闪烁和流水灯

开篇先说一句废话····
本旺名字叫萨摩耶,,Please 叫我旺财,,,哈哈,招财进宝嘛!

LED的介绍

发光二极管简称为LED。有二极管的特性,有正负极的,接反了,电流无法导通,灯就不亮。

元件符号
LED符号依照上图,确定,左端接正极,右端接负极,LED亮;接反了,则不亮。

LED的点亮

LED原理图
LED原理图
依照上图,确定,LED元件的正极接 VCC(高电平),所以要使得LED亮,则必须在LED负极接低电平;若接上高电平,元件两端没有电压差,则不亮。
而在数字电路中,一般用0表示低电平,1表示高电平。 在该图中,LED的右端接的是P2口,所以必须要亮的LED对应的端口接上低电平。比如:若要点亮D1,则P2^0接上低电平(0V)。

仿真电路

#include "reg51.h"

void main(){
	sbit led=P2^0;
	while(1){
		led=0; //接上低电平
	}
}

LED的闪烁

结合上面的内容,发现,LED的闪烁其实就是不断的重复 点亮LED,延迟一段时间,熄灭LED,延迟一段时间。 亮接低电平,灭接高电平。

延迟函数 Delay()

原理:
延迟函数里执行的都是空语句,也就是说通过循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而达到延迟目的。
这里提供一段12MHZ晶振延时X毫秒的代码

void Delay(unsigned int x)		//@12.000MHz
{
	unsigned char i, j;
	while(x){
		i = 12;
		j = 169;
		do
		{
			while (--j);
		} while (--i);
		x--;
	}
}

直接上代码

#include "reg51.h"

sbit led=P2^0;
//延时函数
void Delay(unsigned int x)		//@12.000MHz
{
	unsigned char i, j;
	while(x>0){
		i = 12;
		j = 169;
		do
		{
			while (--j);
		} while (--i);
		x--;
	}
}
void main(){
	while(1){
		led=0;   //接上低电平
		Delay(500);  //延时500ms
		led=1;  //接上高电平
		Delay(500);  //延时500ms
	}
}

LED流水灯

这里会用到两个函数。
头文件 intrins.h
循环左移函数 _crol _(a,b)
循环右移函数 _cror _(a,b)
其中,a是需要左移或者右移的值;b是移动的位数

之前,点亮还是闪烁都是一个灯,而流水灯则是多个灯的事。在闪烁中,亮灯,延时,灭灯,延时, 不断地循环这个过程。而在流水灯中,在灭灯中又加了换成另一个灯,之前定义一个LED用得位定义,而此时,LED的数量多达8个,所以之前的办法不是很方便,因为根据LED原理图发现这8个LED都接在P2端口上,所以通过宏定义来定义这个端口的所有LED灯

#define led P2

8个灯定义了,接着要实现每个灯之间的转移,就要通过位的操作了,而实现这一功能就要用到上面的两个函数中的一个。直接上代码

#include "reg51.h"
#include <intrins.h>
#define led P2
//延时函数
void Delay(unsigned int x)		//@12.000MHz
{
	unsigned char i, j;
	while(x>0){
		i = 12;
		j = 169;
		do
		{
			while (--j);
		} while (--i);
		x--;
	}
}
void main(){
	unsigned char k;
	led=0xfe; //1111 1110 第一位为0,则第一位对应的D1接高电平,亮
	Delay(500);  //延时500ms
	
	while(1){
		for(k=0;k<7;k++){
			P2=_crol_(P2,1);  //左移 举例:第一次循环此句后,P2=0xfd 1111 1101
			Delay(500);  //延时500ms
		}
	}
}

仿真电路
在这里插入图片描述

终结语

实践最重要
学习每个元件时,一定要明白每个元件的原理。LED:左端接正极,右端接负极,LED亮;接反了,则不亮。

本旺也是正在学习的宝宝,若文章有问题的地方,欢迎baby评论留言。

哈哈~~~~

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值