NRF51822自学笔记(一) 流水灯

最近在学nrf51822这个板子,下载程序点灯啥的零零碎碎弄了一天……例程blinky_example中包含了gpio.h和delay.c

看main.c之前我先看了这两个,例程里应用了一个简单不精确的延时函数,用循环内延时微秒函数实现延时毫秒,挺有意思的……

  1. void nrf_delay_ms(uint32_t volatile number_of_ms)
  2. {
  3. while(number_of_ms != 0)
  4. {
  5. number_of_ms--;
  6. nrf_delay_us(999);
  7. }
  8. }
void nrf_delay_ms(uint32_t volatile number_of_ms)
{
  while(number_of_ms != 0)
  {
    number_of_ms--;
    nrf_delay_us(999);
  }
}

下面是main

  1. int main(void)
  2. {
  3. uint8_t output_state = 0;
  4. // Configure LED-pins as outputs
  5. nrf_gpio_range_cfg_output(LED_START,LED_STOP);
  6. while(true)
  7. {
  8. nrf_gpio_port_write(LED_PORT, 1 << (output_state + LED_OFFSET));
  9. output_state = (output_state + 1) &STATE_MASK;
  10. nrf_delay_ms(100);
  11. }
  12. }
int main(void)
{
  uint8_t output_state = 0;

  // Configure LED-pins as outputs
  nrf_gpio_range_cfg_output(LED_START,LED_STOP);

  while(true)
  {
    nrf_gpio_port_write(LED_PORT, 1 << (output_state + LED_OFFSET));
    output_state = (output_state + 1) &STATE_MASK;
    nrf_delay_ms(100);
  }
}

LED_OFFSET=2,也就是说nrf_gpio_port_write()STATE_MASK,每经历一次while循环output_state的值加1,第二次循环中便有1<<3=1000,初始化了第二个灯gpio pin 19。

STATE_MASK即为取其最后一位,所以在这个条件下,修改LED_START和LED_STOP的值(修改初始化范围)最多只能点亮18,19两个灯,若要点亮其他灯(最多仍然两个)则需修改LED_OFFSET的值,来改变你第一个要点亮的灯。

若要点亮多个灯则需修改STATE_MASK的值,若改为0x07即0111,会看到五个灯流水点亮0.0~

时间: 2024-08-26 20:51:15

NRF51822自学笔记(一) 流水灯的相关文章

NRF51822自学笔记(二)PWM

PWM这个东西我在32上用来电机调速过……通过改变高低电平占空比来实现一些功能. keil的nrf51822目录下没有pwm.c..就在网上找了个pwm蜂鸣器的例程……看画风应该是官方的……吧…… 例程的define为NRF51 SETUPA BOARD_PCA10028..修改一下,设置如下. 然后通过两个灯来实现一下两路pwm波……pin为20和21的LED_2和LED_3 先看main.c(非例程) [cpp] view plain copy print? #include <stdboo

nrf51822自学笔记(五)蜂鸣器

蜂鸣器的资料网上也有很多--这里就简单记录一下--有有源蜂鸣器和无源蜂鸣器两种 这里我用的是无源蜂鸣器的模块 ,自带了放大电路,否则要自己焊一个-- 这里我设想的是用不同频率的pwm波驱动蜂鸣器发出不同频率的乐音,对于钢琴上的 CDEFGAB. 一共搞了两个程序,第一个没有实现功能 ,第二个实现了. (一)只能输出固定频率可调占空比的pwm波形 nrf_pwm.c #include "nrf_gpiote.h" #include "nrf_gpio.h" #if(U

Nios学习笔记2——流水灯实验

回到quartus,我们新建一个Verilog文件,将之前复制的代码粘贴进去,保存文件为led.v.为了后面的编译,需要将nioscpu的Quartus IP File(.qip)加入项目中,点击Assignments->Settings,在File中将nioscpu.qip加入,如下图所示,点击Add,再点击OK. 接下来,我们建立锁相环PLL,给Nios提供时钟. 单击Tools->MegaWizard Plug-In Manager,点击Next,如图所示,搜索PLL,选择ALTPLL,

【黑金教程笔记之003】【建模篇】【Lab 02 闪耀灯和流水灯】—笔记

(1)       扫描频率和闪耀频率? 模块: /**************************************** module name:flash_module function:flash a led at 10Hz by yf.x 2014-11-4 ***************/ module flash_module( CLK, RST_n, LED ); input CLK,RST_n; output LED; /************************

第一个FPGA工程—LED流水灯

这一章我们来实现第一个FPGA工程-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序.掌握本章内容,大家就算正式的开始入门FPGA开发了. 1.1.1.电路说明 1.1.2.新建工程 第一步:从开始菜单启动Quartus II 13.1(64 bit) ,如下图. 第二步:菜单栏选择File->New Project Wizard,新建工程. 第三步:弹出新建工程对话框,点击Next,下一步. 第三步:如下图,依次

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void m

永远的流水灯(Verilog)

1. 为了更好地学习FPGA和深入理解Verilog语法,首先从最简单的流水灯做起.虽然简单,但是也包含了不少知识.通过这次实验项目,可以了解开发软件的使用及Verilog的编程方法,熟悉模块化设计的方法. 2. 该项目主要实现的功能为: (1)10位的流水灯 (2)中间两个led灯每隔100ms闪烁一次 (3)两边的led灯每隔100ms流动一下,从中间向两边流水. 3.  具体实现如下 (1)首先定义一个时间计数寄存器counter,每当达到预定的100ms时,计数寄存器就清零,否则的话寄存

斯坦福大学机器学习(Andrew [email&#160;protected])--自学笔记

今天学习Andrew NG老师<机器学习>之6 - 6 - Advanced Optimization,做笔记如下: 用fminunc函数求代价函数最小值,分两步: 1.自定义代价函数 function [jVal,gradient] = costFunction(theta)jVal = (theta(1)-5)^2 + (theta(2)-5)^2;gradient = zeros(2,1);gradient(1) = 2*(theta(1)-5);gradient(2) = 2*(the

Qt利用代码实现流水灯的效果

用代码实现流水灯的效果 其实很想实现这种流水灯的效果了,看起来挺酷的,用处也很多,只是开始没有思路不知道怎么去实现,于是在我的超市收银项目中就采用了图片加载的方式进行显示,效果如下图所示: 由于是动态图片,显示的时候就要用到QMovie进行加载,简单的代码如下所示: QMovie *move = new QMovie(":/images/splash.gif"); QLabel *label = new QLabel("",0); label->setWind