nRf24le1旺哥整理的代码2 - GPIO - 按键读取
作者:星希望(QQ:411057286)
转载请声明出处
涉及代码文件已上传到本站,搜索 “ nRf24le1旺哥整理的代码 ” ,欢迎留言讨论;
创作背景
最近在搞一个RFID的项目,在短距离(0–5米内)识别电子标签,并能读取出标签的ID号;
迫于无源RFID读写距离太近,所以选择了有源RFID;
在查阅相关资料后,芯片锁定为nRf24LE1
在某宝上购买到开发板后,发现卖家给的资料简直一塌糊涂,遂决心自己编写寄存器驱动;
以下代码仅作为模块化参考,读者们在引用过程中需要根据自身情况做适当修改;
第2课 - 按键读取
代码中本人使用上升沿和下降沿判断的方法来检测案件是否按下或弹起,该方法适合使用定时器定时扫面的应用,没有编写消抖策略;
在实际使用中不建议像小编一样直接在main函数中进行扫描;
直接贴代码:
文件名:key.h
#ifndef Key_H
#define Key_H
#include “sys.h”
#define KEY_1 P15
#define KEY_2 P16
extern u8 key_flg;
extern u8 key_code;
void Key_init(void);
void Key_scan(void);
#endif
/********************** 分 割 线 **********************/
文件名:key.c
/************************************************************************
- 按键驱动(已校验)
- 作者:星希望(QQ:411057286)
- 日期:2019年5月8日
************************************************************************/
#include “Key.h”
u8 key_flg = 0;
u8 key_code = 0;
u8 key_1_last = 1, key_2_last = 1;
/************************************************************************
- 初始化
************************************************************************/
void Key_init(void)
{
P1DIR |= BIT5 + BIT6; // 方向 输入, 0-out,1-input
P1CON &= ~(BIT5 + BIT6); // 第三功能 不使用 0-off,1-on
P1 |= BIT5 + BIT6;
}
/************************************************************************
-
按键扫描
************************************************************************/
void Key_scan(void)
{
if( key_1_last1 && KEY_10 )
{
key_flg = 1;
key_code = 1;
key_1_last = KEY_1;
}
else
{
key_1_last = KEY_1;
}if( key_2_last==1 && KEY_2 == 0 )
{
key_flg = 1;
key_code = 2;
key_2_last = KEY_2;
}
else
{
key_1_last = KEY_1;
}
}
/********************** 分 割 线 **********************/
文件名:main.c
/************************************************************************
- 按键读取
- 作者:星希望(QQ:411057286)
- 日期:2019年5月8日
************************************************************************/
#include “LED.h”
#include “Key.h”
#include “delay.h”
/************************************************************************
-
主函数
************************************************************************/
void main(void)
{
LED_init();
Key_init();while(1)
{
Key_scan();
if( key_flg )
{
switch( key_code )
{
case 1: led_0 = ~led_0; break;
case 2: led_1 = ~led_1; break;
default: break;
}
}
}
}