; ------------------------------------------------------------------- ; 表示 ; ------------------------------------------------------------------- ; 瞬間系 信号間 起動から ; ; 燃費 燃費 燃費 ; 速度 平均速度 平均速度 ; 燃料 距離 距離 ; 時間 時間 ; ; 000 00.0 00.0 ; 000 000.0 000.0 ; 000.00 000.00 ; 000 000:00 000:00 ; 01234567890123456789 print ; カーソルを1行目に移動 bcf RS ; RS='L' movlw B'10000000' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 btfsc flag,2 ; 前回値表示中フラグON? goto print_1 ; ON なら prev表示 ; OFF なら 通常表示 call fu_print ; 瞬間燃費表示 movlw ' ' call write_lcd_data call write_lcd_data goto print_2 print_1 ; ON なら prev 表示 movlw 'p' call write_lcd_data movlw 'r' call write_lcd_data movlw 'e' call write_lcd_data movlw 'v' call write_lcd_data movlw ' ' call write_lcd_data print_2 call futs_print ; 区間燃費表示(信号間) movlw ' ' call write_lcd_data call write_lcd_data call write_lcd_data call fut_print ; 区間燃費表示 ; カーソルを2行目に移動 bcf RS ; RS='L' movlw B'11000000' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call speed_print ; 速度表示 movlw ' ' call write_lcd_data call avgsps_print ; 平均速度表示(信号間) movlw ' ' call write_lcd_data call write_lcd_data call avgsp_print ; 平均速度表示 ; カーソルを3行目に移動 bcf RS ; RS='L' movlw B'10010100' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 movlw ' ' call write_lcd_data call write_lcd_data call write_lcd_data call write_lcd_data call odds_print ; 走行距離表示(信号間) movlw ' ' call write_lcd_data call odd_print ; 走行距離表示 ; カーソルを4行目に移動 bcf RS ; RS='L' movlw B'11010100' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call fu_print_time ; 燃費cc/min表示 movlw ' ' call write_lcd_data call times_print ; 時間表示(信号間) movlw ' ' call write_lcd_data call time_print ; 時間表示 ;call spcout_print ; 車速パルスカウント表示 ;call fuelcout_print ; 燃料パルスカウント表示 return ;■瞬間系 --> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 速度表示 speed_print movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto sp_print_0 ; 0km/h と判断されたら、計算しない ; 速度計算(通常走行時) movf speed_tm+1,W movwf src2+1 movf speed_tm+0,W movwf src2+0 movlw SPEEDFACT_H ;係数 movwf src1+1 movlw SPEEDFACT_L ;係数 movwf src1+0 call div16 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 ;movlw 'k' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data ;movlw '/' ;call write_lcd_data ;movlw 'h' ;call write_lcd_data goto sp_print_e sp_print_0 ; idle movlw ' ' call write_lcd_data movlw ' ' call write_lcd_data movlw '0' call write_lcd_data ;movlw 'e' ;call write_lcd_data ;movlw ' ' ;call write_lcd_data ;call write_lcd_data ;call write_lcd_data sp_print_e return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 瞬間燃費表示 (000cc/m or f-c) fu_print_time movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto fu_print_ccpmin ; 停止中は必ず cc/min 表示 movlw FUEL_FC_FLOW_MAX ^ 0ffh addwf fuel_flow,0 btfsc STATUS,C goto fu_print_fc ; 走行中で fuel cut と判断されたら f-c goto fu_print_ccpmin ; 通常時? は cc/min 表示 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 瞬間燃費表示 (000km/l or stp or f-c) fu_print movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto fu_print_stop ; 0km/h と判断されたら movlw FUEL_FC_FLOW_MAX ^ 0ffh addwf fuel_flow,0 btfsc STATUS,C goto fu_print_fc ; fuel cut と判断されたら ; 瞬間燃費計算 movf fuel_tm+1,W movwf src1+1 movf fuel_tm+0,W movwf src1+0 movf speed_tm+1,W movwf src2+1 movf speed_tm+0,W movwf src2+0 call div16 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 ;movlw 'k' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data ;movlw '/' ;call write_lcd_data ;movlw 'l' ;call write_lcd_data goto fu_print_e fu_print_ccpmin ; cc/min 表示 movlw FUELFACT_H ;係数 movwf src1+2 movlw FUELFACT_M ;係数 movwf src1+1 movlw FUELFACT_L ;係数 movwf src1+0 ;movlw 0 clrf src2+2 movf fuel_tm+1,W movwf src2+1 movf fuel_tm+0,W movwf src2+0 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 ;movlw 'c' ;call write_lcd_data ;movlw 'c' ;call write_lcd_data ;movlw '/' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data goto fu_print_e fu_print_fc movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto fu_print_stop ; 0km/h と判断されたら ; f-c 表示 movlw 'f' call write_lcd_data movlw '-' call write_lcd_data movlw 'c' call write_lcd_data ;movlw ' ' ;call write_lcd_data ;call write_lcd_data ;call write_lcd_data ;call write_lcd_data goto fu_print_e fu_print_stop ; stop 表示 movlw '-' call write_lcd_data movlw '-' call write_lcd_data ;movlw '-' ;call write_lcd_data movlw '-' call write_lcd_data ;movlw ' ' ;call write_lcd_data ;call write_lcd_data ;call write_lcd_data ;goto fu_print_e fu_print_e return ;■瞬間系 <-- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 区間燃費表示 fut_print ; 区間燃費計算 bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn+2,W movwf src2+2 movf odometer_cn+1,W movwf src2+1 movf odometer_cn+0,W movwf src2+0 bsf INTCON,RBIE ; rb割込許可 call mul10_24 bcf INTCON,RBIE ; rb割込禁止 movf fuel_cn+2,W movwf src2+2 movf fuel_cn+1,W movwf src2+1 movf fuel_cn+0,W movwf src2+0 bsf INTCON,RBIE ; rb割込許可 call div24 ; 区間燃費表示 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bsf flag,0 call print_dec3 ;movlw 'k' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data ;movlw '/' ;call write_lcd_data ;movlw 'l' ;call write_lcd_data return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 区間燃費(信号間)表示 futs_print ; 区間燃費計算 bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn2+2,W movwf src2+2 movf odometer_cn2+1,W movwf src2+1 movf odometer_cn2+0,W movwf src2+0 bsf INTCON,RBIE ; rb割込許可 call mul10_24 bcf INTCON,RBIE ; rb割込禁止 movf fuel_cn2+2,W movwf src2+2 movf fuel_cn2+1,W movwf src2+1 movf fuel_cn2+0,W movwf src2+0 bsf INTCON,RBIE ; rb割込許可 call div24 ; 区間燃費表示 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bsf flag,0 call print_dec3 ;movlw 'k' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data ;movlw '/' ;call write_lcd_data ;movlw 'l' ;call write_lcd_data return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 時間表示 time_print bcf INTCON,RBIE ; rb割込禁止 movf timer_cn+2,W movwf src1+2 movf timer_cn+1,W movwf src1+1 movf timer_cn+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 goto time_print_1 ;;;;;;;;;;;;;;;;;;;;;; ; 時間(信号間)表示 times_print bcf INTCON,RBIE ; rb割込禁止 movf timer_cn2+2,W movwf src1+2 movf timer_cn2+1,W movwf src1+1 movf timer_cn2+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 ;goto time_print_1 time_print_1 ;movlw 0 clrf src2+2 movlw TIMMINFACT_H ; 係数 movwf src2+1 movlw TIMMINFACT_L ; 係数 movwf src2+0 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 movlw ':' call write_lcd_data ; 余りから秒を計算! movf mod+1,W movwf src1+2 movf mod+0,W movwf src1+1 ;movlw 0 clrf src1+0 ;movlw 0 clrf src2+2 movlw TIMSECFACT_H ; 係数 movwf src2+1 movlw TIMSECFACT_L ; 係数 movwf src2+0 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec2 ; 秒2桁表示 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 走行距離表示 (0000.00km) odd_print bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn+2,W movwf src1+2 movf odometer_cn+1,W movwf src1+1 movf odometer_cn+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 goto odd_print_1 ;;;;;;;;;;;;;;;;;;;;;; ; 走行距離(信号間)表示 (0000.00km) odds_print bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn2+2,W movwf src1+2 movf odometer_cn2+1,W movwf src1+1 movf odometer_cn2+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 ;goto odd_print_1 odd_print_1 ;movlw 0 clrf src2+2 movlw 0x9 ;637*4 = 2548 = 0x9f4 movwf src2+1 movlw 0xf4 ;637*4 = 2548 = 0x9f4 movwf src2+0 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 ; まずは整数部3桁 movlw '.' call write_lcd_data ; 余りから小数2桁を計算! movf mod+1,W movwf src1+2 movf mod+0,W movwf src1+1 ;movlw 0 clrf src1+0 ;movlw 0 clrf src2+2 movlw 0x19 ;637*4*256/100=0x197b movwf src2+1 movlw 0x7b ;637*4*256/100=0x197b movwf src2+0 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec2 ; 小数2桁表示 ;movlw 'k' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 平均速度表示 (000km) ; ; 距離パルス数 ÷ 時間 × 86.235 = 平均速度 ; 86.23491464=1/(0.637*4)*3600/64*1000/256 avgsp_print bcf INTCON,RBIE ; rb割込禁止 movf timer_cn+2,W movwf src1+2 movf timer_cn+1,W movwf src1+1 movf timer_cn+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 clrf src2+2 clrf src2+1 movlw D'86' movwf src2+0 call div24 movf result+2,W movwf src2+2 movf result+1,W movwf src2+1 movf result+0,W movwf src2+0 bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn+2,W movwf src1+2 movf odometer_cn+1,W movwf src1+1 movf odometer_cn+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 movlw '.' call write_lcd_data movlw '0' call write_lcd_data ; ダミー return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 平均速度表示 (000km) ; ; 距離パルス数 ÷ 時間 × 86.235 = 平均速度 ; 86.23491464=1/(0.637*4)*3600/64*1000/256 avgsps_print bcf INTCON,RBIE ; rb割込禁止 movf timer_cn2+2,W movwf src1+2 movf timer_cn2+1,W movwf src1+1 movf timer_cn2+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 clrf src2+2 clrf src2+1 movlw D'86' movwf src2+0 call div24 movf result+2,W movwf src2+2 movf result+1,W movwf src2+1 movf result+0,W movwf src2+0 bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn2+2,W movwf src1+2 movf odometer_cn2+1,W movwf src1+1 movf odometer_cn2+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 call div24 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec3 movlw '.' call write_lcd_data movlw '0' call write_lcd_data ; ダミー return ;■ デバッグ系 --> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 車速パルスカウント表示 spcout_print ; 上位.中位下位(255.65535) と表示します ; デバッグ用なので手抜き。 movf odometer_cn+2,W movwf src1+0 ;movlw 0 clrf src1+1 call bin16tobcd bcf flag,0 call print_dec3 movlw '.' call write_lcd_data movf odometer_cn+1,W movwf src1+1 movf odometer_cn+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec5 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 燃料パルスカウント表示 fuelcout_print ; 上位.中位下位(255.65535) と表示します ; デバッグ用なので手抜き。 movf fuel_cn+2,W movwf src1+0 movlw 0 movwf src1+1 call bin16tobcd bcf flag,0 call print_dec3 movlw '.' call write_lcd_data movf fuel_cn+1,W movwf src1+1 movf fuel_cn+0,W movwf src1+0 call bin16tobcd bcf flag,0 call print_dec5 return ;■ デバッグ系 <--