亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lib_nrf6350.c

?? 非常全的nrf2401設計資料
?? C
字號:
/* Copyright (c) 2008 Nordic Semiconductor. All Rights Reserved.
 *
 * The information contained herein is property of Nordic Semiconductor ASA.
 * Terms and conditions of usage are described in detail in NORDIC
 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. 
 *
 * Licensees are granted free, non-transferable use of the information. NO
 * WARRENTY of ANY KIND is provided. This heading must NOT be removed from
 * the file.
 *
 * $LastChangedRevision$
 */ 

/** @file
 *
 * @author Rune Brandsegg
 *
 */

#include <Nordic\reg24le1.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "nordic_common.h"
#include "lib_nrf6350.h"

#define DDRAM_ADR     0x80      // Write to DDRAM AC
#define DDRAM_WR      0x40      // Write to DDRAM
#define FUNC_SET      0x00      // Enter LCD Function settings
#define LCD_ADDR      0x3E      // LCD display adr
#define JS_ADDR       0x3F      // Joystick adr

#define X 0                     // Contents in joystick array
#define Y 1

void w2_master_init(hal_w2_clk_freq_t clock_mode);
void w2_master_rx_data(uint8_t slave_addr, uint8_t *buffer);
void w2_master_tx_data(uint8_t slave_addr, uint8_t *buffer, uint8_t length);
void delay_ms(uint16_t ms);
void delay_10us(uint8_t us);

static bool w2_init = false;

void lcd_init(void)
{ 
  if(!w2_init)
  {
    w2_master_init(HAL_W2_400KHZ);                // System 2-Wire to master
    w2_init = true;
  }
                      
  lcd_set_instruction(0x38);                      // Function set
  lcd_set_instruction(0x39);                      // Choose two-line mode
  lcd_set_instruction(0x14);                      // Internal OSC frequency
  lcd_set_contrast(LCD_CONTRAST_HIGH);            // Contrast set (low byte)
  lcd_set_instruction(0x5F);                      // Power/ICON control/
                                                  // Contrast set (high byte)
  lcd_set_instruction(0x6A);                      // Follower control
  delay_ms(200);

  lcd_on();                                       // Display ON
  lcd_clear();                                    // Clear display
  lcd_set_instruction(0x06);                      // Entry mode set    
}                                                                    

void lcd_write_string(char *text, uint8_t line, uint8_t pos)
{
  char str[18];
  uint8_t buffer[2];
  uint8_t i;
  
  delay_ms(10);

  if(line == 0)
  { 
    line = 0x00;                                  // Upper row of LCD display
  }
  else
  {
    line = 0x40;                                  // Lower row of LCD display
  }

  if(pos > 15) pos = 16;                          // Write to visible positions

  buffer[0] = FUNC_SET;                           // Enter function setting
  buffer[1] = DDRAM_ADR + (pos + line);           // LCD adr counter set to pos
  w2_master_tx_data(LCD_ADDR, buffer, 2)  ;       // Write the settings to the 
                                                  // LCD display
  for(i=0;i<17;i++)                               // Save text in a new string
  {                                               // with space for function
    str[i+1] = text[i];                           // setting
  }
  str[0] = DDRAM_WR;                                  // Enter function setting
  w2_master_tx_data(LCD_ADDR, str, strlen(text) + 1); // Transmit string to LCD
}

void lcd_clear(void)
{ 
  uint8_t buffer[2];
  delay_ms(10);
  buffer[0] = FUNC_SET; 
  buffer[1] = 0x01;                               // Clear display
  w2_master_tx_data(LCD_ADDR, buffer, 2);
  delay_ms(10);   
}

void lcd_set_contrast(lib_nrf6350_lcd_contrast_t contrast)
{
  uint8_t buffer[2];
  delay_ms(10);
  buffer[0] = FUNC_SET; 
  buffer[1] = 0x70 | contrast;                    // Contrast set (low byte)
  w2_master_tx_data(LCD_ADDR, buffer, 2);
  delay_ms(10);
}

void lcd_set_instruction(uint8_t instr)
{
  uint8_t buffer[2];
  delay_ms(10);
  buffer[0] = FUNC_SET; 
  buffer[1] = instr;                              // Instr. set
  w2_master_tx_data(LCD_ADDR, buffer, 2);
  delay_ms(10);
}

void lcd_on(void)
{
  uint8_t buffer[2];
  delay_ms(10);
  buffer[0] = FUNC_SET; 
  buffer[1] = 0x0C;                               // Display ON
  w2_master_tx_data(LCD_ADDR,&buffer[0],2);
  delay_ms(10);
}

void lcd_off(void)
{
  uint8_t buffer[2];
  delay_ms(10);
  buffer[0] = FUNC_SET; 
  buffer[1] = 0x08;                               // Display OFF
  w2_master_tx_data(LCD_ADDR, buffer, 2);
  delay_ms(10);
}

void js_get_value(int8_t *val)
{
  uint8_t js_data;
  uint8_t rx_buffer[1];
  if(!w2_init)
  {
    w2_master_init(HAL_W2_400KHZ);                // System 2-Wire to master
    w2_init = true;
  }   
  delay_10us(10);
  w2_master_rx_data(JS_ADDR, rx_buffer);          // Get data from the joystick
  js_data = (~rx_buffer[0] & 0x1D);               // Select the useful bits
 
  if((js_data & BIT_0) == BIT_0)                  // Check joystick position
  {
    val[X] = -1;
  }
  else if((js_data & BIT_4) == BIT_4)
  {
    val[X] = 1;
  } 
  else
  {
    val[X] = 0;
  }
  
  if((js_data & BIT_2) == BIT_2)
  {
    val[Y] = 1;
  }
  else if((js_data & BIT_3) == BIT_3)
  {
    val[Y] = -1;
  }
  else
  {
    val[Y] = 0;
  }
}

bool js_button_pushed(void)
{
  uint8_t js_data;
  uint8_t rx_buffer[1];
  if(!w2_init)
  {
    w2_master_init(HAL_W2_400KHZ);                // System 2-Wire to master
    w2_init = true;
  }    
  delay_10us(10);   
  w2_master_rx_data(JS_ADDR, rx_buffer);          // Get data from the joystick
  js_data = (~rx_buffer[0] & BIT_1);              // Mask button bit
         
  return (js_data == BIT_1);                      // Check if button is pushed
}

void w2_master_init(hal_w2_clk_freq_t clock_mode)
{  
  hal_w2_enable(true);                     // Enable i2c
  hal_w2_set_clk_freq(clock_mode);         // Set the clock frequency
  hal_w2_set_op_mode(HAL_W2_MASTER);       // Set system to master mode
  INTEXP |= BIT_2;                         // Enable 2 wire interrupts
  hal_w2_all_irq_enable(true);             // Enable interrupts in the 2-wire  
}

void w2_master_rx_data(uint8_t slave_addr, uint8_t *buffer)
{
  uint8_t i = 0;
      
  hal_w2_transmit_start_cond();            // Transmit start condition    
  hal_w2_write_data((slave_addr << 1)|BIT_0); // Write the adress to listen to,
                                              // and set the direction bit to 1
 
  while(!SPIF)                             // Wait for ack
    ;
  SPIF = 0;                                // Clear the interrupt flag
      
  if(hal_w2_get_status() & BIT_1)          // Check the acknowledge received
  {   
    return;   
  }
   
  while(i == 0)
  {     
    while(!SPIF)                           // Wait until 2-Wire irq flag is set
      ;
    i = hal_w2_get_status();               // Store the status from the 2-Wire
    SPIF = 0;                              // Clear the interrupt flag
    if(!(i & BIT_0))                       // Check dataReady bit for interrupt 
    {
      i = 0;                               // Clear the stored status
    }
  }
  hal_w2_transmit_stop_cond();             // Transmit stop condition   
  buffer[0] = hal_w2_read_data();          // Read received data
}                                                     

void w2_master_tx_data(uint8_t slave_addr, uint8_t *buffer, uint8_t length)
{ 
  uint8_t i;
  uint8_t j = 0;
  
  hal_w2_transmit_start_cond();            // Transmit start condition
                                        
  hal_w2_write_data(slave_addr << 1);      // Write the address to transmit to
   
  while(!SPIF)                             // Wait for ack
    ;
  SPIF = 0;                                // Clear the interrupt flag

  if(hal_w2_get_status() & BIT_1)          // Check the acknowledge received
  { 
    return;   
  }

  for(i = 0; i < length; i++)              // Go through the data array
  {   
    hal_w2_write_data(buffer[i]);          // Write data to the 2-Wire
    if(i == (length - 1))                  // If all data is sent
    {                                                 
      hal_w2_transmit_stop_cond();         // Transmit stop condition
    }
    while(j == 0)
    {
      while(!SPIF)                         // Wait until 2-Wire irq flag is set
        ;
      j = hal_w2_get_status();             // Store the status from the 2-Wire
      SPIF = 0;                              // Clear the interrupt flag
      if(!(j & BIT_0))                     // Check dataReady bit for interrupt
      { 
        j = 0;                             // Clear the stored status
      }
    }
  delay_10us(4);                           // Short hold
  }
}

void delay_ms(uint16_t ms)
{
  uint16_t i, cnt;
  for(i = 0; i < ms; i++)
  {
    cnt = 1137;
    while(cnt--)
      ;
  }
}

void delay_10us(uint8_t us)
{
  uint8_t i, cnt, cnt2;
  for(i = 0; i < us; i++)
  {
    cnt = 4;
    while(cnt--)
    {
      cnt2 = 1;
      while(cnt2--)
        ;
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线一区二区三区| 欧美午夜电影一区| 成人高清在线视频| 欧美三级电影网站| 国产三级欧美三级| 中文字幕的久久| 亚洲激情图片小说视频| 一区二区成人在线观看| 国产精品一区二区视频| 欧美日韩精品综合在线| 久久久www免费人成精品| 亚洲高清免费一级二级三级| 国内精品在线播放| 51精品久久久久久久蜜臀| 中文字幕一区二区三区精华液 | 夜夜精品视频一区二区| 精品一区二区三区免费观看| 欧美中文字幕一区二区三区| 日韩免费高清av| 亚洲激情图片一区| 99久久精品免费观看| 精品国产乱子伦一区| 性欧美疯狂xxxxbbbb| 成人18视频在线播放| 精品欧美久久久| 香蕉加勒比综合久久| 91网站最新地址| 中文字幕不卡在线| 国产成人综合亚洲网站| 在线综合视频播放| 亚洲午夜免费电影| 日本道色综合久久| 成人免费在线观看入口| 波多野结衣一区二区三区| 欧美国产国产综合| 国产寡妇亲子伦一区二区| 欧美sm美女调教| 老色鬼精品视频在线观看播放| 欧美亚洲综合另类| 一区二区三区四区高清精品免费观看 | 久久午夜免费电影| 久久福利资源站| 欧美大片日本大片免费观看| 奇米影视一区二区三区小说| 欧美美女bb生活片| 亚洲成人在线免费| 欧美日韩一区二区三区高清| 亚洲天堂精品在线观看| 成人18视频日本| 久久久五月婷婷| 国产成人av电影在线播放| 久久综合一区二区| 青青草国产精品97视觉盛宴| 欧美一区二区在线免费观看| 日本一区中文字幕 | 亚洲欧美中日韩| 懂色av一区二区夜夜嗨| 国产精品毛片久久久久久久| 成人性生交大片| 亚洲欧美一区二区三区极速播放| 99视频一区二区| 亚洲一区二区在线免费观看视频| 欧美在线不卡视频| 亚洲精品乱码久久久久久久久 | 免费在线观看不卡| 久久久国产精品麻豆| 懂色av一区二区三区免费观看| 国产日本欧美一区二区| 色综合中文字幕国产| 亚洲精品高清在线| 欧美一区二区免费| 国产乱码精品一区二区三区av | 欧美一区二区三区性视频| 久久成人麻豆午夜电影| 国产三级三级三级精品8ⅰ区| 91原创在线视频| 午夜成人免费视频| 欧美日韩一卡二卡| 午夜私人影院久久久久| 26uuu成人网一区二区三区| 国产一区久久久| 国产精品成人免费精品自在线观看| 91女人视频在线观看| 青青国产91久久久久久| 中文字幕不卡的av| 欧美精品tushy高清| 国产91对白在线观看九色| 亚洲国产裸拍裸体视频在线观看乱了 | 91一区二区在线观看| 免费高清在线视频一区·| 中文字幕一区二区视频| 欧美一级电影网站| 91日韩一区二区三区| 九一久久久久久| 亚洲一二三四久久| 中文字幕乱码日本亚洲一区二区| 欧美日韩aaaaaa| 99久久99久久精品国产片果冻| 亚洲444eee在线观看| 亚洲婷婷在线视频| 国产亚洲综合性久久久影院| 欧美猛男超大videosgay| 国产成人免费9x9x人网站视频| 亚洲国产精品精华液网站| 精品福利一二区| 欧美视频日韩视频| 国产自产视频一区二区三区| 亚洲一区二区三区四区在线观看 | 欧美一区二区三区白人 | 精品一区二区成人精品| 亚洲午夜久久久久中文字幕久| 欧美高清一级片在线观看| 日韩美女视频在线| 欧美在线一区二区| 国产精品一区三区| 毛片基地黄久久久久久天堂| 中文字幕中文在线不卡住| 精品国产免费一区二区三区香蕉| 欧美日韩午夜影院| 在线观看日产精品| 色婷婷激情综合| 91一区二区在线观看| 成人妖精视频yjsp地址| 国产一区二区免费视频| 国产一区在线视频| 韩国女主播成人在线| 另类人妖一区二区av| 亚洲国产精品一区二区www| 亚洲一二三四久久| 亚洲成av人影院在线观看网| 亚洲一区二区三区激情| 尤物在线观看一区| 午夜av一区二区三区| 日韩av网站免费在线| 久久精品国产99久久6| 国产做a爰片久久毛片| 国产精品一区二区你懂的| 国产成人自拍网| av一区二区三区四区| 色综合久久88色综合天天6| 99免费精品在线观看| 色偷偷一区二区三区| 日本丶国产丶欧美色综合| 欧美日本韩国一区二区三区视频 | 日本一区二区三级电影在线观看 | 玉足女爽爽91| 亚洲va国产va欧美va观看| 天堂成人国产精品一区| 六月婷婷色综合| 国产精品99久久久| 99国产精品久久久久久久久久| 99久久99久久精品国产片果冻| 色久优优欧美色久优优| 欧美精品日韩精品| 久久久国际精品| 亚洲精品日产精品乱码不卡| 亚洲成人动漫精品| 狂野欧美性猛交blacked| 国产一区在线精品| 成人丝袜高跟foot| 欧美亚洲丝袜传媒另类| 欧美v亚洲v综合ⅴ国产v| 国产精品卡一卡二卡三| 五月天亚洲婷婷| 国产精品亚洲第一区在线暖暖韩国| www.在线欧美| 欧美色中文字幕| 国产日韩在线不卡| 久久国产尿小便嘘嘘尿| 在线观看亚洲a| 国产精品毛片无遮挡高清| 精品一区二区三区欧美| 欧美日韩在线播放一区| 国产精品护士白丝一区av| 国产精品综合二区| 日韩一区二区不卡| 亚洲va欧美va人人爽| 色综合久久综合网欧美综合网 | 精品久久久久久久久久久久久久久久久| 国产精品免费网站在线观看| 久久福利视频一区二区| 欧美日韩电影一区| 亚洲国产精品麻豆| 日本伦理一区二区| ...av二区三区久久精品| 成人免费看视频| 欧美国产精品劲爆| 国产成人在线视频播放| 精品国产91亚洲一区二区三区婷婷| 日日夜夜免费精品| 欧美日韩日日骚| 天堂成人国产精品一区| 欧美另类videos死尸| 亚洲国产精品一区二区久久| 色老汉av一区二区三区| 亚洲主播在线观看| 欧美性受xxxx黑人xyx| 五月婷婷色综合| 91麻豆精品国产| 久久er99热精品一区二区|