外设实战之KEY(查询方式)

2014-6-5

之前已经能驱动LED,这只是用到GPIO的输出功能,接下来要用到GPIO的输入功能。把输入IO连到KEY上。

两个按键,KEY1和KEY2,定义按下KEY1让LED1亮,弹起让LED1灭。按下KEY2让LED2亮,弹起让LED2灭。

虽然查询方式会降低系统的效率,但很多场合还是少不了查询方式,初期先用查询验证代码逻辑,后面会改成中断方式来完善。

接下来是实战步骤:

一、查看电路原理图:

两个按键,KEY1对应的是PF6,按下时为低电平。KEY2对应的是PF7,按下时为低电平。

二、开始编写代码,需要复用之前LED部分代码。

注意在KEY文件中添加包含头文件:

#include "stm32f0xx.h"

下面一些宏和库函数都在stm32f0xx.h文件中有声明

1.初始化KEYS对应的IO外设时钟:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);

2.初始化KEYS对应的IO管脚:

GPIO_InitTypeDef GPIO_InitStruct;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6 ;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2;

GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(GPIOF, &GPIO_InitStruct);

GPIO_SetBits(GPIOF, GPIO_Pin_7| GPIO_Pin_6 );

3.查询方式读取KEYS的电平

GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_6);

GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_7);

4.测试效果:

在main函数中:

int main(void)

{

LEDS_Init();

KEYS_Init();

LED1_ON();

LED2_ON();

Delay(1000);

LED1_OFF();

LED2_OFF();

while(1){

if(0 == GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_6)){

LED1_ON();

}else{

LED1_OFF();

}

if(0 == GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_7)){

LED2_ON();

}else{

LED2_OFF();

}

}

}

编译并下载运行,可以看到两个灯先亮了大约1S,用来表示程序已经正常工作。灯灭了后,进入死循环,读取KEY1和KEY2的电平,为低电平说明在按下状态,为高电平说明在弹起状态。虽然效果演示还不错,但没有做去抖动,在实际产品中是不能用的,在后面加上串口的打印信息就会很清楚的看到这一点,去抖动,软件上用到的是延时方法,可以是软件延时,也可以用定时器做延时。以后加了定时器再完善,这里只是验证最基本的逻辑是不是通的。

外设实战之KEY(查询方式)

时间: 2024-08-29 16:54:02

外设实战之KEY(查询方式)的相关文章

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样. 示例: Session session = SessionFactory.getCurrentSession(); User user = null; Transaction ts = s

hibernate 查询方式汇总

主要摘自  http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html ,http://blog.csdn.net/xingtianyiyun/article/details/7703429 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种.但是细分可以有如下几种: 一.HQL查询方式     这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来

外设实战总集之LED

2014-6-4 现在开发环境搭建好了,接下来先从最基本的开始,最基本的当然是驱动LED. 接下来是实战步骤: 一.查看电路原理图,LED1对应的是PA2,LED2对应的是PA3,两个LED都是灌电流方式驱动,所以GPIO设置成输出,当输出低电平时,LED亮,输出高电平是,LED灭. 二.开始编写代码: 注意在LED文件中添加包含头文件: #include "stm32f0xx.h" 下面一些宏和库函数都在stm32f0xx.h文件中有声明 1.初始化LEDS对应的IO外设时钟: RC

IBatis.Net学习笔记五--常用的查询方式

在项目开发过程中,查询占了很大的一个比重,一个框架的好坏也很多程度上取决于查询的灵活性和效率.在IBatis.Net中提供了方便的数据库查询方式. 在Dao代码部分主要有两种方式:1.查询结果为一个对象:                 ISqlMapper sqlMap = sqlMapDaoSession.SqlMap;                return (Account) sqlMap.QueryForObject("GetAccountViaColumnName", 

Hibernate查询方式汇总

Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种.但是细分可以有如下几种: 一.HQL查询方式    这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样.###注意:     在hql中关键字不区分大小写,但是属性和类名区分大小写示例1

009-elasticsearch【三】示例数据导入、URI查询方式简介、Query DSL简介、查询简述【_source、match、must、should等】、过滤器、聚合

一.简单数据 客户银行账户信息,json { "account_number": 0, "balance": 16623, "firstname": "Bradshaw", "lastname": "Mckenzie", "age": 29, "gender": "F", "address": "2

MySQL约束条件和多表查询方式详解

一.约束什么是约束?简述:除了数据类型以外的约束的为什么使用约束?简述:为了保证数据的合法性 完整性:二.约束分类: not null 跟整型时使用其作用是限制插入数据不能为空 create table student (id ind,name char(10) not null); default 默认值(并不是约束)其作用是在于当插入的数据为空的时候使用默认值并不会报错: create table user (id ind,name char(10) not null,sex char(1)

mybatis mapper xml文件的导入方式和查询方式

mybatis mapper xml文件的导入方式和查询方式 ssm框架 Mybatis mapper与SQLSession的关系 每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的.通过SqlSessionFactory可以获得SQLSession实例,然后在其中完全包含了数据库执行SQL命令所需要的所有方法. SQLMapper是由一个Java接口和XML文件构成的,给出一定的SQL和映射规则.负责SQL的执行和返回结果. 通过SQLSession获得Ma

hibernate入门---Hibernate查询方式(for循环、构造器、对象数组等)【第三天,相当于总结整合】

Hibernate查询方式[内连接和外连接不在此篇] 本文讲述的是HQL以及各种情况输出对象的for循环以及构造器的例子,当然这是Hibernate结合一起完成的任务.技术上,离开一些方法,不掌握一些基本的方法,灵活使用,是会带来诸多不便的. 查询方式都在例子里的方法里,我把全部都写在了一个类里,基本思路: 类:Customer->CustomerManager->Demo 配置文件:hibernate.cfg.xml->Customer.hbm.xml 关系: (我们不去考虑什么ses