首页 > 技术文章 > LED实验

chijiacong 2021-12-02 22:34 原文

  前边我已经介绍了Keil5的安装,并且已经说明了Keil5的使用方法,如果没有看过这两篇博文的请先看一下:Keil5安装Keil5的介绍和简单使用。除了开发工具的准备,其实我们还需要一点C语言的基础,这个大家自学即可,我就不再赘述了。下面我们就可以真正地步入51的大门了,玩一款单片机第一步一定是点灯,它的地位就相当于学习编程语言的“Hello,World!”。那么接下来,我们就先当一个点灯大师!(说明:这一系列的文章都是基于普中51单核A2开发板)

LED实验:

1.驱动原理:

  我们想点亮一个灯,那我们首先需要知道LED的驱动原理,也就是要知道这个灯(本质是发光二极管)接在了单片机的哪个引脚上,什么电平可以点亮或熄灭它,明白了这个我们就可以根据自己意愿玩点点灯的花样了。如下原理图所示,这8个LED接在了P2这一组IO口上,而且LED的正极都接在了VCC(高电平)上,所以我们要想点亮LED,只需要让P2这一组IO口输出低电平即可点亮。
image

2.程序编写:

main.c

#include "reg52.h"
#include "intrins.h"

#define LED P2
//#define ON (LED0 = 0)
//#define OFF (LED0 = 1)

sbit LED0 = P2^0;

void LED_On(void);
void LED_Off(void);
void LED_Blink(void);
void LED_Flow(void);
void Delay_ms(int n);

void main()
{
    LED_Blink();
}

/* LED点亮函数 */
void LED_On(void)
{
    LED0 = 0;
}

/* LED熄灭函数 */
void LED_Off(void)
{
    LED0 = 1;
}

/* LED闪烁函数 */
void LED_Blink(void)
{
    LED0 = 0;
    Delay_ms(500);
    LED0 = 1;
    Delay_ms(500);
}

/* LED流水灯函数 */
void LED_Flow(void)
{
    int a,b;
    LED = 0xfe;
    Delay_ms(500);
    for(a=0;a<7;a++)
    {
        LED = _crol_(LED,1);
        Delay_ms(500);
    }
    //Delay_ms(1000);
    for(a=0;a<7;a++)
    {
        LED = _cror_(LED,1);
        Delay_ms(500);
    }
}

/* 延时函数 */
void Delay_ms(int n)			//延时n毫秒
{
    int i,j;
    for(i = n; i>0; i--)
    for(j = 114; j>0; j--);
}

说明:
  ①程序中四个LED的函数对应四种LED的功能:点亮、熄灭、闪烁、流水灯,我们想实现什么功能在主函数调用对应函数即可;
  ②LED_Flow函数中有两个函数:循环左移函数_crol_(),循环右移函数_cror_(),这两个函数在头文件intrins.h中定义,所以在程序的开头包含了该头文件。这两个函数的功能是实现8位二进制数的循环移位,即循环左移函数:最高位的二进制数移出去就回到最低位;循环右移函数:最低位的二进制数移出去就回到最高位。
  ③循环左右移函数有两个参数,第一个是需要移位的变量,第二个参数是一次移几位。以移一位为例,该函数执行一次,只能移一位,要想看到看到流水灯效果,必须使用循环让其不断运行。

  说到这里,点灯的常规操作我们基本就完成了。大家可以根据自己想要的效果编程实现,玩点不同的花样!

  本篇完!!!

推荐阅读