首页 > 代码库 > NRF51822自学笔记(一) 流水灯
NRF51822自学笔记(一) 流水灯
最近在学nrf51822这个板子,下载程序点灯啥的零零碎碎弄了一天……例程blinky_example中包含了gpio.h和delay.c
看main.c之前我先看了这两个,例程里应用了一个简单不精确的延时函数,用循环内延时微秒函数实现延时毫秒,挺有意思的……
- void nrf_delay_ms(uint32_t volatile number_of_ms)
- {
- while(number_of_ms != 0)
- {
- number_of_ms--;
- nrf_delay_us(999);
- }
- }
void nrf_delay_ms(uint32_t volatile number_of_ms){ while(number_of_ms != 0) { number_of_ms--; nrf_delay_us(999); }}
下面是main
- 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);
- }
- }
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~
NRF51822自学笔记(一) 流水灯
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。