独立按键介绍
在嵌入式系统中,独立按键通常指的是单独的按键开关或按钮,它们通常用于接收用户输入或执行特定的功能。在51单片机(指的是Intel 8051或其兼容芯片)中,独立按键可以通过简单的硬件连接和软件编程来实现各种功能。
独立按键通常连接到单片机的GPIO(通用输入/输出)引脚上,通过按下或释放按键来改变GPIO引脚的电平状态。当按键被按下时,对应的GPIO引脚会被拉低或拉高,单片机可以通过检测这些状态来判断按键是否被按下。
在软件编程中,可以通过轮询或中断的方式来检测按键状态。在轮询方式下,单片机周期性地检测按键状态,从而实现按键的响应。而在中断方式下,可以配置单片机的外部中断引脚,当按键状态改变时触发外部中断,从而实现按键的响应。
通过软件编程,可以实现按键的各种功能,例如控制LED灯的亮灭、改变显示屏内容、执行特定的操作等。独立按键在嵌入式系统中具有广泛的应用,例如在智能家居产品、工业控制设备、电子玩具等方面。
51单片机独立按键原理图
eg1:独立按键控制led亮灭
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms(unsigned int xms) //@11.0592MHz 单片机的系统中int 表示的是16位的,在计算机中是32位或者是64位的
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do{
while(--j);
}while(--i);
xms--;
}
}
void main(){
while(1){
if(P3_0 == 0){ // 当独立按键按下去的时候
P1_0 = 0;// 选中第一个流水灯
Delay500ms(500);
}else{
P1_0 = 1; // 当独立按键松开的时候
Delay500ms(500);
}
}
}
每次按下一次led取反显示
eg2:独立按键 控制LED显示二进制(相当于c语言中的按位取反)
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms(unsigned int xms) //@11.0592MHz 单片机的系统中int 表示的是16位的,在计算机中是32位或者是64位的
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do{
while(--j);
}while(--i);
xms--;
}
}
// P3_0 表示的是第一个独立按键
// P1_0 表示的是第一个led灯
void main(){
unsigned char LEDNum = 0;
while(1){
if(P3_1 == 0){
Delay500ms(20);
while(P3_1 == 0);
Delay500ms(20);
LEDNum++;
P1 = ~LEDNum;
}
}
}
eg4:独立按键控制LED按位移动
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms) //@11.0592MHz 单片机的系统中int 表示的是16位的,在计算机中是32位或者是64位的
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do{
while(--j);
}while(--i);
xms--;
}
}
// P3_0 表示的是第一个独立按键
// P1_0 表示的是第一个led灯
void main(){
unsigned char LEDNum =0;
// 独立按键代码移位的实现
P1 = ~0x01;
while(1){
if(P3_1 == 0){
Delay(20);
// 检测是否松手
while(P3_1 == 0);
Delay(20);
LEDNum++;
if(LEDNum >= 8){
LEDNum = 0;
}
P1 = ~(0x01 << LEDNum);
}
}
}
eg5:单片机LED灯使用独立按键控制led灯左右移动
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms) //@11.0592MHz 单片机的系统中int 表示的是16位的,在计算机中是32位或者是64位的
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do{
while(--j);
}while(--i);
xms--;
}
}
// P3_0 表示的是第一个独立按键
// P1_0 表示的是第一个led灯
void main(){
unsigned char LEDNum =0;
// 独立按键代码移位的实现
P1 = ~0x01;
while(1){
if(P3_1 == 0){
Delay(20);
// 检测是否松手
while(P3_1 == 0);
Delay(20);
LEDNum++;
if(LEDNum >= 8){
LEDNum = 0;
}
P1 = ~(0x01 << LEDNum);
}
if(P3_0 == 0){
Delay(20);
// 检测是否松手
while(P3_0 == 0);
Delay(20);
if(LEDNum == 0){
LEDNum = 7;
}else{
LEDNum--;
}
P1 = ~(0x01 << LEDNum);
}
}
}