Whitout "graphics elements" the code it's 659 words. Maybe it's a good start for use PID ?! (+314 words)
Code:
' version 2
@ DEVICE PIC12F675, intrc_osc_noclkout, wdt_off, mclr_off
DEFINE OSC  4
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50

CMCON    = 7
TRISIO   = %001001
INTCON   = 0 
GPIO     = 0

ANSEL    = %00010001
ADCON0   = %10000001
wpu      = %00000010
 
            D_C      var     GPIO.2       
            SDIN     var     GPIO.4
            SCK      var     GPIO.5
            MOSFET   var     GPIO.1
          buton    var     GPIO.3

            LcdReg          var  byte        
            x               var  byte
            y               var  byte
            z               var  byte
            a               var  byte
            PosX            var  byte
            PosY            var  byte
            Chr             var  byte
            LcdData         var  byte
            Offset          var  byte
            Char            var  byte
            adval           var  word
            w1              var  word
          vt              var  word
          cnt             var  byte
            grup            var  word
            mode               var  byte
          calibra         var  word
          
             
            DATA @0,$3E,$51,$49,$45,$3E,_       ';// 0                   
                    $00,$42,$7F,$40,$00,_       ';// 1
                    $42,$61,$51,$49,$46,_       ';// 2
                    $21,$41,$45,$4B,$31,_       ';// 3
                    $18,$14,$12,$7F,$10,_       ';// 4
                    $27,$45,$45,$45,$39,_       ';// 5
                    $3C,$4A,$49,$49,$30,_       ';// 6
                    $01,$71,$09,$05,$03,_       ';// 7
                    $36,$49,$49,$49,$36,_       ';// 8
                    $06,$49,$49,$29,$1E,_       ';// 9
                    $08,$08,$3E,$08,$08,_       ';// +
                    $08,$08,$08,$08,$08,_       ';// -
                    $00,$60,$60,$00,$00,_       ';// .
                    $00,$02,$05,$02,$00,_       ' grad
                    $3E,$41,$41,$41,$22,_       ' C
                    $7F,$02,$0C,$02,$7F,_       ' M     
                    $00,$00,$00,$00,$00,_       ' space
                 $08,$04,$7F,$04,$08,_       ' arrow up
                    $20,$40,$7F,$40,$20         ' arrow down
        
                          
           pause 500                 
           LcdReg  =  %00100001         'LCD Extended Commands.
           call    PrintCtrlLcd
           LcdReg  =  $E6               'Set LCD Vop (Contrast).Initial $C5
           call    PrintCtrlLcd
           LcdReg  =  %00000110         'Set Temp coefficent.
           call    PrintCtrlLcd
           LcdReg  =  %00010011         'LCD bias mode 1:48.
           call    PrintCtrlLcd
           LcdReg  =  %00100000         'LCD Standard Commands
           call    PrintCtrlLcd
           LcdReg  =  $0C               'LCD in normal mode.  $0D inverse
           call    PrintCtrlLcd                 
Pause 100
Call CursorHome
Pause 100               
Gosub LCD_Clear
mode = 0
Pause 500                ' time to give-up :) 
'===================== READING VOLTAGE ==============================
Main:
low mosfet
 vt=0
 grup=0
     for cnt = 1 to 20
 ADCON0.1 = 1
 WHILE ADCON0.1 = 1 : WEND
 Pause 10
 adval.HighByte = ADRESH
 adval.LowByte = ADRESL
 PAUSE 10
     vt=adval * 500
     vt=div32 1023
     grup=vt+grup
 PAUSE 10
     next cnt
 w1=grup / 20

'~~~~~~~~~~~~~~~~~ setting cursor for display the voltage
                LcdReg  =  %10000000 + 25        ' cursor  X
                call    PrintCtrlLcd
                LcdReg  =  %01000011             ' cursor  Y
                call    PrintCtrlLcd
'~~~~~~~~~~~~~~~~~ now display results 
 if (w1 dig 2) <1 then
                char = 16  
                call Printchar
                else         
                Char = (w1 dig 2)            
                call    PrintChar 
 endif      


                Char = (w1 dig 1)           
                call    PrintChar

 if (w1 dig 0) < 5 then            
                Char = 0          
                call    PrintChar  
        else
                char = 5
                call PrintChar
 endif                         
                Char = 16                 
                call    PrintChar
            
                Char = 13
                call  PrintChar
               
                Char = 14
                call  PrintChar

                
if buton = 0 then 
mode = mode + 1
gosub memo
endif


gosub check
Pause 100                
Goto Main

'================== L C D ===========================================                

CursorHome:     LcdReg  =  %10000000            ' cursor Home
                call    PrintCtrlLcd
                LcdReg  =  %01000000            ' cursor Home
                call    PrintCtrlLcd
                return

PrintChar:      offset = Char * 5          
            
                for a = 1 to 5                
                    read offset, LcdReg
                    call  PrintDataLcd
                    offset = offset + 1
                next a
                LcdReg = 0
                call    PrintDataLcd
                return
                                    
PrintCtrlLcd:   D_C = 0                             

PrintDataLcd:   for x = 1 to 8                
                    SDIN = LcdReg.7              
                    SCK = 1
                    LcdReg = LcdReg << 1
                    SCK = 0
                next x               
                D_C = 1
                return               
                
LCD_Clear:
                PosX=0:PosY=0:Gosub LCD_GotoXY
                D_C = 1
                FOR Chr=1 TO 252
                    LcdData=0:Gosub LCD_ByteOut
                    LcdData=0:Gosub LCD_ByteOut
                next Chr
                return

LCD_GotoXY:
                D_C = 0
                LcdData=%01000000 | PosY :Gosub LCD_ByteOut
                LcdData=%10000000 | PosX :Gosub LCD_ByteOut
                return

LCD_ByteOut:
                SHIFTOUT SDIN,SCK,1,[LcdData]
                return  

'===============================================================================
memo:

if mode = 1 then
 gosub poz
 char = 17
 call    PrintChar
endif

if mode = 2 then  
 gosub poz
 char = 15
 call    PrintChar
 calibra = vt
endif

if mode = 3 then 
 gosub poz
 char = 18
 call printchar
endif

if mode > 3 then 
  mode = 0
 gosub poz
 char = 16
 call printchar
endif

return
'===============================================================================
check:
SELECT CASE  MODE
CASE 1
PWM MOSFET, 255, 300
CASE 2
    if w1 < (calibra-1) then 
    pwm mosfet, 155, 200       'era 500
    else
    low mosfet 
    endif
CASE 3
LOW MOSFET
END SELECT    
return
'===============================================================================
Poz:
                LcdReg  =  %10000000 + 67        ' cursor  X
                call    PrintCtrlLcd
                LcdReg  =  %01000011             ' cursor  Y
                call    PrintCtrlLcd
return
'===============================================================================               

End             'of program