lcd de eksı sıcaklık set etme geri saydırma

Başlatan hkalaycioglu, 24 Ekim 2012, 16:27:43

hkalaycioglu

herkese iyi günler simdiden herkesin kurban bayramını kutlarım

benım problemım termostat devresi yaptım bir tane lcd li bir devre devrei ekranda butonlarla ayarladıgım değere gelınce role kontrolu yapıyorum ama bunu eksi degere set etmek ıstedım bir turlu basaramadım devrede bulunan butonlara basarak sıfırın altına ındıgınde -1   -2 gibi saymasını istiyorum basaramadım  artı ıstedıgım gıbı saydırıyorum internettede arastırdım hic bir sekılde eksi saydıran bir program bulamadım

devre seması ve program asagıdadır

https://rapidshare.com/files/2582615186/628 ile.DSN

@ DEVICE pic16F628 'işlemci 16F628
@ DEVICE pic16f628, WDT_OFF
@ DEVICE pic16f628, PWRT_OFF
@ DEVICE pic16f628, BOD_OFF
@ DEVICE pic16f628, LVP_OFF
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16f628, MCLR_OFF
@ DEVICE pic16f628, INTRC_OSC_NOCLKOUT
DEFINE OSC 4 '4 Mhz hızında çalışıyoruz.

CMCON = 7
TRISA=%00110111
TRISB=%00000010

PORTA=0
PORTB=0

DEFINE LCD_DREG      PORTB   
DEFINE LCD_DBIT      4     
DEFINE LCD_RSREG   PORTB   
DEFINE LCD_RSBIT   2   
DEFINE LCD_EREG      PORTB   
DEFINE LCD_EBIT      3     
DEFINE LCD_BITS      4   
DEFINE LCD_LINES   2
     
'---------------------------değişkenler-----------------------------------------
    SYC      VAR    BYTE
    a var byte
    TERM     VAR    BYTE
    SAYI     VAR    BYTE
    AYAR     VAR    BYTE
    TSEN     VAR    WORD
    TSET     VAR    WORD
    ALT      VAR    WORD
    EK       VAR    BYTE       
    ALARM1   VAR    WORD
    ALARM2   VAR    WORD
    E1        VAR    BYTE
    E2        VAR    BYTE
    MENU    VAR     PORTA.0
    YUKARI  VAR     PORTA.1
    ASAGI   VAR     PORTA.2
    Busy       VAR BIT         ' Busy Status-Bit
HAM         VAR   WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD       
ISARET_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
EKSI_ISI   CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için
DERECE     CON 223         ' ° işareti
ISARET     VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE       ' Div32 bit hesap için geçici değişken
SYMBOL COMM_PIN=PORTB.1

LCDOUT $FE,$40,4,14,14,14,14,31,31,0
lCDOUT $FE,$48,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti

GIRIS:
   
   LCDOUT $FE,$80,"I S I A L A R M "               
   lcdout $FE,$C0," D E V R E S I  " ' One-wire Data-Pin "DQ" PortB.0 da
    PAUSE 2000
         LCDOUT $FE,1
   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
     '-------------------------------------------------------------------------------
BASLANGIC:
SYC=0

READ $01,ALT.BYTE0:IF ALT.BYTE0=255 THEN ALT.BYTE0=0
READ $11,ALT.BYTE1:IF ALT.BYTE1=255 THEN ALT.BYTE1=1



read $38,EK:IF EK=255 THEN EK=0
                 
BASLA: 
        GOSUB SENSOROKU
        GOSUB EKRAN1
        GOSUB ISIKONTROL

IF MENU=1 THEN  GOTO AYAR_MENUSU
goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------   
EKRAN1:   
  ALARM1=ALT/10:ALARM2=ALT//10
  lcdout $FE,2,"ORTAM ISI=",ISARET,DEC2 ISI,",",DEC1 (FLOAT),1,"C"
  lcdout $fe,$C0,"SET =",ISARET,DEC2 ALARM1,",",DEC1 ALARM2,1,"C"
  RETURN


 
SENSOROKU:
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-" 
       ham=~ham+2
    endif
    float = (HAM*10)/16   
    ISI=float/10
    RETURN 
'----------------------------ISI KONTROL----------------------------------------

ISIKONTROL:
READ $38,EK
TSET=ALT:TSEN=FLOAT
         if tsen=<(TSET-EK)then   
          LOW PORTA.7
         
           LCDOUT $FE,$CC," "
            LCDOUT $FE,$CD," "
             LCDOUT $FE,$CE," "
          ELSE
         
         
          lcdout $fe,$CC,0
          lcdout $fe,$CD,0
          lcdout $fe,$CE,0
          ENDIF
        if TSET=<tsen then         
         HIGH PORTA.7
        Endif
      IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN



BIP:
    HIGH PORTA.3   
pause 50
     LOW PORTA.3 
  RETURN
BIPBIP:
     HIGH PORTA.3   
    PAUSE 50
      LOW PORTA.3
    PAUSE 100
     HIGH PORTA.3
    PAUSE 50
      LOW PORTA.3
RETURN
'-------------------------------------------------------------------------------
AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=3 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=2
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,2,"ISITICI AYARLARI"
LCDOUT $FE,$C0,"              "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO TERM_KONTROL
ENDIF

CASE 1
lcdout $fe,2,"ISI HASSASIYET  "
LCDOUT $FE,$C0,"   A Y A R I "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO HASSASIYET
ENDIF

CASE 2
lcdout $fe,2,"MENUDEN CIKIS   "
LCDOUT $FE,$C0,"              "   
IF MENU=1 THEN AYARLANDI
END SELECT

RETURN

TERM_KONTROL:
       GOSUB TEMIZLE
      READ $01,ALT.BYTE0:READ $11,ALT.BYTE1     
SET_AYAR:
 
ALARM1=ALT/10:ALARM2=ALT//10 
LCDOUT $FE,2,"ISI LiMiTiNi SEC"
LCDOUT $FE,$C0,"AYAR:",ISARET,DEC2 term,",",DEC1 A,1,"C"
'LCDOUT $FE,$C0,"AYAR:",ISARET,DEC2 ALARM1,",",DEC1 ALARM2,1,"C"       
           
           IF YUKARI=1 then
              A=A+1
             
                IF A=10 THEN
                if term=>00 then isaret="+"
                A=0:TERM=TERM+1
                ENDIF
               
              IF TERM=100 THEN TERM=0
              PAUSE 150
           ENDIF
           IF ASAGI=1 then
              A=A-1
             
                IF A=255 then
                if term=<00 then isaret="-"
                A=9:TERM=TERM-1
                ENDIF
                if term=00 and ASAGI=1 then
                 isaret="-"
                 term=term+1
                 endif
             
              'IF TERM=255 THEN TERM=99
             PAUSE 150
           ENDIF
           
iF MENU=1 THEN
       
         'WRITE $01,ALT.BYTE0
        ' WRITe $11,ALT.BYTE1
         GOTO AYAR_MENUSU
         ENDIF
                     
GOTO SET_AYAR 

HASSASIYET:
GOSUB TEMIZLE
HASSAS:
E1=EK/10:E2=EK//10
LCDOUT $FE,2,"HASSASIYET"
LCDOUT $FE,$C0,"AYARI:",DEC1 E1,",",DEC1 E2,1,"C"
IF YUKARI=1 THEN
EK=EK+1
PAUSE 100
gosub BIP
endif
IF EK=01 THEN EK=51
IF ASAGI=1 THEN
EK=EK-1
gosub BIP
PAUSE 100
endif
IF EK=51 THEN EK=01
IF MENU=1 THEN
WRITE $38,EK:PAUSE 10
GOTO AYAR_MENUSU
ENDIF
GOTO HASSAS   
   



AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
      LCDOUT $FE,$80,"AYARLAR  ....  "
      LCDOUT $FE,$C0,"KAYDEDILDI....  "
       GOSUB BIPBIP
       AYAR=1
       SYC=0
       PAUSE 800
       
        GOSUB TEMIZLE
        goto BASLANGIC       
TEMIZLE:
        lcdout $fe,1
RETURN       
END

hkalaycioglu

SET_AYAR:
ALARM1=ALT/10:ALARM2=ALT//10
LCDOUT $FE,2,"ISI LiMiTiNi SEC"
LCDOUT $FE,$C0,"AYAR:",eksi,DEC2 term,",",DEC1 A,1,"C"
     
           IF YUKARI=1 then
              if eksi="+" then
                a=a+1
                if a=10 then
                 a=0:term=term+1
                  if term>100 then term=100
                endif
              else
                a=a-1
                if a=255 then
                 
                A=9 :term=term-1
                if term=255 then
                 term=0:eksi="+":A=1                 
                 endif
                endif
              endif   
              PAUSE 50
           ENDIF
           
           IF ASAGI=1 then
             if eksi="+" then
               A=A-1
               if a=255 then
               a=9:
                   term=term-1
               IF TErm=255 then
                     term=0:eksi="-":A=1
                   endif
                 endif   
                 goto CIK
             else
             a=a+1
             if a=10 then
               a=0:
                  term=term+1
             IF term=51 then term=50
               endif 
             endif
             pause 200
            endif       
             write $02,eksi
CIK:             
             PAUSE 30
         
               
iF MENU=1 THEN
       
         WRITE $01,a
         WRITe $11,term
       
         GOTO AYAR_MENUSU
         ENDIF
                     
GOTO SET_AYAR 



saolsun ete hocam yardımcı oldu