////////////////////////////////////////////////////////// // 01.09.07 // // NEN6 // ////////////////////////////////////////////////////////// // config: HS // // (3F76) PowerUpTimer // // BrownOutDetect // // FlashProgramEnable // // WatchDogTimer // ////////////////////////////////////////////////////////// #include <16f876.h> #use delay(CLOCK=8000000) //#use fast_io(a) //#use fast_io(b) //#use fast_io(c) #use standard_io(a) #use standard_io(b) #use standard_io(c) //////// Opening Message Select #define Prius //#define StepWGN #ifndef Prius #ifndef StepWGN #define No_Opening #endif #endif //#define OLD //////// Port define and link LCD library ///////////// #byte port_a = 5 //ポートAアドレス #byte port_b = 6 //ポートBアドレス #byte port_c = 7 //ポートCアドレス #byte tmr1l = 0x0e //タイマ1Lアドレス #byte tmr1h = 0x0f //タイマ1Hアドレス #byte t1con = 0x10 //タイマ1コントロール #byte tmr0 = 0x01 //タイマ0アドレス #ifdef OLD #define TRIS_A 0x12 #define den pin_a0 //電源コントロール #define pin_IG 1 #else #define TRIS_A 0x11 #define den pin_a1 //電源コントロール #define pin_IG 0 #endif #define rs PIN_c3 //chip select #define stb PIN_c2 //strobe #define pull_up pin_a2 //speedプルアップ用 #define red pin_b5 //赤LED #define green pin_b6 //緑LED #define led_k pin_b2 //led カソード /////////// 表示内容の宣言 ////////////////////// #define jyoudan 0x10 //上段表示data #define gedan 0x00 //下段表示data #define gedan_noopt 0xff //下段表示data(オプション無し) #define kukan 0x01 //下段区間燃費表示 #define bar1 0x02 //下段棒グラフ付き #define bar2 0x03 //下段棒グラフ短 #define nen_bar1 0x04 //下段燃費グラフ×1 #define nen_bar2 0x05 //下段燃費グラフ×2 #define nen_bar1_s 0x06 //下段燃費グラフ×1 短 #define nen_bar2_s 0x07 //下段燃費グラフ×2 短 //********** EEPROM ADDRESS ******************* #define ee_inj0 0x00 //タイマ1Lと同じ #define ee_inj1 0x01 //タイマ1Hと同じ #define ee_inj2 0x02 #define ee_inj3 0x03 #define ee_inj4 0x04 #define ee_speed0 0x05 //タイマ0と同じ #define ee_speed1 0x06 #define ee_speed2 0x07 #define ee_speed3 0x08 #define ee_hosei_l 0x09 //燃費補正値L #define ee_hosei_h 0x0a //燃費補正値H #define ee_content_u 0x0b //表示内容上段選択用 #define ee_content_l 0x0c //表示内容下段選択用 #define ee_opt 0x0d //下段表示オプション #define ee_section 0x0e //区間選択用 #define ee_plsk 0x0f //スピードパルス計数 #define ee_inj0_1 0x20 //履歴データ -1 #define ee_inj1_1 0x21 #define ee_inj2_1 0x22 #define ee_inj3_1 0x23 #define ee_inj4_1 0x24 #define ee_speed0_1 0x25 #define ee_speed1_1 0x26 #define ee_speed2_1 0x27 #define ee_speed3_1 0x28 #define ee_inj0_2 0x30 //履歴データ -2 #define ee_inj1_2 0x31 #define ee_inj2_2 0x32 #define ee_inj3_2 0x33 #define ee_inj4_2 0x34 #define ee_speed0_2 0x35 #define ee_speed1_2 0x36 #define ee_speed2_2 0x37 #define ee_speed3_2 0x38 #define ee_inj0_3 0x40 //履歴データ -3 #define ee_inj1_3 0x41 #define ee_inj2_3 0x42 #define ee_inj3_3 0x43 #define ee_inj4_3 0x44 #define ee_speed0_3 0x45 #define ee_speed1_3 0x46 #define ee_speed2_3 0x47 #define ee_speed3_3 0x48 #rom 0x2100={0x00,0x00,0x00,0x00,0x00, //4_23 18:00 0x00,0x00,0x00,0x00, 0x90,0x01, //計数=259(l,h) 0x03,0x04,0x01, //上段・下段・オプション 0x01,0x04} //区間・パルス×n //************ DATA RAM ADDRESS ************* int unit_t_inj[5]; //瞬間消費燃料用 char unit_t_bcd[3]; //瞬間消費燃料表示用 int inj[5]; //通算測定値 int inj_ini[5]; //起動時の測定値 int speed[4]; //通算測定値 int speed_ini[4]; //起動時の測定値 char bcd[10]; //BCD変換結果用 int stor[4]; //演算用 int syori[4]; //演算用 int to_gas[4]; //当日消費燃料 int m_gas[4]; //通算消費燃料 int to_dist[4]; //当日距離 int m_dist[4]; //通算距離 int section_dist[4];//区間距離 int section_gas[4]; //区間消費燃料 char section_lcd[11];//区間燃費用 int kilo_h; //区間計数H int kilo_l; //区間計数L int content_u; //表示内容上段選択用 int content_l; //表示内容下段選択用 int opt; //下段表示オプション用 int section; //区間選択用 int flag; //区間表示用フラグ int msec1_h; //1mSecタイマーH int msec1_l; //1mSecタイマーL int nenr_h; //燃料計算計数H int nenr_l; //燃料計算計数L char lcd_data[16]; //表示用 int position; //表示位置 int inj_t[5]; //インジェクタ時間用 char inj_t_bcd[3]; //インジェクタ表示用 int inj_t_over; //噴射停止監視用 signed int sec; //時計 秒 signed int minute; //時計 分 int plsk; //スピードパルス計数 int syun[4]; //瞬間燃費 char syun_bcd[3]; //瞬間燃費表示用 int injl_over; //インジェクタLタイムオーバー監視 int check_injs; //起動時チェック用 #include "ne6_lcd951.inc" //lcd関連関数 #include "ne6_enz.inc" //演算関係関数 #include "ne6_eepi.inc" //EEPROM & int関係 #include "ne6_kei.inc" //測定値計算 #include "ne6_set.inc" //初期設定・オープニング処理 #include "ne6_pri.inc" //表示データ作成 #include "ne6_inte.inc" //M・Mインターフェース ////////////////////////////////////////////////////////////////////////// main() { int i; //入力ダミー用 init_io(); // I/O 初期設定 init_data(); // データ 初期設定 #ifndef No_Opening opening(); // オープニング表示 #endif lcd_ubar(); //全塗りつぶしキャラクタ登録 while(1){ restart_wdt(); //WDTリセット output_high(pull_up); //speed pull_up H enable_rb47(); //injがHならRB4-7割り込み許可 i = input(pin_a4); //speed信号 ダミー入力 i = input(pin_c0); //100KHz信号 ダミー入力 i = input(pin_b0); //1Hz信号 ダミー入力 enable_interrupts(int_timer1); // タイマ1割り込み許可 enable_interrupts(int_timer2); // タイマ2割り込み許可 enable_interrupts(ext_int); // rb0よる割り込み許可 enable_interrupts(rtcc_zero); // タイマ0割り込み許可 enable_interrupts(global); // 全割り込み許可 //-------- 測定・計算 -------------------------------------- inj_stor(); //injカウント m_gas_peration(); //通算消費燃料(リットル÷1000) to_gas_peration(); //当日消費燃料(リットル÷1000) speed_stor(); //SPEEDカウント m_dist_peration(); //通算距離(m÷100) to_dist_peration(); //当日距離(m÷100) inj_time(); //インジェクタ開時間 //------------------------------------------------------------ if(ig_off()) //IGオフチェック syuuryo(); //OFFなら終了(設定)へ print_ma(jyoudan,content_u); //上段表示 print_ma(gedan,content_l); //下段表示 } //while(1) } //main