80C51实验2-按键控制LED灯

28 阅读2分钟

本次实验控制按键来控制LED灯点亮。

先看硬件原理图:

独立按键模块:

从原理图上可以看到,当按键按下时,应用51单片机的引脚检测到低电平。

  • 按键1:K1对应P14
  • 按键2:K2对应P15
  • 按键3:K3对应P16
  • 按键4:K4对应P17

image.png

LED灯模块对应的是P2引脚,也是低电平亮灯。

image.png

注意:代码注意按键需要做软件消除按键的抖动,其实就是增加个极小的延时,做一个按键低电平的确认即可 。

#include<reg51.h>
#include<intrins.h>	

#define GPIO_LED P2		  //宏定义P2口

sbit K1=P1^4;			  //位操作
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;
sbit K5=P3^5;

void Delay10ms( );   //延时10ms

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{

	
	while(1)
	{		 
		if(K1==0)		    //检测按键K1是否按下
		{
			Delay10ms();	    //消除抖动
			if(K1==0)
			{
				GPIO_LED = 0xfe;    //1111 1110 第一个灯亮
			}
		}
		
		if(K2==0)		    //检测按键K1是否按下
		{
			Delay10ms();	    //消除抖动
			if(K2==0)
			{
				GPIO_LED = 0xfd;    //1111 1101 第二个灯亮
			}
		}
		
		if(K3==0)		    //检测按键K1是否按下
		{
			Delay10ms();	    //消除抖动
			if(K3==0)
			{
				GPIO_LED = 0xfb;	
			}
		}
		
		if(K4==0)		    //检测按键K1是否按下
		{
			Delay10ms();	    //消除抖动
			if(K4==0)
			{
				GPIO_LED = 0xf7;	
			}
		}
		
		if(K5==0)		    //检测按键K1是否按下
		{
			Delay10ms();	    //消除抖动
			if(K5==0)
			{
				GPIO_LED = 0xef;	
			}
		}		

	}				
}
/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能		   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}