肖港网站开发,福建省建设执业注册资格管理中心网站,广州正规网站建设哪家好,sem是做什么的目录
1.按键简介
2.独立按键控制LED亮灭
3.独立按键控制LED移位 1.按键简介 在生活中#xff0c;我们常常会见到各种按键#xff0c;我们的开发板上也有按键#xff0c;就在左下角有四个按键#xff0c;我们把它们叫做独立按键。 独立按键的原理比较简单…
目录
1.按键简介
2.独立按键控制LED亮灭
3.独立按键控制LED移位 1.按键简介 在生活中我们常常会见到各种按键我们的开发板上也有按键就在左下角有四个按键我们把它们叫做独立按键。 独立按键的原理比较简单大概就是按下独立按键按键就会把电路连通松开按键又会恢复原样。 按键的内部结构是一个有弹性的金属片按下会连接电路松开之后又会恢复原样所以电路又会断开。在单片机中我们的按键对应的GPIO管口是下面这样的 你会发现这里其实有一点不太一样的东西就是K1和K2对应的GPIO口好像有点不太一样是反过来的这个具体的原因我们不得而知但是我们使用的时候需要记住我们两个按键对应控制的端口是不一样的就行了。 这里这里我们按下K1电路连接P31管脚就会接收到低电平信号也就是P31会由默认的高电平1变成0所以我们使用的时候只需要判断端口的值是1还是0就行了。 其次金属按键还有一个性质——按下抖动 这也是一个按键的弊端按键按下和松开时的抖动会导致控制的变化比如我们定义按下按键灯就亮那么存在抖动的情况下我们的灯可以在前面的这段抖动的时间里面不断变化也就是暗亮交替闪烁之后再保持稳定所以按键中一大重要的操作就是按键消抖。
2.独立按键控制LED亮灭 这里我们使用KEY1来控制LED1的亮灭按键1对应的端口是P31LED1对应的端口是P20我们先考虑一下如何使用按键。 首先我们使用按键就要检测按键的按下按键按下的时候把LED1的状态更改这样就好了单在细节方面还需要补充比如我们的按键需要消抖防止出现因为按键抖动导致的差错所以我们需要在检测到按键按下之后暂停20ms进行消抖处理在按键松开之后再进行消抖处理这样就免除了按键抖动对我们操作的干扰了。 其次按键按下之后松开之前会一直处于按下的状态也就是说我们如果在这里设置LED变为LED即LED由1变0由0变1这样的话我们在按下按键之后松开之前会一直进行判断KEY而且每次都会成功然后变化LED状态这并不是我们想要的。所以我们就要使用while循环把按键处于按下状态锁定起来循环内部不使用任何操作也就是写一个while(KEY0);这样我们就可以让按键按下的时候始终处于这个循环里按键松开之后再执行相应操作。 然后我们就可以实现我们的代码了
#include REGX52.H
#include INTRINS.Hsbit KEY1 P3^1;
sbit LED1 P2^0;void Delay(unsigned int xms) //11.0592MHz
{while(xms--){unsigned char i, j;_nop_();i 2;j 199;do{while (--j);} while (--i);}
}void main()
{LED1 1;while(1){if(KEY1 0){Delay(20);//消抖while(KEY1 0);//检测按键松开Delay(20);//消抖LED1 !LED1;//变化状态}}
} 这里我们的代码中使用了 sbit KEY1 P3^1; 和 sbit LED1 P2^0;这两句代码定义端口其实我们也可以直接对两个端口赋值但是我们的格式就要变了比如我们使用P3_1和P2_0而不是P3^1和P2^0,因为这两种表示方式在51里是不一样的。
3.独立按键控制LED移位 这里模仿LED流水灯的效果我们使用按键检测来让LED移位思路是KEY1控制左移KEY2控制右移初始LED默认在LED1的位置处于亮的状态。 这样我们就可以实现代码了 我们需要控制整个LED串所以就选择对P2端口直接赋值初始值需要是只有LED1亮那么输入的数据就要是1111 1110也就是初始化P2为0xFE然后就是LED的左右移动使用_crol_()和_cror_()函数即可按键的消抖和KEY1P31与KEY2P30对应的端口也要注意一下并且数据输入的是反过来的数据所以我们的左移右移操作也要相反即KEY1使用右移函数实现LED左移KEY2使用左移函数实现LED右移这样就可以完成我们的操作
#include REGX52.H
#include INTRINS.Hsbit KEY1 P3^1;
sbit KEY2 P3^0;void Delay(unsigned int xms) //11.0592MHz
{while(xms--){unsigned char i, j;_nop_();i 2;j 199;do{while (--j);} while (--i);}
}void main()
{P2 0xFE;while(1){if(KEY1 0){Delay(20);while(KEY1 0);Delay(20);P2 _cror_(P2,1);}if(KEY2 0){Delay(20);while(KEY2 0);Delay(20);P2 _crol_(P2,1);}}
}然后上电测试就完成了独立按键部分的内容