当前位置:网站首页>触摸按键与按键控制对应的LED状态翻转

触摸按键与按键控制对应的LED状态翻转

2022-06-29 22:21:00 让一切都燃烧

任务要求:

如图所示:
在这里插入图片描述
 

任务一:

触摸按键控制对应的LED状态翻转

 

思路分析:

触摸按键实现LED状态翻转与机械按键原理是一样的,而且不需要用延时抖动


 
 

完成代码

int main (void){
    //主程序
	RCC_Configuration(); //系统时钟初始化 
	LED_Init();//LED初始化
	TOUCH_KEY_Init();//按键初始化
	while(1){
    
					if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){
     //读按键接口的电平
		
			if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){
     //读按键接口的电平
			GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
				while(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)); //等待按键松开 防止程序在按键没有松开的情况下反复运行
			}
		}
		
					if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){
     //读按键接口的电平
		
			if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){
     //读按键接口的电平
			GPIO_WriteBit(LEDPORT,LED2,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED2))); //LED取反
				while(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)); //等待按键松开 防止程序在按键没有松开的情况下反复运行
			}
		}

		

	}
}



 

任务二:

按键控制对应LED状态翻转

代码:

//main.c

int main (void){
    //主程序
	
	//初始化程序
	RCC_Configuration(); //时钟设置
	LED_Init();//LED初始化

	KEY_Init();//按键初始化

	//主循环
	//初始化起始LED为熄灭状态 
        GPIO_WriteBit(LEDPORT,LED3,(BitAction)(1));
	GPIO_WriteBit(LEDPORT,LED4,(BitAction)(1));
	while(1){
    

//有锁存

		if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){
     //读按键接口的电平
			delay_ms(20); //延时去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){
     //读按键接口的电平
				GPIO_WriteBit(LEDPORT,LED3,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED3))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
			}
		}

		  		if(!GPIO_ReadInputDataBit(KEYPORT,KEY2)){
     //读按键接口的电平
			delay_ms(20); //延时去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY2)){
     //读按键接口的电平
				GPIO_WriteBit(LEDPORT,LED4,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED4))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY2)); //等待按键松开 
			}
		}
		


	}
}

注意:
对应的也得修改,因为两个LED对应的接口与核心板上两个小灯对应的接口不一致

led.h

#define LEDPORT GPIOA //定义IO接口
#define LED3 GPIO_Pin_2 //定义IO接口
#define LED4 GPIO_Pin_3 //定义IO接口

led.c

void LED_Init(void){
     //LED灯的接口初始化
	GPIO_InitTypeDef  GPIO_InitStructure; 	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);       
    GPIO_InitStructure.GPIO_Pin = LED3; //选择端口号(0~15或all) 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) 
	GPIO_Init(GPIOB, &GPIO_InitStructure);			
}
原网站

版权声明
本文为[让一切都燃烧]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Ll_R_lL/article/details/125478810