栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单片机LED总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单片机LED总结

单片机LED总结
    • 1、LED基础知识
    • 2、点亮第一个LED灯
    • 3、LED闪烁
    • 4、LED左右移动
    • 5、总结

1、LED基础知识

LED是发光二极管的一种,它具有单向导电的特点,在51开发板上使用的是贴片式发光二极管,正向导电电压在1.8-2.2v之间,工作时的电流在1-20mA。当电流在1-5mA之间变化时,肉眼可以观测到亮度的变化,但是当电流在5-20mA之间变化时,亮度变化不太明显。如果电流一直增大二极管可能会烧坏。其余LED知识就不再进行叙述,其中LED原理图如下图所示。

2、点亮第一个LED灯

由原理图可知,LED的阳极全部接到了正极(电源),当负极接到LED的阴极时才会发光,因为LED的阴极与单片机的P2口相接,如果你想点亮那一个LED就把单片机相应的引脚赋值为低电平,具体程序如下:

#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器

sbit led=P2^0;	   //将单片机的P2.0端口定义为led

void main()
{
	
	while(1)
	{
		led=0;//P2.0端口设置为低电平		
	}		
}
3、LED闪烁

如果想让LED进行闪烁就要涉及到延时,针对单片机进行延时的方法有很多,在此向大家推荐一种比较简单的程序助手—单片机小精灵,可以直接进行设置时间,并且生成相应的代码。
将P2^0引脚的LED进行间隔一秒闪烁的程序如下:

#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"  //头文件

sbit led=P2^0;	   //将单片机的P2.0端口定义为led

void delay1s()   //延时1s,误差 0us
{
    unsigned char a,b,c;
    for(c=46;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

void main()//主程序
{
	
	while(1)
	{
		led=0;//P2.0端口设置为低电平
		delay1s();//调用延时函数
		led=1;//P2.0端口设置为低电平
		delay1s();
	}		
}

为了使程序更好的进行表达,使用16进制进行表述,程序如下:

#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"  //头文件

void delay1s()   //延时1s,误差 0us
{
    unsigned char a,b,c;
    for(c=46;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

void main()//主程序
{
	
	while(1)
	{
		P2=0xFE;//P2.0端口设置为低电平
		delay1s();//调用延时函数
		P2=0xFF;//P2.0端口设置为低电平
		delay1s();
	}		
}

上面是针对一个LED灯进行的设计,下面针对8个LED灯依次闪烁进行设计,具体程序如下:

#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"  //头文件

void delay1s()   //延时1s,误差 0us
{
    unsigned char a,b,c;
    for(c=46;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

void main()//主程序
{
	
	while(1)
	{
		P2=0xFE;//1111 1110
		delay1s();//调用延时函数
		P2=0xFD;//1111 1101
		delay1s();
		P2=0xFB;//1111 1011
		delay1s();
		P2=0xF7;//1111 0111
		delay1s();
		P2=0xEF;//1110 1111
		delay1s();
		P2=0xDF;//1101 1111
		delay1s();
		P2=0xBF;//1011 1111
		delay1s();
		P2=0x7F;//0111 1111
		delay1s();
	}		
}
4、LED左右移动

上面进行描述的是利用延时并对P2口引脚进行赋值设计LED灯的闪烁,这样程序较为繁杂,下面将利用“左移”和“右移”进行设计,crol(a,b),左循环,a是左移的值,b是左移的位数;cror(a,b),右循环,a是右移的值,b是右移的位数。包含在instrins.h库函数中。具体程序如下:

#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"  //头文件,包含延时(_nop_ )和函数循环

typedef unsigned int u16;//声明新类型名
typedef unsigned char u8;//声明新类型名

#define led P2//宏定义

void delay1s()   //延时1s,误差 0us
{
    u8 a,b,c;
    for(c=46;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

void main()//主程序
{
	u8 i;//定义i的类型
	led=0xFE;
	delay1s() ;
	while(1)
	{
		for(i=0;i<7;i++)//左移
		{
			led=_crol_(led,1);
			delay1s() ;
		}
		for(i=0;i<7;i++)//右移
		{
			led=_cror_(led,1);
			delay1s() ;
		}
		
	}		
}
5、总结

以上程序均进行了实验验证,完全正确。针对LED灯的控制,可以和按键进行联合设计,实现更多的功能,后面会进行更新。对于没有单片机开发板的小伙伴可以利用proteus仿真软件进行设计。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921051.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号