avatar_efeworld

16F877A DİJTAL GİRİŞ PROBLEMİ

Başlatan efeworld, 28 Mayıs 2015, 23:46:30

efeworld

SEVGİLİ ETE HOCAM.ben 16f877a ile dijital saat yapmak istiyorum port c ve d komple lazım oradan 6 tane 7 segment display çalıştırıcam.o yuzden porte ve port a yı kullanmak istiyorum adcon1=7 yaptım ve trise=%111 yaptım fakat butonları görmüyor portd yi giris yapınca sıkıntısız çalıyor yardım edermisiniz hocam.saygılar...
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : ISI VE NEM KARIŞTIKTAN SONRA(HAFIZA EKLENDİKTEN SONRA) YENİDEN TOPARLANMASI*
'*  Date    : 12.09.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
define LCD RWREG PORTB
define LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
low portb.2
adcon1=7
trisb=0
trisc=0
trisd=255
trise=%111
SCL var PORTC.0
SDA var PORTC.1
BOS var byte
TEM VAR BYTE
GUN VAR BYTE
GUNLER VAR word
AY VAR BYTE
i VAR BYTE
YIL VAR BYTE
HAFGUN VAR BYTE
saat var BYTE
dak var BYTE
sn var BYTE
u var byte
YZ VAR BYTE
KN VAR BYTE
symbol yukari=portE.1
symbol asagi=portE.2
symbol okey=portE.0
    basla:
    GOSUB EKRAN
    bas:
    GOSUB OKU1307
    GOSUB EKRAN
    IF PORTd.0 =1 THEN menu
 
    GOTO BAS
EKRAN:
    LCDOUT $FE,$80,"SAAT  ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
    LCDOUT $FE,$C0,"TARiH ",DEC2 GUN,"/",DEC2 AY,"/20",DEC2 YIL
pause 200
return
MENU:
    LCDOUT $FE,1                             
    LCDOUT $FE,1," => SAAT AYARI "
    LCDOUT $FE,$C0,"    TARiH AYARI"
    while okey=1
    wend
    while yukari=1
    wend
    while asagi=1
    wend
     menualt:
    IF okey=1 THEN SAATAYAR1
    IF yukari=1 THEN MENUALTCIKIS
    IF asagi=1 THEN  MENUALT1
    GOTO MENUALT
MENUALT1:
    LCDOUT $FE,1," => TARiH AYARI"
    LCDOUT $FE,$C0,"    CIKIS   "
    while asagi=1
    wend
    while yukari=1
    wend
    menualt2:   
    IF okey=1 THEN TARIHAYAR
    IF yukari =1 THEN MENU
    IF asagi=1 THEN MENUALTCIKIS
    GOTO menualt2
MENUALTCIKIS:
    LCDOUT $FE,1," => CIKIS     "
    LCDOUT $FE,$C0,"    SAAT AYARI"
    while yukari=1
    wend
     while asagi=1
    wend                   
    menualtcikis2:
    IF okey=1 THEN basla
    IF yukari=1 THEN MENUALT1
    IF asagi=1 THEN MENU
    GOTO menualtcikis2
YAZ:
    PAUSE 500
    tem=(sn DIG 1)<<4+sn dig 0 : sn=tem
    tem=(dak DIG 1)<<4+dak dig 0 : dak=tem
    tem=(saat DIG 1)<<4+saat dig 0 : saat=tem
    tem=(gun DIG 1)<<4+gun dig 0 : gun=tem
    tem=(ay  DIG 1)<<4+ay dig 0 : ay =tem
    tem=(yil DIG 1)<<4+yil dig 0 : yil=tem
    I2CWRITE SDA,SCL,$D0,$00,[sn,dak,saat,hafgun,gun,ay,yil,TEM]
goto bas
OKU1307:

I2CREAD SDA,SCL,$D1,$00,[sn,dak,saat,hafgun,gun,ay,yil,TEM]
         BOS=((sn>>4) & $0F)*10+(SN & $0F):sn=BOS
         BOS=((DAK>>4) & $0F)*10+(DAK & $0F):DAK=BOS
         BOS=((SAAT>>4) & $0F)*10+(Saat & $0F):SAAT=BOS
         BOS=((yil>>4) & $0F)*10+(yil & $0F):yil=BOS
         BOS=((AY>>4) & $0F)*10+(AY & $0F)  :AY=BOS
         BOS=((gun>>4) & $0F)*10+(gun & $0F):gun=BOS
             
RETURN   
SAATAYAR1:
SAat=0 :gosub goster
while yukari=1
wend
while asagi=1
wend
SAATAYAR:
    IF yukari=1 THEN SAAT=SAAT+1
    if asagi=1  THEN SAAT=SAAT-1
    IF SAAT=24 THEN SAAT =0
    GOSUB GOSTER
    IF okey=1 THEN DAKAYAR1
    GOTO SAATAYAR
DAKAYAR1:
DAK=0
DAKAYAR:
IF DAK=0 THEN
        IF yukari=1 THEN DAK=0       
        IF asagi=1 THEN DAK=60
    ENDIF
    IF yukari=1 THEN DAK=DAK+1                         
    IF asagi=1 THEN DAK=DAK-1
    IF DAK =60 THEN DAK =0
    GOSUB GOSTER
    IF okey=1 THEN SANIYEAYAR1
    GOTO DAKAYAR
SANIYEAYAR1:
SN=0
SANIYEAYAR:
IF SN=0 THEN
        if yukari=1 THEN SN=0       
        IF asagi=1 THEN SN=60
    ENDIF
    IF yukari=1 THEN SN=SN+1                         
    IF asagi=1 THEN SN=SN-1
    IF SN =60 THEN SN =0
    GOSUB GOSTER
    IF okey=1 THEN YAZ
    GOTO SANIYEAYAR
TARIHAYAR:
while okey=1
wend
GUNAYAR:
GUN=1  : gosub goster
GUNAYAR1:
IF GUN=1 THEN
        IF yukari=1 THEN GUN=1       
        IF asagi=1 THEN GUN=32
        if gun=32 then gun=1
    ENDIF
    IF yukari=1 THEN GUN=GUN+1                         
    IF asagi=1 THEN GUN=GUN-1
    IF GUN =32 THEN GUN =1
    GOSUB GOSTER
    IF okey=1 THEN AYAYAR
    GOTO GUNAYAR1
AYAYAR:
AY=1
AYAYAR1:
IF AY=1 THEN
        IF yukari=1 THEN AY=1       
        IF asagi=1 THEN AY=13
    ENDIF
    IF yukari=1 THEN AY=AY+1                         
    IF asagi=1 THEN AY=AY-1
    IF AY =13 THEN AY =1
    GOSUB GOSTER
    IF okey=1 THEN yilayar
    GOTO AYAYAR1
yilayar:
YIL=0
TARIHAYAR1:
    IF YIL=0 THEN
        IF yukari=1 THEN YIL=0
        IF asagi=1 THEN YIL=100
    ENDIF
    IF yukari=1 THEN YIL=YIL+1
    IF asagi=1 THEN YIL=YIL-1
    IF YIL=99 THEN YIL =0
    GOSUB GOSTER
    IF portd.0=1 THEN YAZ
    GOTO TARIHAYAR1

GOSTER:
while okey=1
wend
lcdout $fe,1
    LCDOUT $FE,$80,"SAAT  ",DEC2 SAAT,"/",DEC2 DAK,"/",DEC2 SN                                     
    LCDOUT $FE,$C0,"TARiH ",DEC2 GUN,"/",DEC2 AY,"/20",DEC2 YIL
    pause 200
    RETURN

efeworld

hatamı gördüm düzelttim.biraz erken davrandım galiba hocam

F®T

Hatanı yazda diğer okuyanlara belki faydalı olur. ;D
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

efeworld

Tanimlamalarda okey butonu icin porte.0 vermistim fakat ana programda portd.0 ibaresi var o yuzden problem olmus

Powered by EzPortal