/********************************************************************** * n x 2ms待つ. ********************************************************************** */ void delay2ms(uchar n) { uchar i; for(i=0;i<n;i++) { delay8(250); //2mS } }
static int nrf24_tx_result_wait(void) { uint8_t status; uint16_t count = 10000; /* ~100ms timeout */ status = nrf24_read_status(); /* Reset CE early so that a new Tx or Rx op can start sooner. */ nrf24_ce(0); while ((!(status & (1 << TX_DS)) || (status & (1 << TX_FULL))) && !(status & (1 << MAX_RT)) && --count) { delay8((int) (F_CPU / 8000L * 0.01)); status = nrf24_read_status(); } /* Reset status bits */ nrf24_write_reg(STATUS, (1 << MAX_RT) | (1 << TX_DS)); if (nrf24_in_rx) { nrf24_in_rx = 0; nrf24_rx_mode(); } return (status & (1 << TX_DS)) ? 0 : -1; }
/********************************************************************** * キースキャン: 定時処理 ********************************************************************** */ void keybd_scan() { uchar i,c,trig; // // 一周 回ったあとの処理. // if( scan_cnt>=MAX_SCAN_COLUM) { if( trig_keycnt==1 ) { //検出キーが1つの場合、 keybd_exec(trig_key); //そのキーに対応する処理を実行する. } scan_init(); //次の周回のための変数初期化. return; } // // 逐次処理. // i=scan_cnt; { // DDRD=pulldn_tbl[i+2]; テーブルはSRAMを食うので下のアルゴリズム処理に変更. DDRD=pulldn_tbl(i+2); // プルダウン共通線のLow出力を1本のみセットする. delay8(2); scan_cnt++; c = PINB;c ^= 0xff; c &= MASK; trig = (c & (kb_stat[i] ^ MASK)); //トリガ抽出. // if(trig) keybd_trigger(i,trig); //押された初回のみに反応. if(c) keybd_trigger(i,c); //押されていれば常に反応. kb_stat[i]=c; } }