51单片机独立按键

独立按键介绍

在嵌入式系统中,独立按键通常指的是单独的按键开关或按钮,它们通常用于接收用户输入或执行特定的功能。在51单片机(指的是Intel 8051或其兼容芯片)中,独立按键可以通过简单的硬件连接和软件编程来实现各种功能。

独立按键通常连接到单片机的GPIO(通用输入/输出)引脚上,通过按下或释放按键来改变GPIO引脚的电平状态。当按键被按下时,对应的GPIO引脚会被拉低或拉高,单片机可以通过检测这些状态来判断按键是否被按下。

在软件编程中,可以通过轮询或中断的方式来检测按键状态。在轮询方式下,单片机周期性地检测按键状态,从而实现按键的响应。而在中断方式下,可以配置单片机的外部中断引脚,当按键状态改变时触发外部中断,从而实现按键的响应。

通过软件编程,可以实现按键的各种功能,例如控制LED灯的亮灭、改变显示屏内容、执行特定的操作等。独立按键在嵌入式系统中具有广泛的应用,例如在智能家居产品、工业控制设备、电子玩具等方面。

51单片机独立按键原理图
eg1:独立按键控制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--;
	}
	
}
void main(){
	  while(1){
			 if(P3_0 == 0){ // 当独立按键按下去的时候
					P1_0 = 0;// 选中第一个流水灯
				  Delay500ms(500);
			 }else{
					P1_0 = 1; // 当独立按键松开的时候
				  Delay500ms(500);
			 }
       
		}
}

每次按下一次led取反显示
eg2:独立按键 控制LED显示二进制(相当于c语言中的按位取反)

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按位移动

c 复制代码
#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灯左右移动

cpp 复制代码
#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);
		   }
		}

}
相关推荐
编码追梦人2 小时前
从零入门嵌入式系统:核心概念 + 环境搭建 + 传感器实战
单片机·嵌入式硬件
dqsh064 小时前
树莓派5+Ubuntu24.04 LTS CH348 / CH9344 驱动安装 保姆级教程
linux·c语言·单片机·嵌入式硬件·iot
点灯小铭5 小时前
基于单片机的16位逐次逼近AD电路设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Shang180989357266 小时前
T41NQ/T41N高性能低功耗SOC芯片 软硬件资料T41NQ适用于各种AIoT应用,适用于智能安防、智能家居,机器视觉等领域方案
驱动开发·嵌入式硬件·计算机视觉·fpga开发·信息与通信·t41nq
GilgameshJSS7 小时前
STM32H743-ARM例程39-SD_IAP
arm开发·stm32·嵌入式硬件
hollq7 小时前
STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu完成轮询方式检测按键
arm开发·stm32·嵌入式硬件
d111111111d9 小时前
STM32外设学习--DMA直接存储器读取(AD扫描程序,DMA搬运)--学习笔记。
笔记·stm32·单片机·嵌入式硬件·学习
EVERSPIN9 小时前
基于灵动MCU微控制器的呼吸机主控单片机方案
单片机·嵌入式硬件·mcu微控制器
清风66666612 小时前
基于单片机的多模式智能洗衣机设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
无人装备硬件开发爱好者12 小时前
《STM32 江湖 SPI 双绝:硬件外设与软件模拟的深度解析》
嵌入式硬件·移植·软件模拟spi