Code:' @ DEVICE pic16F648A, INTRC_OSC_NOCLKOUT ' System Clock Options @ DEVICE pic16F648A, HS_OSC ' System Clock Options @ DEVICE pic16F648A, WDT_OFF ' Watchdog Timer @ DEVICE pic16F648A, PWRT_ON ' Power-On Timer @ DEVICE pic16F648A, BOD_ON ' Brown-Out Detect @ DEVICE pic16F648A, MCLR_ON ' Master Clear Options (Internal) @ DEVICE pic16F648A, LVP_OFF ' Low-Voltage Programming @ DEVICE pic16F648A, CPD_OFF ' Data Memory Code Protect @ DEVICE pic16F648A, PROTECT_OFF ' Program Code Protection DEFINE OSC 12 define LCD_LINES 4 Clr CON 1 Comm Con $FE LINE1 con 2 LINE2 con $c0 LINE3 con $94 LINE4 con $d4 Offset VAR BYTE OffsetP var byte Interi var word Decimali_Temp VAR word Temporaneo var byte Valore VAR byte i var byte n var byte Sign VAR BYTE DQ var portb.1 Recorded_Temp var word Dummy var WORD Decimali var BYTE Resto var WORD Stat var bit Cold_Bit VAR Recorded_Temp.Bit11 Real_Cold CON 1 MyButton var portb.0 LongPress con 50 RPM_Port var portb.2 RPM var WORD ButtonPress var word x var byte : x = -1 Mybutton = 1 CMCON=%00000111 ' Comparators OFF OPTION_REG.7=0 ' Enable weak Pull-Ups (used for PressButton) Begin: Pause 500 LCDOUT 254,64,31,31,31,31,0,0,0,0 ' Cust Char #0 LCDOUT 254,72,0,0,0,0,31,31,31,31 ' Cust Char #1 LCDOUT 254,80,31,31,31,15,7,3,1,0 ' Cust Char #2 LCDOUT 254,88,31,31,31,30,28,24,16,0 ' Cust Char #3 LCDOUT 254,96,0,16,24,28,30,31,31,31 ' Cust Char #4 LCDOUT 254,104,0,1,3,7,15,31,31,31 ' Cust Char #5 'LCDOUT 254,112,31,31,31,31,31,31,31,31 ' Cust Char #6 LCDOUT 254,120,0,0,0,0,12,30,30,12 ' Cust Char #7 Main: goto menu end Elaborazione: IF cold_bit = real_cold then Elaborazione_Freddo sign = "+" gosub elaborazione_common return Elaborazione_Common: Dummy = 625 * recorded_Temp Interi = div32 10 Interi = (Recorded_Temp & $0FF0) >> 4 Decimali_Temp = ((Recorded_Temp.Lowbyte & $0F) * 625) Decimali = Decimali_Temp / 100 Resto = Decimali_Temp // 100 if (resto >= 50) then Decimali = Decimali + 1 return Elaborazione_Freddo: Sign = "-" RECORDED_TEMP = ~recorded_Temp + 1 gosub elaborazione_common return Visualizzazione: select case Interi case is < 10 GOSUB SEGNO n = 0 OFFSET = 5 Valore = Interi gosub Cifre OffsetP = 5 Gosub Punto N = 1 OFFSET = 10 Valore = Decimali GOSUB Cifre case is < 100 offset = 0 n = 1 Valore = Interi gosub Cifre OffsetP = 5 gosub Punto N = 1 OFFSET = 10 Valore = Decimali GOSUB Cifre case is < 200 offset = 0 n = 2 Valore = Interi gosub Cifre offsetP = 10 gosub Punto N = 0 OFFSET = 15 decimali_temp = decimali Decimali_temp = Decimali / 10 Resto = Decimali // 10 Decimali = Decimali_temp if (resto >= 5) then Decimali = Decimali + 1 Valore = Decimali GOSUB Cifre case is < 1000 offset = 0 n = 2 Valore = Interi gosub Cifre case else offset = 0 n = 3 valore = RPM gosub Cifre end select RETURN Segno: SELECT CASE SIGN CASE "+" lcdout comm, $C2, $01, $FF, $01 LCDOUT COMM, $96, $00, $FF, $00 CASE "-" lcdout comm, $C2, $01, $01, $01 LCDOUT COMM, $96, $00, $00, $00 END SELECT RETURN Cifre: For I = N to 0 STEP -1 Temporaneo = Valore dig i select case Temporaneo case 0 gosub Numero0 case 1 gosub Numero1 case 2 gosub Numero2 case 3 gosub Numero3 case 4 gosub Numero4 case 5 gosub Numero5 case 6 gosub Numero6 case 7 gosub Numero7 case 8 gosub Numero8 case 9 gosub Numero9 end select OFFSET = OFFSET + 5 next I return GetButton: ButtonPress=0 While MyButton=0 If ButtonPress<255 then ButtonPress=ButtonPress+1 Pause 50 ' This is also our Debounce value Wend If ButtonPress>0 then If ButtonPress=>LongPress then ButtonPress=2 else buttonpress = 1 endif endif Return Bottone: gosub getbutton if buttonpress = 1 then goto Menu return Temp_Wait: GOSUB BOTTONE owin dq, 4, [Stat] If stat = 0 then Temp_Wait return Menu: x = x + 1 IF x > 5 then x = 0 branchl x,[Sommario,Oil_temp,h2o_temp,ext_temp,int_temp,rpm_window] return Temps_Common: owin dq, 2, [Recorded_Temp.LOWBYTE,Recorded_Temp.HIGHBYTE] gosub Elaborazione gosub visualizzazione return Sommario: gosub bottone gosub clrscr lcdout "Sommario" pause 100 goto sommario RPM_Window: gosub bottone gosub clrscr ' gosub Rpm_Count ' interi = RPM ' gosub visualizzazione lcdout "RPM_Window" pause 100 goto rpm_window H2O_Temp: Owout DQ, 1, [$55,$28,$09,$B4,$F5,$00,$00,$00,$28,$44] gosub temp_wait owout dq, 1, [$55,$28,$09,$B4,$F5,$00,$00,$00,$28,$BE] gosub clrscr LCDOUT comm, line1, "T", COMM, LINE2, "H", COMM, LINE3, "2", COMM, LINE4, "0" gosub temps_common goto h2o_temp Int_Temp: gosub bottone gosub clrscr sign = "+" Interi = 4 decimali = 73 gosub visualizzazione pause 100 goto int_temp Ext_Temp: gosub bottone gosub clrscr Sign = "-" Interi = 9 decimali = 24 gosub visualizzazione pause 100 goto ext_temp Oil_Temp: Owout DQ, 1, [$55,$28,$87,$8B,$F5,$00,$00,$00,$3A,$44] gosub temp_wait owout dq, 1, [$55,$28,$87,$8B,$F5,$00,$00,$00,$3A,$BE] gosub clrscr LCDOUT comm, line1, "T", COMM, LINE2, "O", COMM, LINE3, "I", COMM, LINE4, "L" gosub temps_common goto oil_Temp Rpm_Count: COUNT RPM_PORT, 500, RPM RPM = RPM * 2 RETURN Punto: LCDOUT Comm, ($D9 + OFFSET), $07 : return Numero0: LCDOUT COMM, ($81 + OFFSET), $05, $FF, $FF, $04 GOSUB COMBO1 LCDOUT COMM, ($95 + OFFSET), $FF, COMM, ($98 + OFFSET), $FF LCDOUT COMM, ($D5 + OFFSET), $02, $FF, $FF, $03 RETURN Numero1: lcdout comm, ($82 + OFFSET), $05, $FF lcdout comm, ($C3 + OFFSET), $FF lcdout comm, ($97 + OFFSET), $FF lcdout comm, ($D7 + OFFSET), $FF RETURN Numero2: GOSUB COMBO2 LCDOUT comm, ($C4 + OFFSET), $FF LCDOUT comm, ($95 + OFFSET), $05, $00, $00, $00 LCDOUT comm, ($D5 + OFFSET), $FF, $01, $01, $01 RETURN Numero3: GOSUB COMBO2 LCDOUT comm, ($C2 + OFFSET), $01, $01, $FF LCDOUT comm, ($96 + OFFSET), $00, $00, $FF GOSUB COMBO3 RETURN Numero4: lcdout comm, ($81 + OFFSET), $FF GOSUB COMBO1 GOSUB COMBO4 GOSUB COMBO5 return Numero5: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $00 GOSUB COMBO6 GOSUB COMBO4 GOSUB COMBO3 RETURN Numero6: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00 GOSUB COMBO6 LCDOUT COMM, ($95 + OFFSET), $FF, $00, $00, $04 GOSUB COMBO7 RETURN Numero7: GOSUB COMBO2 LCDOUT COMM, ($C3 + OFFSET), $01, $FF LCDOUT COMM, ($97 + OFFSET), $00, $FF GOSUB COMBO5 RETURN Numero8: GOSUB COMBO8 LCDOUT COMM, ($C1 + OFFSET), $02, $01, $01, $03 LCDOUT COMM, ($95 + OFFSET), $05, $00, $00, $04 GOSUB COMBO7 RETURN Numero9: GOSUB COMBO8 LCDOUT COMM, ($C1 + OFFSET), $02, $01, $01, $FF GOSUB COMBO5 LCDOUT COMM, ($D6 + OFFSET), $01, $01, $03 RETURN COMBO1: LCDOUT COMM, ($C1 + OFFSET), $FF, COMM, ($C4 + OFFSET), $FF RETURN COMBO2: LCDOUT comm, ($81 + OFFSET), $00, $00, $00, $04 RETURN COMBO3: LCDOUT comm, ($D5 + OFFSET), $01, $01, $01, $03 RETURN COMBO4: LCDOUT comm, ($95 + OFFSET), $00, $00, $00, $FF RETURN COMBO5: LCDOUT comm, ($D8 + OFFSET), $FF RETURN COMBO6: LCDOUT COMM, ($C1 + OFFSET), $FF RETURN COMBO7: LCDOUT COMM, ($D5 + OFFSET), $02, $01, $01, $03 RETURN COMBO8: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $04 RETURN Clrscr: lcdout comm, clr return
Bookmarks