独立按键介绍
轻触按键,相当于一种电子开关,按下使开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通断开。
独立按键原理图
这里一共有四个按键,一端连接在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);
}
}
}