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.   
  5.   // Configure LED-pins as outputs  
  6.   nrf_gpio_range_cfg_output(LED_START,LED_STOP);  
  7.   
  8.   while(true)  
  9.   {  
  10.     nrf_gpio_port_write(LED_PORT, 1 << (output_state + LED_OFFSET));  
  11.     output_state = (output_state + 1) &STATE_MASK;  
  12.     nrf_delay_ms(100);  
  13.   }  
  14. }  
 
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~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM