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

独立按键介绍

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

独立按键原理图

51单片机入门教程——独立按键_第1张图片

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

 独立按键控制LED亮灭

#include 

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

补充:C51运算符

51单片机入门教程——独立按键_第2张图片

 算数运算符:%去余,就是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基本语句

51单片机入门教程——独立按键_第3张图片

 独立按键控制LED状态

#include 
//延时函数
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;
		}
	}
}

按键消抖

51单片机入门教程——独立按键_第4张图片

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

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

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

独立按键控制LED移位

#include 
//延时函数
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<

你可能感兴趣的:(51单片机,嵌入式硬件,单片机)