[SAM4N学习笔记]按键程序(查询方式)
一、准备工作:
将上一节搭建的工程复制一份,命名为“5.key scanf”。这一节主要讲如何使用SAM4N的GPIO输入功能,实现按键的输入。
二、程序编写:
这个程序比较简单,主要实现查询按键的输入状态,首先打开原理图,按键电路如下:

可以看出按键一边连接在PA30上面,一边连接到GND,当按下按键时,PA30管脚的电平会被拉低。
首先要去配置按键为上拉输入。
#define USER_BUTTON (0x01UL<<30)
/************************************************************
*函数名: Key_GPIO_Config()
*参 数 :void
*返回值:void
*功 能 :按键GPIO的初始化函数,使用按键前必须先调用此函数进行初始化
*************************************************************/
void Key_GPIO_Config(void)
{
/*禁止外设管理控制寄存器(PMC)写保护*/
PMC->PMC_WPMR = 0x504D4300;
/*使能PIOA时钟*/
PMC->PMC_PCER0 = (1UL << ID_PIOA);
/*使能外设管理控制寄存器(PMC)写保护*/
PMC->PMC_WPMR = 0x504D4301;
/*使能USER_BUTTON管脚,对应为PA30*/
PIOA->PIO_PER=(USER_BUTTON);
/*禁止USER_BUTTON管脚*/
PIOA->PIO_ODR=(USER_BUTTON);
/*使能USER_BUTTON管脚的上拉电阻,设置为上拉*/
PIOA->PIO_PUER=(USER_BUTTON);
}
第一步,打开PIOA的时钟,接着使能PIOA30的GPIO功能,然后禁止PIOA30的输出,只作为输入功能,接着使能PIOA30的上拉电阻。这样初始化就完成了。
接着要写一个查询按键状态的函数,如下:
/***************************************************************
*函数名: Key_Scan()
*参数 :void
*返回值:uint8_t 返回0为按下,1为没按下
*功能:按键GPIO的初始化函数,使用按键前必须先调用此函数进行初始化
*************************************************************/
uint8_t Key_Scan(void)
{
if(0==(PIOA->PIO_PDSR&USER_BUTTON)) //判断按键是否被按下
{
delay_ms(10); //如果是,延时进行按键软件消抖
if(0==(PIOA->PIO_PDSR&USER_BUTTON)) //再次判断是否是按下
{
//如果是,等待按键松开
while(0==(PIOA->PIO_PDSR&USER_BUTTON));
return 0;
}
return 1;
}
}
首先是去读取PIO_PDSR寄存器,得到PIOA当前的管脚状态,判断PIOA30是否为低电平,如果为低电平则延时消抖,再次判断是否为低电平,如果还是为低电平则判断按键按下有效,等待按键松开。
在main函数中只要定时的去检查这个按键状态即可:
int main(void)
{
systick_hw_init();
led_hw_init();
UART0_Init(115200);
Key_GPIO_Config();
UART0_SendString("this is a key test demo!\r\n");
while(1){
if(Key_Scan()==0){
PIOB->PIO_CODR=(0x01<<LED0_PIN);
UART0_SendString("USER_BUTTON 被按下!\r\n");
delay_ms(200);
}
delay_ms(100);
PIOB->PIO_SODR=(0x01<<LED0_PIN);
}
}
当按下按键时,会打印一个按下的信息到串口,同时LED会亮一下。

[SAM4N学习笔记]按键程序(查询方式)的更多相关文章
- [SAM4N学习笔记]按键程序(中断方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...
- NHibernate3.2学习笔记-几种查询方式
一.开发环境 数据库:SQLServer2008 编译器:VS2010 .Net版本:.Net Framework 4.0 二.开发过程 1.项目结构 承接上一篇 2.执行sql语句 (1)基本语法 ...
- mybatis学习笔记(10)-一对一查询
mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
- SQLServer学习笔记<>相关子查询及复杂查询
二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,coun ...
- Entity Framework学习笔记(四)----Linq查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- [Golang学习笔记] 04 程序实体1 变量声明
变量声明: Go语言的程序实体包含:变量.常量.函数.结构体和接口,是一门静态类型的编程语言. (在声明变量或常量的时候,需要指定类型,或者给予足够信息是的Go语言能够推导出类型) Go语言变量的类型 ...
- [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?
[译]聊聊C#中的泛型的使用(新手勿入) 写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
随机推荐
- HBuilder手机Iphone运行提示“未受信用的企业级开发者”
HBuilder手机Iphone运行提示“未受信用的企业级开发者” 解决方法:设置-----通用------设备管理-----点击Digtial Heaven....---信任"Digtia ...
- AOP学习过程中遇到的问题汇总
jdk版本问题: 在spring较低的版本中,仅支持jdk1.5到1.7版本,由于我本机安装的是jdk1.8,所以在调试的时候就会提示jdk版本要高于1.5.于是换成spring4.0,在co ...
- hibernate符合主键
当有符合主键时,一方与多方的复合主键顺序必须一致: <set> <key> <column name="A" /> <column nam ...
- CentOS系统Apache服务器优化详解
1.Apache优化 Apache能够在CentOS系统正常运行.但是,对于访问量稍大的站点,Apache的这些默认配置是无法满足需求的,我们仍需调整Apache的一些参数,使Apache能够在大访问 ...
- open()函数
STDOUT_FILENO 1 标准输入 STDIN_FILENO 0 标准输出 STDERR_FILENO 2 标准错误 在/proc目 ...
- js 中用Dom2级事件处理函数(改变样式)
下面这些客户端 javascript代码用到了事件,它给一个很重要的事件--“load" 事件注册了一个事件处理程序.同时展示了注册”click“事件处理函数更高级的一种方法 <!do ...
- FastCgi与PHP-fpm关系[转] 读完本文瞬间明朗了很多
刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...
- SDUT 1305 查找基因序列问题 dp
题目: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1305 这个题就是一个类似公共子串的dp ...
- ajax error函数
老是去百度 还是自己记下来吧 $.ajax({ url: '/AJAX请求的URL', success: function (data) { alert(data); }, error: functi ...
- EF4 Code First和EF6 Code First链接mysql的方法
1.首先需要下载安装.Net的Mysql驱动 下载地址如下:http://dev.mysql.com/downloads/connector/net/ 2.配置Web.Config EF6: 配置链接 ...