51单片机入门————LED灯的控制

LED的电路图

51单片机入门————LED灯的控制_第1张图片

通过原理图看出,LED灯是接单片机芯片的P20~P27的
一共有8个LED,51单片机也是8字节的
P2=0x01
0xFE————1111 1110
P2=0xFE可以表示把在P2端的第一个灯点亮

1 表示高电平
0表示低电平
当为0的时候形成一个完整回路,电流从高电平流向低电平
所以我们要把LED灯对应的引脚置为0,这样就可以点亮LED灯了

点亮第一个LED灯

我们知道了点亮LED灯需要把对应的引脚置为0,下面我们来通过代码实现

51单片机入门————LED灯的控制_第2张图片

51单片机入门————LED灯的控制_第3张图片

从图片我们可以看出,我们确实点亮了第一个LED灯
那么我们点亮全部的LED灯的操作一个是 0000 0000 对应的16进制是0x00
51单片机入门————LED灯的控制_第4张图片

51单片机入门————LED灯的控制_第5张图片

我们现在通过控制P2端的8个位来控制LED灯,我们也可以通过控制一个位来控制灯的亮灭
51单片机入门————LED灯的控制_第6张图片
51单片机入门————LED灯的控制_第7张图片

这两个操作,都可以将第五个LED灯点亮

LED灯的闪烁

通常我们在大街小巷可以看到闪烁的LED灯,然后他们的闪烁周期也不相同,我们如何通过单片机控制

我们引入时间延时的概念

时间延时的设置我们可以在STC-ISP生成

我们来演示一下

51单片机入门————LED灯的控制_第8张图片

生成了代码我们拷贝到软件上

51单片机入门————LED灯的控制_第9张图片

这个代码就可以不停的闪烁我们的第五个LED灯

我们设计不同周期的闪烁每次都去STC-ISP生成会比较麻烦,那么我们是不是可以设计一个自定义的函数来实现你想要的闪烁时间

自定义延时的设计

首先我们在STC-ISP生成一个1毫秒的延时

void Delay1ms()        //@12.000MHz
{
    unsigned char i, j;

    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
}

我们通过修改这个1毫秒的延时来实现

#include 

void Delay(long xms)        //@12.000MHz
{
    unsigned char i, j;

    while(xms--)
    {
    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
    }
}



void main()
{
    
    while(1)
    {
    P2_4=0;
    Delay(500);
    P2_4=1;
    Delay(500);
    }

}

我们怎么设计的呢,通过传一个常量,常量表示多少毫秒,然后传入1毫秒的函数,让这个函数循环1毫秒的延时,这样就可以做到,自定义延时了

独立按键

了解按键工作的时候,我们先看看它的电路原理图

51单片机入门————LED灯的控制_第10张图片
51单片机入门————LED灯的控制_第11张图片

通俗的说就是当你摁下开关,开关接通,松开开关,开关断开

51单片机入门————LED灯的控制_第12张图片

下面我们来编写程序来实现利用独立按键控制灯的亮灭

51单片机入门————LED灯的控制_第13张图片

这个程序的作用就是按一下独立按钮然后第一个灯就亮了

上面就是独立按钮和LED灯的使用

51单片机入门————LED灯的控制_第14张图片

我们如何避免按键的抖动呢,我们可以通过时间延时来消除,按键抖动时的不稳定接通

void Delay(long xms)        //@12.000MHz
{
    unsigned char i, j;

    while(xms)
    {
    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
    xms--;
    }
}

void main()
{
    while(1)
    {
    P2_0=1;
    if(P3_1==0)
    {
        Delay(10);
        while(P3_1==0);
        Delay(5);
        P2_0=0;
        Delay(500);
    }
    }
}
51单片机入门————LED灯的控制_第15张图片

LED灯的使用与按钮
51单片机入门————LED灯的控制_第16张图片
#include 

void Delay(long xms)        //@12.000MHz
{
    unsigned char i, j;

    while(xms)
    {
    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
    xms--;
    }
}

void main()
{
    
    while(1)
    {
        int i=0;
        int j=0;
        int ret1=1;
        int ret2=0x80;
        for(i=0;i<8;i++)
        {
            P2=~(ret1<>j);
            Delay(500);
        }
    }
}

功能:LED灯从第一个灯依次到第八个灯亮,然后再从第八个灯亮到第一个灯(倒着)

你可能感兴趣的:(51单片机,单片机,stm32)