Pc_KuRTu
Üye
- Katılım
- 20 Nis 2011
- Mesajlar
- 9
- Puanları
- 1
arkadaşlar ben dijital termometre yapacağım.termometrede 16F84A 74HC595 led sürücü bargraf ledler ve DS1820 sıcaklık sensörü bulunacak.devre -10 dan 40 C kadar gösterecek.benim sizden istediğim çoğu programlamayı yaptım ama sadece 74HC595 entegresinin pic basici kaldı.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 19.03.2007 *
'* Version : 1.0 *
'* Notes : RB1=Enable *
'* RB2=R/W *
'* RB3=RS *
'* RB4=D4 *
'* RB5=D5 *
'* RB6=D6 *
'* RB7=D7 *
'* RA0=Sensör1 *
'* RA1=Sensör2 * *
'* *
'****************************************************************
'***********Seri İletişim Dosyası***********
Include "MODEDEFS.BAS"
TrisA=0
TrisB=0
PortA=0
PortB=0
'***********Sensör Tanımlamaları***********
Comm_Pin1 VAR PortB.0
dPin VAR PORTB.5
sPin VAR PORTB.6
cPin VAR PORTB.7
Busy VAR BIT
HAM VAR WORD
ISI VAR WORD
SIGN VAR BYTE
SIGN_BITI VAR HAM.Bit11
NEGAT_ISI CON 1
TEMP VAR BYTE
Float VAR WORD
'***********LCD yi Kullanıma Hazır Hale Getir***********
LOW PORTB.2 'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
lcdout $FE,1
PAUSE 200 ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre
lcdout $FE,1
LCDOUT $FE,$80,"**KULA EML**"
LCDOUT $FE,$C0, "*HOSGELDINIZ*"
pause 2000
lcdout $FE,1
'***********Program Başlangıcı***********
Basla:
gosub sensoroku1
Goto Basla
'***********1. Sensörü Oku***********
SENSOROKU1:
OWOUT Comm_Pin1, 1, [$CC, $44]' ISI değerini oku
Bekle1:
OWIN Comm_Pin1, 4, [Busy] ' Busy değerini oku
IF Busy = 0 THEN Bekle1 ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT Comm_Pin1, 1, [$CC, $BE]' scratchpad memory oku
OWIN Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB Hesapla1
RETURN
Hesapla1: ' Ham değerden Santigrat derece hesabı
Sign = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign = "-"
temp=($ffff-ham+1)*625
ISI = DIV32 10
GOTO GEC1
endif
TEMP = 625 * (HAM+1) '
ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC1:
FLOAT = (ISI //1000)/100
ISI=(ISI/1000)-1
ISI=ISI+1
lcdout $FE,$80,"SICAKLIK",1,": ",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
RETURN
End
(kodun içinde lcd ekranı kodları var ilk önce lcd takmıştım ondan kafanız karışmasın)
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 19.03.2007 *
'* Version : 1.0 *
'* Notes : RB1=Enable *
'* RB2=R/W *
'* RB3=RS *
'* RB4=D4 *
'* RB5=D5 *
'* RB6=D6 *
'* RB7=D7 *
'* RA0=Sensör1 *
'* RA1=Sensör2 * *
'* *
'****************************************************************
'***********Seri İletişim Dosyası***********
Include "MODEDEFS.BAS"
TrisA=0
TrisB=0
PortA=0
PortB=0
'***********Sensör Tanımlamaları***********
Comm_Pin1 VAR PortB.0
dPin VAR PORTB.5
sPin VAR PORTB.6
cPin VAR PORTB.7
Busy VAR BIT
HAM VAR WORD
ISI VAR WORD
SIGN VAR BYTE
SIGN_BITI VAR HAM.Bit11
NEGAT_ISI CON 1
TEMP VAR BYTE
Float VAR WORD
'***********LCD yi Kullanıma Hazır Hale Getir***********
LOW PORTB.2 'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
lcdout $FE,1
PAUSE 200 ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre
lcdout $FE,1
LCDOUT $FE,$80,"**KULA EML**"
LCDOUT $FE,$C0, "*HOSGELDINIZ*"
pause 2000
lcdout $FE,1
'***********Program Başlangıcı***********
Basla:
gosub sensoroku1
Goto Basla
'***********1. Sensörü Oku***********
SENSOROKU1:
OWOUT Comm_Pin1, 1, [$CC, $44]' ISI değerini oku
Bekle1:
OWIN Comm_Pin1, 4, [Busy] ' Busy değerini oku
IF Busy = 0 THEN Bekle1 ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT Comm_Pin1, 1, [$CC, $BE]' scratchpad memory oku
OWIN Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB Hesapla1
RETURN
Hesapla1: ' Ham değerden Santigrat derece hesabı
Sign = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign = "-"
temp=($ffff-ham+1)*625
ISI = DIV32 10
GOTO GEC1
endif
TEMP = 625 * (HAM+1) '
ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC1:
FLOAT = (ISI //1000)/100
ISI=(ISI/1000)-1
ISI=ISI+1
lcdout $FE,$80,"SICAKLIK",1,": ",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
RETURN
End
(kodun içinde lcd ekranı kodları var ilk önce lcd takmıştım ondan kafanız karışmasın)