您现在的位置是:首页 >学无止境 >如何使用单片机点亮LED灯,并使用按键控制[51单片机]网站首页学无止境

如何使用单片机点亮LED灯,并使用按键控制[51单片机]

陈无忧cy 2024-06-17 10:19:33
简介如何使用单片机点亮LED灯,并使用按键控制[51单片机]

首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同

我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯

 

那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上,那么只需要操作这几个接口的高低电频,就可以让他亮起来,0是亮1是不亮

 而这几个接口对应着二进制数字,比如我输入11111110,注意这里是8位数字,对应着板子上的8个灯,只有最后一位是0,那么就只有最后一位会亮,但是板子他不识别2进制代码,我们要转换为16进制代码

 例如就刚刚的11111110,转换为2进制就是FE,因为F是1111,E是1110,两个加起来就对了

上代码

#include <REGX52.H>
void main(){
	
		//我是重复执行
		while(1){
				//我是注释,0x代表他是16进制
				P2=0xFE;
					
	}
}

 结果:

接下来我们需要用按键来控制,那其实按键也是靠正低电平来区分

按键模块

 

我们可以看见按键模块是连接在p3.多少的位置,那如果你要控制p31的按键那么就要去找p3.1,要控制p32的按键,就要去找p3.2

 那接下来我们来控制灯光,我们还要一种新的办法来控制灯,不用一直写二进制来找灯的位置,而是通过选中某个灯来决定,还是这张图,例如我们要控制p20的灯,那么就去单片机核心去找他连接的位置,我们可以看见p20连接的是p2.0,那么我们就可以对他进行控制

上代码:

这段代码很简单,就是按下的时候就亮,不按就不亮。

#include <REGX52.H>
void main(){
	
		while(1){
            //判断是否被按下,按下是0,不按是1
			if (P3_1==0){
					
			    //如果按下就让他亮
				P2_0=0;
			}else{//否则,就等于是1,就不亮

			    P2_0=1;
			}
				
					
	}
}

接下来我们要通过按键来控制,例如按下一次我们依次让灯亮起来,那其实按照我们之前给他设定二进制的值的时候,他的数值就是,11111110,11111101,这样依次往前变化,他就能实现了,关键我们要怎么去处理这件事情

>>> int('00000001',2)
1
>>> int('00000010',2)
2
>>>  int('00000100',2)
 
SyntaxError: unexpected indent
>>> int('00000100',2)
4
>>> int('00001000',2)
8
>>> int('00010000',2)
16

可以看到这个代码,2进制的数字是不是也每次向前动了一位,不过动的是1,但是1是不亮啊,0才是亮,所以最后我们可以对他们进行取反,0取反就是1,所以00000001,取反就是11111110,那么就可以完成了,再看他们的十进制数字的规律,每次都是乘以2,那么我们是不是可以用十进制的数字来解决这道题,(这里会有些绕,需要大家理解,或者直接看代码)

#include <REGX52.H>
#include <stdio.h>
void Delay1ms(unsigned int xms)     //这是一个延时器,不用管他,每次调用延时
{
    unsigned char i, j;
    while(xms){
        i = 11;
        j = 190;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
    
}


void main(){
    unsigned char LEDNum=1;//设置一个变量
    
    {
        while(1){
            //判断是否按下
            if (P3_1==0){
                //延时2o毫秒
                Delay1ms(20);
                

                while(P3_1==0);
                Delay1ms(20);
                
                //重要看这里,我们将值取反
                P2=~LEDNum;
                //然后每次乘以2
                LEDNum=LEDNum*2;
                
            }
            
        }
    }
}

这样我们每次按下按键就会依次点亮

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。