; ------------------------------------------------------------------- ; 表示 ; ------------------------------------------------------------------- print ; カーソルを1行目に移動 bcf RS ; RS='L' movlw B'10000000' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call fu_print ; 瞬間燃費表示 movlw ' ' call write_lcd_data call fut_print ; 区間燃費表示 ; カーソルを2行目に移動 bcf RS ; RS='L' movlw B'11000000' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call times_print ; 信号間時間表示 movlw ' ' call write_lcd_data call write_lcd_data call futs_print ; 区間燃費表示(信号間) ; カーソルを3行目に移動 bcf RS ; RS='L' movlw B'10010100' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call speed_print ; 速度表示 ;call spcout_print ; 車速パルスカウント表示 movlw ' ' call write_lcd_data call fu_print_time ; 燃費cc/min表示 ;call fuelcout_print ; 燃料パルスカウント表示 ; カーソルを4行目に移動 bcf RS ; RS='L' movlw B'11010100' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call time_print movlw ' ' call write_lcd_data call odd_print ; 走行距離表示 movlw ' ' call write_lcd_data call avgsp_print return ; 瞬間系 燃料 燃費 速度 ; 信号間 時間 距離 燃費 平均速度 ; 起動から 時間 距離 燃費 平均速度 ; ; ; 000 00.0 00 ; 00:00 000.00 00.0 00 ; 000:00 000.0 00.0 00 ; ; 01234567890123456789 ; 瞬間系 信号間 起動から ; ; 燃費 燃費 燃費 ; 速度 平均速度 平均速度 ; 燃料 距離 距離 ; 時間 時間 ; ; 00 00.0 00.0 ; 000 00.0 00.0 ; 000 000.00 000.00 ; 000:00 000:00 ; 01234567890123456789 時間 ;■瞬間系 --> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 速度表示 speed_print btfsc speed_flow,6 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 'i' call write_lcd_data movlw 'd' call write_lcd_data movlw 'l' 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 ;movf fuel_flow,W ;btfsc STATUS,Z btfsc fuel_flow,7 goto fu_print_fc ; fuel cut と判断されたら goto fu_print_ccpmin ; 通常時 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 瞬間燃費表示 (000km/l or 000cc/m or f-c) fu_print ;movf fuel_flow,W ;btfsc STATUS,Z btfsc fuel_flow,7 goto fu_print_fc ; fuel cut と判断されたら btfsc speed_flow,6 goto fu_print_ccpmin ; 0km/h と判断されたら ; 瞬間燃費計算 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 btfsc speed_flow,6 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 's' call write_lcd_data movlw 't' call write_lcd_data movlw 'o' call write_lcd_data movlw 'p' 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_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 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 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 ;■ デバッグ系 <--