首页 > 其他分享 >STMF103VET6的按键检测

STMF103VET6的按键检测

时间:2024-08-15 12:53:57浏览次数:16  
标签:Pin 检测 按键 GPIOC Init InitStruct GPIO STMF103VET6

 一、按键的检测的原理

      根据STMF103VET6的原理图我们可以知道按键在没有按下时I/O口的电平为低电平,按键按下时I/O的电平为高电平。因此我们只需要读取按键对应的I/O口的电平就可以判断按键。

 二、示例代码

  1、首要初始化两个按键的GPIO。

void KEY_Init(void)
{
    //打开GPIOA GPIOC的时钟
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,ENABLE);
	//初始化GPIO
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStruct);
}

2、检测按键是否被按下。

uint8_t Key_Scan(void)
{			
	/*检测是否有按键按下 */
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1 )  
	{	 
		/*等待按键释放 */
		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1);   
		return 	1;	 
	}
	else
		return 0;
}

uint8_t Key_PC13_Scan(void)
{
	if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 1)
	{
		while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 1)
		return 1;
	}
	else 
		return 0;
}

 三、功能验证

      在主函数中调用相关函数,通过按键来控制小灯的亮灭,按下PA0连接的按键小灯被点亮,按下PC13连接的按键小灯熄灭

int main()
{
	LED_Init();
	KEY_Init();
	while(1)                            
	{	   
		if(Key_Scan()==1)
		{
			LED_Red_On();
		}
		if(Key_PC13_Scan()==1)
		{
			LED_Red_Off();
		}
	}
}

标签:Pin,检测,按键,GPIOC,Init,InitStruct,GPIO,STMF103VET6
From: https://blog.csdn.net/sinat_59455236/article/details/141202108

相关文章

  • 【Python快速入门和实践011】Python常用脚本-目标检测之VOC格式转YOLO格式脚本
    一、数据集介绍        NEU-DET数据集是由东北大学(NortheasternUniversity,简称NEU)发布的一个用于钢材表面缺陷检测的数据集。这个数据集特别设计用于支持和促进工业领域中的缺陷检测研究。NEU-DET数据集的一些主要特点包括:多样性和复杂性:数据集包含了多种类型......
  • <数据集>安全帽和安全背心识别数据集<目标检测>
    数据集格式:VOC+YOLO格式图片数量:22141张标注数量(xml文件个数):22141标注数量(txt文件个数):22141标注类别数:3标注类别名称:['helmet','vest','head']序号类别名称图片数框数1helmet15937572402vest394281313head7235124341使用标注工具:labelImg标注规则:对类别进行画水......
  • 如何在实验室信息管理系统实现不定行,不定列检测?
    前言实验室信息管理系统,即LIMS(LaboratoryInformationManagementSystem),它是由计算机和应用软件组成,能够完成实验室数据和信息的收集、分析、报告和管理。早期的LIMS系统大多基于计算机局域网,专门针对一个实验室的整体环境而设计,是一个包括了信号采集设备、数据通讯软件、数......
  • vue按键修饰符
    事件的类型有以下四类:js事件分为四类:鼠标事件:click、mouseover、dbclick、mousedown、mouseout...键盘事件:keydown、keypress、keyup..窗体事件:load、reseize、scroll...表单事件:blur、focus、input、change、select传统方式的弊端:需要了解每个数值的键码为了在必要的......
  • <数据集>街头摊贩识别数据集<目标检测>
     数据集格式:VOC+YOLO格式图片数量:966张标注数量(xml文件个数):966标注数量(txt文件个数):966标注类别数:1标注类别名称:['street-vendor']序号类别名称图片数框数1street-vendor9662016使用标注工具:labelImg标注规则:对类别进行画水平矩形框图片示例:标注示例:......
  • <数据集>红绿灯识别数据集<目标检测>
    数据集格式:VOC+YOLO格式图片数量:7884张标注数量(xml文件个数):7884标注数量(txt文件个数):7884标注类别数:3标注类别名称:['light_green','light_red','light_yellow']序号类别名称图片数框数1light_red4661105732light_green406181433light_yellow215457使用标注工具:labe......
  • Mediapipe + KNN检测人体跌倒基本过程
    输入:图片、视频、摄像头等预处理:GBR2RGB、缩放、归一化等检测:加载训练模型BlazePose检测是否有人若有人,则提取33个关键点注:BlazePose是一个基于MobileNet的训练模型。       MobileNet是一个基于CNN(卷积神经网络),专为移动设备和边缘计算的深度学习模型。  ......
  • 利用2D车道先验增强3D车道检测和拓扑推
    利用2D车道先验增强3D车道检测和拓扑推论文链接:https://arxiv.org/pdf/2406.03105代码链接:https://github.com/homothetic/Topo2D附赠自动驾驶最全的学习资料和量产经验:链接摘要本文介绍了利用2D车道先验增强3D车道检测和拓扑推理。3D车道检测和拓扑推理是自动驾驶......
  • 自动驾驶系列—智能驾驶新时代:解密APA车位检测系统背后的技术与应用场景
    ......
  • 硬盘检测和维护常用软件,NAS用户必备
    分享我在折腾硬盘时常用到的一些软件。为了方便新手,我按:“买硬盘时”、“硬盘使用中”、“硬盘出现问题时”这几个使用场景做了分类,内容还是很实用的。买硬盘时常用到的软件买硬盘也分两个场景:一、购买新硬盘顺手跑个分是数码玩家的仪式感;二、购买二手硬盘做个全面检测......