首页 > 其他分享 >51单片机led灯模块

51单片机led灯模块

时间:2024-04-10 19:00:25浏览次数:28  
标签:P2 P3 led -- 51 Delay 单片机 while xms

1.1 51单片机led灯的点亮

根据进制转换表,将二进制转换成16进制

其中程序中的P2口,0x是表示后面是16进制的

1.2 led闪烁

1.3  led流水灯

#include <REGX52.H>


void Delay1ms(unsigned int xms)    //@12.000MHz
{
    unsigned char data i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms=xms-1;
    }
    
}

void main()
{
    while(1)
    {
                        
                        P2=0xFE;
                        Delay1ms(100);
                        P2=0xFD;
                        Delay1ms(100);
                        P2=0xFB;
                        Delay1ms(100);
                        P2=0xF7;
                        Delay1ms(100);
                        P2=0xEF;
                        Delay1ms(100);
                        P2=0xDF;
                        Delay1ms(100);
                        P2=0xBF;
                        Delay1ms(100);
                        P2=0x7F;
                        Delay1ms(100);
            
    }
}

1.4led灯的原理

LED由P型半导体和N型半导体组成,这两者之间形成一个PN结,当电流通过PN结时,P型半导体中的空穴和N型半导体中的电子在PN结附近相遇并复合,这个过程中释放能量,激发半导体材料中的原子发出光子,从而产生光线。光的颜色(可见光的不同部分)由LED使用的半导体材料决定,不同的材料产生不同颜色的光。例如,红、绿、蓝三种基色的LED灯可以组合产生多种颜色,甚至全彩显示。

通过两个半导体材料的相连,之后接上电源,从而使得N中的电子流向P中的空穴(P是阳极、N是阴极)。

特点就是具有单项导电性,电流从正极流向负极,电子方向与电流方向相反。

如图,电流方向由左向右。

2.1 独立按键控制led灯亮灭

程序如下

#include <REGX52.H>

void main()
{
    
    
    while(1)//如果放进循环外面,则需要按住复位键,之后再同时按住独立按键,之后松开复位

                //键,这样的程序只能运行一次。
    {
        if(P3_1==0&&P3_3==0)//&&表示逻辑与,||表示逻辑或;独立按键具体编码看原理图
        {
                
                P2_0=0;//这里是只控制一个led,其他的不涉及;这里要是写P2=0xfe是八个灯都在使用
        }
        else
        {
                    P2_0=1;
        }
    
    }
}

这个是头文件里面显示的led灯的

这个是头文件里面,独立按键的名称

2.2 创造一个延时的子函数

如图

生成一个1ms的延时函数,之后复制到代码里去

将延时函数放在while的循环里面,Delay后面的括号改写为unsinged int xms ,从而给定一个延时时间的参数

从而unsinged int可以最大延时65535

之后将while后的括号填入xms,只要是xms不是0都会为真,则while都会一直循环。

由于生成的是1ms的延时,所以后面对xms进行减一(xms--),从而达到参数值是多少,延时就是多少。

2.3 消除按键抖动的情况下,独立按键对led灯的控制

独立按键的抖动

因此为了消除抖动,要么是增加外设,要么是在软件上进行解决,在软件上进行解决可以通过延时的方法

程序如下

#include <REGX52.H>

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

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

void main()
{
    
        while(1)
        {
            if(P3_1==0)
            {
                Delay(500);//对闭合阶段进行延时
                
                while(P3_1==0)//达到稳定阶段使之循环
                {
                    
                }
                Delay(500);//松开阶段进行延时
                P2_0=~P2_0;//进行取反
                
                
          }
             
        }
            
            
    
}

2.4 运算符号以及基础语句

2.5独立按键控制led以二进制方式亮灯

#include <REGX52.H>
void Delay(unsigned int xms);


void main()
{
         int LED;
        while(1)
        {
            Delay(20);
            if(P3_0==0)
            {
                while(P3_0==0);
                Delay(20);
                P2=~(LED++);
                
            }
        }
}


void Delay(unsigned int xms)    
{
    while(xms--)
    {
            unsigned char data i, j;

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

子函数如果放在下面,需要将函数的名称放在上面,后面写上“;”。如果变量没有规定值,则会输出高电平1,使用int或者char都可以。当LED=1的时候,则LED++就是八个位置全部是00000000则此时灯会全亮,之后依次按按键,只有灭的灯会按二进制规律(该亮的不亮,不该亮的亮了),如果对LED++进行取反,就会得到想要的结果,因此使p2=~(LED++)。

2.6 一个独立按键控制依次进行点亮

程序如下

#include <REGX52.H>

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

        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
    
}
void main()
{
    unsigned char sum=0;
    while(1)
    {
        
        if(P3_1==0)
        {
            Delay(20);
            while(P3_1==0);
            Delay(20);
            
            if(sum>7)
            {
                sum=0;
            }
            
                
            
        
        
            P2=~(0x01<<sum);
            sum++;
        }
        
    }
}

sum的值在0~7之间,如果出了范围会与结果不同,因此需要加一个选择语句。

2.7 两个独立按键对led灯的来回控制

两个独立按键分别为,第一个P3_1,第二个P3_2,分别对两个独立按键进行按键震动消除后,把它们放进一个循环里,只有根据低电平亮灯的特点进行编写程序,这个程序的本质就是设置好“sum”值(就是向左移位的移位数目)。程序如下

#include <REGX52.H>

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

        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
    
}
void main()
{
    unsigned char sum=0;
    P2=~0x01<<sum;
    while(1)
    {
        
        if(P3_1==0)
        {
            Delay(20);
            while(P3_1==0);
            Delay(20);
            
            
            if(sum>=7)
            {
                sum=0;
            }
            else
            {
                sum++;
            }
                
            P2=~(0x01<<sum);
        
            
            
        }
        if(P3_0==0)
        {
            Delay(20);
            while(P3_0==0);
            Delay(20);
            
            
            if(sum==0)
            {
                sum=7;
            }
                
            else
            {
                sum--;
            }
        
            P2=~(0x01<<sum);
        }
        
            
    }
}

标签:P2,P3,led,--,51,Delay,单片机,while,xms
From: https://blog.csdn.net/2301_80442229/article/details/137356812

相关文章

  • Leetcode反转字串541/翻转字串的单词151/实现 strStr方法28/重复的子字符串459
    前言Leetcode541/151/28一、541题(反转字符串)题目描述:给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余......
  • LED数显屏驱动/点阵数显驱动芯片-VK1640A SSOP28,适用于麦克风,血氧仪,仪器仪表等产LED
    产品品牌:永嘉微电/VINKA产品型号:VK1640A封装形式:SSOP28概述VK1640A是一种数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx16GRID的点阵LED显示。适用于小型LED显示屏驱动。采用SSOP28的封装形式。LJQ357特......
  • 嵌入式单片机补光灯项目操作实现
    1.【实验目的】       用于直播效果的补光 2.【实验原理】原理框架图2.各部分原理及主要功能  1.充电和供电:采用5V2Atepy_c接口充电,3.7V锂电池供电,2.功能:产品主要是用于直播或拍照时的补光。分为三个模式:白光/暧光&#x......
  • 220V直降9V1A非隔离恒压WT5110
    220V直降9V1A非隔离恒压WT5110WT5110是一款高性能的原边控制器,主要适用于充电器和适配器的制造,其能够提供高精度的输出性能。该芯片具备多种工作模式,包括调幅控制和调频控制,这有助于提高系统的效率和可靠性。在恒流输出模式下,WT5110采用调频控制方式,并且集成了线电压和负载电......
  • 220V降5V1A非隔离降压应用WT5105
    220V降5V1A非隔离降压应用WT510520V降5V1A非隔离恒压芯片WT5105是一款集高效、安全、小巧于一身的电源管理解决方案,它的出现无疑为我们的日常生活带来了极大的便利。这个WT5105是个集成非隔离电源控制器,里面有650V的高雪崩能力的功率MOSFET。这玩意可以帮你简化外围器件,做出......
  • 力扣51 N皇后 Java版本
    文章目录题目描述代码题目描述按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的n皇后问题的解决方案。每......
  • Transaction rolled back because it has been marked as rollback-only
    背景最近在看程序日志的时候,发现频繁出现Transactionrolledbackbecauseithasbeenmarkedasrollback-only这个异常,查了很久资料才知道是什么原因导致抛出这异常的,下面解析一下;原因字面上的意思就是:事务已回滚,因为它已被标记为仅回滚,那为什么会标记为仅回滚呢?其实原因就......
  • 2023 NIPS A*Net: A Scalable Path-based Reasoning Approachfor Knowledge Graphs 知
    文章链接原文:b9e98316cb72fee82cc1160da5810abc-Paper-Conference.pdf(neurips.cc)代码:https://github.com/DeepGraphLearning/AStarNet一、动机与贡献为了使路径推理方法适用于大规模图上的归纳推理任务,文章改进了路径信息获取的方法。路径推理方法较好的归纳推理能力......
  • 【ZZULIOJ】1051: 平方根的和(Java)
    目录题目描述输入输出样例输入 Copy样例输出 Copycode题目描述数列的定义如下:数列的第一项为item,以后各项为前一项的平方根,求数列的前n项的和。输入由两个整数item(item<10000)和n(n<1000)组成,item和n的含义如前所述。输出输出该数列的和,占一行,要求精度保留2位......
  • 516. 最长回文子序列
    题目链接:本题考察区间\(dp\)。设\(f[i][j]\)表示子串\(i\simj\)中的最长回文子序列的长度。思考状态转移方程。因为是判断回文的问题,考虑首尾元素是否相同。若首尾元素相同,则考虑去掉首尾元素之后子串的最长回文子序列的长度+2(首、尾元素各一个)反之若首尾元素不相同......