【实验总结2】独立按键控制LED灯
创始人
2025-05-31 11:55:53
0
  1. 独立按键

根据单片机板子使用手册查看按键控制端口,一般是P3端口,一次为P3_1、P3_0、P3_2、P3_3。

#include//只能操作整个P2 P2 = 0xFE;
#include//可以直接操作位寄存器 P2_0 = 0;
if(P3_1 == 0){P2_0=0;}else{P2_0=1;}

2. 按键抖动

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
在按键闭合的时候会产生一些抖动,没有按键按下的话它就是一个高电平(1)(单片机上电的时候所有的IO口默认都是高电平)。在我们按下按键的时候它就会变成(0),并且由于它的是机械触电会弹开,然后上下抖动几下,然后才会稳定的变成(0)。抖动的时间上面图中也表示的是(5~10)ms。当抖动消失的时候进入了一个稳定的低电平(0),这个持续时间是看你手什么时候松开这个按键。在松手的时候也会产生抖动,它也不会突然变成高电平(1),也会抖动产生时间为(5~10)ms。最后,松手。

按键的消抖有两种方法:
1.加个线,把这个线通过这些电路里面进行一些触发器等等,通过一些电路来进行操作,把这个抖动进行一些过冲,然后再给我们单片机进行点上。比较麻烦!
2.通过软件来进行一个延迟函数,把这个消抖进行操作!

void main(){while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);P2_0=~P2_0; //按位取反}}

3. 按键控制LED二进制

为什么需要定义unsigned char LEDNum=0??

  • 假设没有这个值,那么P2的位置(即所有的灯都会亮起),或者说该亮的地方没亮,但是不该亮的地方全都亮了。

  • 然后就需要我们进行按位取反

  • 但是按位取反之后1111 1111溢出(因为进行P2++导致了溢出)就回变成 0000 0000,然后使用~进行按位取反之后又变成了1111 1111,至始至终没有改变,所以就需要使用到LEDNum这一个值进行一个代换。

LEDNum=1,0000 0001 再取反得1111 1110,最右边的灯亮

LEDNum=2,0000 0010 再取反得1111 1101,第二个灯亮

.......

最后, 1111 1111 再取反0000 0000,全部亮。

一次循环,自加再取反。


void main(){unsigned char LEDNum=0;while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);//1111 1111//P2++; // 0000 0000//P2_0=~P2_0; //按位取反 1111 1111     LEDNum++;P2=~LEDNum;           }}

4. 独立按键控制LED移位

按位左移<<:

0000 0001 0x01<<0

0000 0010 0x01<<1

0000 0100 0x01<<2

左移:按位左移再取反,大于8时重新置0。左移和二进制相似

0x01,0000 0001,然后左移 0x01<<1得0000 0010,取反得1111 1101,LED左移。

右移:右移是同样的原理,只是改变移动方向


unsigned char LEDNum;
void main()
{    P2=~0x01; //初始化。最右边的灯点亮while(1){if(P3_1==0){  // 左移Delay(20);while(P3_1==0);Delay(20);LEDNum++;if(LEDNum>8){LEDNum=0;P2=~(0x01<
其他知识:

算术运算符:加减没什么好说的,乘法和除法注意一下符号!以及除法是取整的不是四舍五入按照数学的运算来的,比方举个例子:五除以二,按照数学的方式是: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,右边丢弃。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...