1.介绍
1.1什么是独立按键?
轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
英文:independent press button
了解:独立按键具有四个"头",独立按键主要有四个部分:1、底座,2、金属弹片(这个金属弹片是鼓起来的,当你按下去的时候它会变平,松手的时候又会鼓起来的),3、就是按键的头,4、就是金属的盖子。那么在相同的两个引脚当中其实它就是内部连接起来的金属片,无论你按不按下去,它前后的两个引脚都是连接起来的。就是始终都是具有导通性质的,向外具有两个接触的点。按下的时候四个引脚全部都是连接的,松手的时候两边分别连接,之间是断开的。
![](https://i-blog.csdnimg.cn/blog_migrate/ae465735111850a3c30c4c3328c803fa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b0bb7f6169123ccf79ea36040140e00d.png)
1.2运算符的介绍
![](https://i-blog.csdnimg.cn/blog_migrate/2e2661e5ce5a2df79e373d177deb2350.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cd8b618dbf4b31328dd81d98f3e8ec92.png)
算术运算符:加减没什么好说的,乘法和除法注意一下符号!以及除法是取整的不是四舍五入按照数学的运算来的,比方举个例子:五除以二,按照数学的方式是:2.5,在C语言当中是2取最小整数,当然这是int数据类型当中是这个样子。也有单精度浮点型(float)和双精度浮点型(double)它们依旧是等于2.5的。那么取余(%)是什么意思呢?其实很简单就是还是以五除以二的话在小学当中是2...1,那么这个其实就是5%2=1了。再比方说102/10 = 10...2 那么102%10 = 2,所以除号与取余就是这个意思了。赋值就是把右边得出的值或者说是结果赋值到你左边的这个变量。
判断运算符:这个没什么好说的,就是在表达式的值经常有判断表达式,如果你的表达式的值为真,那么就执行表达式里面大括号(作用域)里面的内容。在这里注意下等于的判断表达式的符号。
逻辑运算符:假设 a = 1,b = 0;
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 (A || B) 为真。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。
位运算:
按位与操作,按二进制位进行"与"运算。运算规则: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;
<< 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
>> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
1.3数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/cc841dd0bb9fd5ad1fad141bc00b37d8.png)
1.4分支语句和循环语句
![](https://i-blog.csdnimg.cn/blog_migrate/4ca4567c473020906976671cd368ccf8.png)
//控制LED灯的亮灭
include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0)
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
2.第一种独立按键的操作
2.1按键的抖动
![](https://i-blog.csdnimg.cn/blog_migrate/804e8b244e6e32863279cf0f770f839f.png)
在按键闭合的时候会产生一些抖动,没有按键按下的话它就是一个高电平(1)(单片机上电的时候所有的IO口默认都是高电平)。在我们按下按键的时候它就会变成(0),并且由于它的是机械触电会弹开,然后上下抖动几下,然后才会稳定的变成(0)。抖动的时间上面图中也表示的是(5~10)ms。当抖动消失的时候进入了一个稳定的低电平(0),这个持续时间是看你手什么时候松开这个按键。在松手的时候也会产生抖动,它也不会突然变成高电平(1),也会抖动产生时间为(5~10)ms。最后,松手。
按键的消抖有两种方法:
加个线,把这个线通过这些电路里面进行一些触发器等等,通过一些电路来进行操作,把这个抖动进行一些过冲,然后再给我们单片机进行点上。比较麻烦!
通过软件来进行一个延迟函数,把这个消抖进行操作!
2.2程序代码
说明:当按下k1键时候,第一个LED灯不亮,松开k1的时候,第一个LED灯会亮的
![](https://i-blog.csdnimg.cn/blog_migrate/2b4e5bdc1df30149cccc20794af6088a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a6990b167d867686b69f87546866cd8a.png)
3.第二种独立按键的操作
独立按键的控制LED的显示二进制
![](https://i-blog.csdnimg.cn/blog_migrate/941c9819273c7afb9d2356a1cee64a00.png)
这里用 unsigned char 类型是因为:无符号字符型(所占1字节 = 8bit位)刚好对应着8位二进制的数据,那这八位二进制的正好这个P2口和这个寄存器51单片机保持一致。
注意:P2口上电之后和单片机的IO上电一样都是默认的是高电平! 1111 1111
LEDNum取反给P2的话,其实变量取反给P2的值上它是并不会改变这个变量的值。它的值还是没有取反的值。在等号右边的话,它并不会改变LEDNum的值。其实就是取反当中你取反的值是右值就不会被改变。
4.第三种独立按键的操作
![](https://i-blog.csdnimg.cn/blog_migrate/182135e75b0b0b234a08b2ce374f0b31.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24a4f5124994deaac4a05aa3398c5ee5.png)