添加文件
在工程目录下添加 .h; .c; key.h; key.c 四个文件 , 这四个文件可以直接从我的源码中复制过来 。
修改main.c
打开main.c文件将代码修改为如下代码
#include "nrf_delay.h"#include "nrf_log.h"#include "nrf_log_ctrl.h"#include "nrf_log_default_backends.h"#include "systick.h"#include "key.h"/*** @brief Function for application main entry.*/int main(void){NRF_LOG_INIT(NULL);NRF_LOG_DEFAULT_BACKENDS_INIT();SYSTICK_init();KEY_init(SYSTICK_get_tick);NRF_LOG_DEBUG("KEY START");uint8_t keyIndex;while (true){keyIndex = KEY_scan();if(keyIndex){NRF_LOG_DEBUG("KEY: %d", keyIndex);}}}
将程序烧录到芯片后打开RTT调试 , 首先打印输出KEY START信息 , 然后我们按按键的时候相应的动作信息也会通过RTT打印输出 。
文章插图
5 RGB灯的驱动 灯简介
是一个集控制电路与发光电路于一体的智能外控LED光源 。其外型与一个灯珠相同 , 每
个元件即为一个像素点 。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路 , 还包含有高精度的内部振荡器和可编程定电流控制部分 , 有效保证了像素点光的颜色高度一致 。
数据协议采用单线归零码的通讯方式 , 像素点在上电复位以后 , DIN端接受从控制器传输过来的数据 , 首先
送过来的24bit数据被第一个像素点提取后 , 送到像素点内部的数据锁存器 , 剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点 , 每经过一个像素点的传输 , 信号减少24bit 。像素点采用自动整形转发技术 , 使得该像素点的级联个数不受信号传送的限制 , 仅仅受限信号传输速度要求 。
LED具有低电压驱动 , 环保节能 , 亮度高 , 散射角度大 , 一致性好 , 超低功率 , 超长寿命等优点 。将控制电
路集成于LED上面 , 电路变得更加简单 , 体积小 , 安装更加简便 。
这种灯只要串在一起 , 只需要使用单片机的一个引脚通过按照手册中的时序图发送高低电平就可以控制每个灯
文章插图
我们使用的PWM片内外设来实现这种时序 , 通过固定的PWM周期 , 不同的占空比来模拟 0码和1码 。
在官方的SDK中像这类片内外设的硬件抽象层代码都在 SDK//nrfx/文件夹内其中又分为hal和两个层级关系 , hal层的代码是更直接操作硬件寄存器的层是对hal层的更加抽象的再次封装 , 方便大家进行调用 。我们在使用某个片内外设时 , 一般只需要看一下数据手册对这个外设的介绍 , 看看SDK中的例子 , 然后再结合这个外设库的文档就可以进行开发了 。
工程建立
我们把RTT文件夹复制一份并重命名位作为我们本节的工程文件夹 。
修改.h
打开.h文件 , 在其中添加下边的配置宏定义
// PWM peripheral driver#define NRFX_PWM_ENABLED 1#define NRFX_PWM0_ENABLED 1
使能PWM驱动模块和PWM0
修改
打开文件 , 将 和 变量修改为如下代码
# Source files common to all targetsSRC_FILES += \$(PROJ_DIR)/main.c \$(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \$(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \$(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \$(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \$(SDK_ROOT)/components/libraries/util/app_util_platform.c \$(SDK_ROOT)/components/libraries/experimental_memobj/nrf_memobj.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_rtt.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_default_backends.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_frontend.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_str_formatter.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_serial.c \$(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \$(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \$(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \$(SDK_ROOT)/external/fprintf/nrf_fprintf.c \$(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \\$(PROJ_DIR)/ws2812b.c \$(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_pwm.c \$(SDK_ROOT)/components/libraries/util/app_error.c \$(SDK_ROOT)/components/libraries/util/app_error_weak.c \# Include folders common to all targetsINC_FOLDERS += \$(PROJ_DIR) \$(SDK_ROOT)/modules/nrfx \$(SDK_ROOT)/modules/nrfx/mdk \$(SDK_ROOT)/integration/nrfx \$(SDK_ROOT)/components/toolchain/cmsis/include \$(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd \$(SDK_ROOT)/components/libraries/atomic \$(SDK_ROOT)/components/libraries/balloc \$(SDK_ROOT)/components/libraries/delay \$(SDK_ROOT)/components/libraries/strerror \$(SDK_ROOT)/components/libraries/util \$(SDK_ROOT)/components/libraries/experimental_log/src \$(SDK_ROOT)/components/libraries/experimental_log \$(SDK_ROOT)/components/libraries/experimental_memobj \$(SDK_ROOT)/components/libraries/experimental_section_vars \$(SDK_ROOT)/external/fprintf \$(SDK_ROOT)/external/segger_rtt \\$(SDK_ROOT)/modules/nrfx/drivers/include/ \
- 不适合做双眼皮的眼型图片,什么眼型适合割双眼皮
- 蜡丸帛书的解释蜡丸帛书的出处及用法
- 不锈钢铆钉和铝铆钉的区别,不锈钢铆钉铆在不锈钢板上可以吗
- 狼心狗行的解释狼心狗行的出处及用法
- 联床风雨的解释联床风雨的出处及用法
- 不要坐晚上的飞机,小孩坐飞机要不要买票
- 龙血凤髓的解释龙血凤髓的出处及用法
- 不顺的时候怎样摸貔貅,摸了貔貅嘴怎么办
- 令人齿冷的解释令人齿冷的出处及用法
- 力所不逮的解释力所不逮的出处及用法