• STM32F103C8Z6按键扫描程序IO读取


    IO输入的姿势

    对于IO输入采用与IO输出类似的姿势

    • 1 使能时钟
    • 2 初始化IO口
      • 2.1 定义一个初始化结构体
      • 2.2 选择要初始化的IO口
      • 2.3 配置IO口的输入模式
      • 2.4 调用IO口初始化函数
    • 3 读取IO口
        GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
    
    //配置输入io口的示例
    void LED_GPIO_Config(void)	
    {
    	GPIO_InitTypeDef GPIO_InitStructure;//定义一个初始化结构体
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能时钟
    	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//选择要初始化的IO口
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//配置IO口的输入模式
    	GPIO_Init(GPIOA,&GPIO_InitStructure);//调用IO口初始化函数
    }
    

    关于IO输入的模式 参考

    我不太懂

    • 1 模拟输入模式:此模式是将I/O口上的信号作为模拟信号直接输到STM32内部的ADC上,进行采样转换。
    • 2 上拉输入模式:没有输入信号的时候默认输入高电平(因为有弱上拉)等同于在IO上接一个上拉电阻,当IO没有任何连接,即悬空,那么此时我们读该IO的电平就是高电平
    • 3 下拉输入模式:没有输入信号的时候默认输入低电平(因为有弱下拉)等同于在IO上接一个下拉电阻,当IO没有任何连接,即悬空,那么此时我们读该IO的电平就是低电平
    • 4 浮空输入模式:好似浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了,输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号
    //这是一个与主题没什么关系的延时函数
    void Delay(__IO u32 Count)
    {
      for(; Count != 0; Count--);
    } 
    
    //按键处理函数
    //返回按键值
    //mode:0,不支持连续按;1,支持连续按;
    //0,没有任何按键按下
    //1,KEY0按下
    //2,KEY1按下
    //3,KEY2按下 
    //4,KEY3按下 WK_UP
    //注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!!
    u8 KEY_Scan(u8 mode)
    {	 
    	static u8 key_up=1;//按键按松开标志
    	if(mode)key_up=1;  //支持连按		  
    	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
    	{
    		delay_ms(10);//去抖动 
    		key_up=0;
    		if(KEY0==0)return KEY0_PRES;
    		else if(KEY1==0)return KEY1_PRES;
    		else if(KEY2==0)return KEY2_PRES;
    		else if(WK_UP==1)return WKUP_PRES;
    	}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; 	    
     	return 0;// 无按键按下
    }
    
    
  • 相关阅读:
    第四周学习总结
    第十三周编程总结
    2018秋季第十三周助教总结
    第十三周学习总结
    使用函数输出水仙花数 (void的用法)
    ZOJ3229 有源汇上下界最大流
    codeforces-1176 (div3)
    codeforces-1077 (div3)
    牛客假日团队赛1 题解
    牛客练习赛38 离线 启发式合并并查集
  • 原文地址:https://www.cnblogs.com/uestcman/p/9037963.html
Copyright © 2020-2023  润新知