51单片机入门教程——独立按键

独立按键介绍

轻触按键,相当于一种电子开关,按下使开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通断开。

独立按键原理图

 这里一共有四个按键,一端连接在GND,另一端连接在MCU上和IO口上。我们知道单片机上电时IO口默认都是高电平,也就是说没按下时IO口是高电平,按下是低电平,寄存器会检测IO口的电平,然后在读回来这个寄存器当中,我们就可以根据这个写代码。

 独立按键控制LED亮灭

#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1==0)     //按键按下
		{
			P2_0 = 0;   //亮
		}
		else            //按键松开
		{
			P2_0 = 1;   //灭
		}
	}
}

补充:C51运算符

 算数运算符:%去余,就是5%2=1,取他的余数。/除,就是5/2=2,取他的整数。

判断运算符:就是判断条件是否为真,满足就执行。

逻辑运算符:

                     &&,俩个操作数都为1,则为真。

                     ||,俩个操作数有一个为1,则为真。     

                     !,把真的变成假的,把假的变成真的,逻辑转换。

位运算符:

                    <<:将运算对象的二进制位全部左移,右边补0。

                    >>:将运算对象的二进制位全部右移,正数补0,负数补1。

                    &:将二进制位进行"与运算",0&0=0,0&1=0,1&0=0,1&1=1。

                    |:将二进制位进行"或运算",0|0=0,0|1=1,1|0=1,1|1=1。

                    ^:将二进制位进行"异或运算",0^0=0,0^1=1,1^0=1,1^1=0。

                    ~:将二进制位进行"取反运算",~0001=1110。

补充:C51基本语句

 独立按键控制LED状态

#include <REGX52.H>
//延时函数
void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
			i = 2;
		  j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}

}
void main()
{
	while(1)
	{
		if(P3_1 == 0)    //按键按下
		{
			Delay(20);     //消抖
			while(P3_1 == 0); //判断按键是否松开
			Delay(20);     //消抖
			
			P2_0 = ~P2_0;
		}
	}
}

按键消抖

我们通常加一个延时函数来消抖。

独立按键控制LED显示二进制 

这里用 unsigned char 类型是因为:无符号字符型(所占1字节 = 8bit位)刚好对应着8位二进制的数据,那这八位二进制的正好这个P2口和这个寄存器51单片机保持一致。

独立按键控制LED移位

#include <REGX52.H>
//延时函数
void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
			i = 2;
		  j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
unsigned char LEDNum;

void main()
{
	while(1)
	{
		if(P3_1 == 0)   
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			if(LEDNum >= 8)
				LEDNum = 0;
			
			P2 = ~(0x01<<LEDNum);
			LEDNum++;
		}
		
		if(P3_0 == 0)
		{
			Delay(20);
			while(P3_0 == 0);
			Delay(20);
			
			if(LEDNum == 0)
				LEDNum = 7;
			else
				LEDNum--;
			
			P2 = ~(0x01<<LEDNum);
		}
	}
}

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值