为什么网站后台google登陆不了 firefox可以,网站水军怎么做,网页设计资源,手机模板网站模板下载网站有哪些内容##江科大视频学习#xff0c;并且对具体的一些小细节进行更详细的分析。
什么是独立按键#xff1f;
轻触按键:相当于是一种电子开关#xff0c;按下开头接通#xff0c;松开时开头断开#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 注意…##江科大视频学习并且对具体的一些小细节进行更详细的分析。
什么是独立按键
轻触按键:相当于是一种电子开关按下开头接通松开时开头断开实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 注意GND为负极按下按键时相当于连通负极传到给寄存器时反馈为0V低电平。 松开独立按键则为高电平---5V。
K1对应的是P3_1 K2对应的是P3_0 注意一下。
如图所示:
//P3为独立按键处所控制的寄存器if(P3_10) //当k1按键被按下时if(P3_11) // 当k1按键被松开时
以上便是我们这篇文章所要用到的基本原理。
【3-1】 独立按键控制LED亮灭
#include REGX52.Hvoid main()
{while(1){if(P3_10) //判断独立按键是否被按下{P2_00;//打开第一个LED灯 }else{P2_01; //关上LED灯}}
/* LED是正极接正极 负极接负极才可以亮
此时的LED右边已经是正极VCC了那么左边就得
为低电平0V才可亮.*/
记得将文件转为HEX文件。
【3-2】 独立按键控制LED状态
1.什么是按键的抖动? 对于机械开关当机械触点断开闭合时由于机械触电的弹性作用一个开关在闭合时不会马上稳定地接通在断开时也不会一下子断开所以在开关闭合及断开的瞬间会伴随一连串的抖动。其实我们有两种解决方案
硬件防止抖动对于我们实现来说比较困难软件防抖 比较轻松实现
回忆一下我们有个延迟操作刚好可以用延迟的时间来覆盖这个抖动时间。
如果忘记怎么操作了可以看这个---点击[1-2] LED灯闪烁.
2.实现独立按键控制LED状态
#include REGX52.Hvoid 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){//p3_1指的是k1按键if(P3_10){Delay(20);//20ms刚好覆盖抖动while(P3_10); //检测按键是否被松开Delay(20);//松开抖动 覆盖//正式操作P2_0~P2_0;//按位取反//P2_0的L端口默认为高电频那么就为1,按位取反后便为0}}}本来的D1的状态为熄灭的是高电平为1则按位取反后变为低电平为0则D1灯亮起。
【3-3】独立按键控制LED显示二进制
插入一个知识点
在MCU编制中我们通常喜欢用unsigned char 变量名 ,来表示寄存器
因为unsigned char 为八位符合寄存器大小其大小范围为0~255。
#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);}
}void main()
{//八位二进制 表示一个寄存器unsigned char LEDNum0;while(1){if(P3_10){Delay(20);//软件消抖while(P3_10);//检测松手Delay(20);//消抖LEDNum;P2~LEDNum; //按位取反并赋值给P2}}}
为何要这么写因为常识是对于单片机上的所有L端口初始都默认为高电平所以都为寄存器里都为1.那么对于P2寄存器也是如此。
如果我们直接对P2进行---P2 则得到0000 0000;对吧
那么然后我们在按位取反会发生什么;--- 1111 1111P2寄存器又回到初始状态了然后一直这么循环下去直接卡死在这里。所以我们就用unsigned char LEDNum来代替寄存器然它进行然后按位取反赋值给P2,便可以实现二进制位移了。 【3-4】独立按键控制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);}
}//定义一个全局变量
unsigned char LEDNum; //一个寄存器定义void main()
{P2~0x01;//初始化让第一个灯亮起来if(P3_10){Delay(20);while(P3_10);Delay(20);
//完成抖动防控后LEDNum;if(LEDNum8){LEDNum0;//回到首位置}P2~(0x01LEDNum);}
//LED灯右移成功//使用k2按键控制左移if(P3_00){Delay(20);while(P3_00);Delay(20);
//完成抖动防控后 防止越界if(LEDNum0){LEDNum7;//回到最右边}else{LEDNum--;}//进行位移操作P2~(0x01LEDNum);}}
对于 这个位计算符号大家可能有所陌生请看下图。 请亲自动手来实现以上操作进行加深印象。
今天的内容便是这么多。感谢您的观看