avatar_efeworld

dotmatrix saat uygulaması

Başlatan efeworld, 06 Mart 2016, 13:33:30

efeworld

sevgili hocam ve arkadaşlar.ete hocamın yapmış olduğu saat uygulamasını anlamaya çalışıyorum fakat takıldığım yerler oluyor.meselaDEFINE OSC 4
ESN     VAR BYTE
SN       VAR BYTE 60
DAK    VAR BYTE 61
SAAT   VAR BYTE 62

TEMP   VAR BYTE 63
YIL       VAR BYTE 64
AY        VAR BYTE 65
GUN     VAR BYTE 66
HAFGUN VAR BYTE 67
YERI    VAR BYTE 68
VERI    VAR BYTE 69
HARF   VAR BYTE 70
SAYI     VAR BYTE 71
I        VAR  BYTE72
X       VAR  BYTE 73
W      VAR  BYTE 74
FLASH  VAR BYTE 75
SON      VAR   BYTE
Z           VAR BYTE bu sıralamalar ne için kullanılıyor ayrıca flash bit diye bişey var.flash bit ne işe yarıyor.sonra portbnin 0.biti ne iş yapıyor değişkenler hangi amaçla kullanılıyor daha detaylı bişekilde programı anlatırsanız çok sevinim
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, BOD_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, LVP_OFF
@ DEVICE pic16F628, CPD_OFF
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
CMCON=7
TRISA=%11100000
TRISB=%00000000
PORTA=0
PORTB=255

DEFINE OSC 4
ESN     VAR BYTE
SN       VAR BYTE 60
DAK    VAR BYTE 61
SAAT   VAR BYTE 62

TEMP   VAR BYTE 63
YIL       VAR BYTE 64
AY        VAR BYTE 65
GUN     VAR BYTE 66
HAFGUN VAR BYTE 67
YERI    VAR BYTE 68
VERI    VAR BYTE 69
HARF   VAR BYTE 70
SAYI     VAR BYTE 71
I        VAR  BYTE72
X       VAR  BYTE 73
W      VAR  BYTE 74
FLASH  VAR BYTE 75
SON      VAR   BYTE
Z           VAR BYTE

SUT1   VAR BYTE[8]80
SUT2   VAR BYTE[8]88
SUT3   VAR BYTE[8]96
SUT4   VAR BYTE[8]104
SUT5   VAR BYTE[8]112
SUT6   VAR BYTE[8]120
SUT7   VAR BYTE[8]160
SUT8   VAR BYTE[8]168

SYMBOL CLK=PORTA.0
SYMBOL DTA=PORTA.1
SYMBOL STL=PORTA.2
SYMBOL SLC=PORTA.3
SYMBOL SDA=PORTA.4
SYMBOL SEC=PORTA.5
SYMBOL ART=PORTA.6
SYMBOL AZL=PORTA.7

harf=":"
gosub NOKTA

BASLA:
IF SEC=0 THEN AYAR 'SEC tuşuna  basılmış ise ayar kısmına git
GOSUB ZAMANOKU 'RTC den zamanı oku

GOSUB SAATAL 'Saat bilgisini displayde gösterecek hale  çevir
GOSUB DAKAL 'Dakika bilgisini  displayde gösterilecek hale çevir
GOSUB SNAL 'Saniye bilgisini  displayde gösterilecek hale çevir.

SON=29 'gösterim süresini tekrar yaparak ayarlıyor  yaklaşık 1 sn den daha az sürmeli
GOSUB GOSTER
GOTO BASLA

GOSTER:
FLASH=0
FOR X= 1 TO SON
IF X>(SON/2) THEN FLASH=Z  'Z=3 , Z=24 , Z=192  FLASH SAYILARI
FOR I=0 to 7
SAYI=SUT8[I]    '.....SN bilgisi bir  ler hanesi yüklendi
IF FLASH.BIT7=1 THEN SAYI=0
GOSUB AKTAR ' birler hanesi matrix  displayi süren 74HC595′e yüklendi

SAYI=SUT7[I] 'SN onlar hanesi yüklendi
IF FLASH.BIT6=1 THEN SAYI=0
GOSUB AKTAR 'Onlar hanesi bilgisi  74HC595′e yüklendi.

SAYI=SUT6[I] ' ":" işareti bilgileri yüklendi
IF X>=15 THEN SAYI=0
GOSUB AKTAR 'işaret bilgileri  74HC595′e yüklendi

SAYI=SUT5[I] 'Dakika birler hanesi yüklendi
IF FLASH.BIT4=1 THEN SAYI=0
GOSUB AKTAR 'Dakika birler hanesi  74HC595′e yüklendi

SAYI=SUT4[I] 'Dakika onlar hanesi yüklendi
IF FLASH.BIT3=1 THEN SAYI=0
GOSUB AKTAR 'dakika onlar hanesi  74HC595′e yüklendi

SAYI=SUT3[I] ' ":" işareti bilgileri yüklendi
IF X=>15 THEN SAYI=0
GOSUB AKTAR 'işaret bilgileri  74HC595′e yüklendi

SAYI=SUT2[I] 'saat birler hanesi bilgileri yüklendi
IF FLASH.BIT1=1 THEN SAYI=0
GOSUB AKTAR 'saat birler hanesi  74HC595′e yüklendi

SAYI=SUT1[I] 'saat onlar hanesi yüklendi
IF FLASH.BIT0=1 THEN SAYI=0
GOSUB AKTAR 'saat onlar hanesi  74HC595′e yüklendi

STL=1:PAUSEUS 2:STL=0
PORTB.BIT0[I]=0 'satır taraması  yapılıyor önce ilgili bit LOW yapıldı
PAUSEus 1600 'sonra 1600 us beklendi
PORTB.BIT0[I]=1 'sonra ilgili bit  HIGH yapıldı
NEXT
NEXT
RETURN

SAATAL:
HARF=SAAT DIG 1 'saat bilgisi onlar  hanesini al
GOSUB ARA 'karekter koduna göre yer  bilgisini al
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL 'sıra ile sütun  bilgilerini oku ve değişkenlere yerleştir
SUT1[I]=VERI
NEXT

HARF=SAAT DIG 0 'aynı işlemi birler hanesi içinde yap
GOSUB ARA
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL
SUT2[I]=VERI
NEXT
RETURN

DAKAL:
HARF=dak DIG 1
GOSUB ARA
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL
SUT4[I]=VERI
NEXT
HARF=DAK DIG 0
GOSUB ARA
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL
SUT5[I]=VERI
NEXT
RETURN
SNAL:
HARF=sn DIG 1
GOSUB ARA
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL
SUT7[I]=VERI
NEXT

HARF=sn DIG 0
GOSUB ARA
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL
SUT8[I]=VERI
NEXT
RETURN
AKTAR:
SHIFTOUT DTA,CLK,1,[SAYI]
RETURN
NOKTA: ' : işaretine ait sütun  bilgilerini değişkenlere yerleştir.
gosub ARA
TEMP=YERI
FOR I=0 to 7
YERI=TEMP+I
GOSUB DATAAL
SUT3[I]=VERI
sut6[I]=VERI
NEXT
RETURN

ARA:
select case HARF
case " ":YERI=0:return
case ".":YERI=8:return
CASE "/":YERI=16:RETURN
case 0:YERI=24:return
case 1:YERI=32:return
case 2:YERI=40:return
case 3:YERI=48:return
case 4:YERI=56:return
case 5:YERI=64:return
case 6:YERI=72:return
case 7:YERI=80:return
case 8:YERI=88:return
case 9:YERI=96:return
case ":":YERI=104:return
end select
RETURN

DATAAL:
lookup YERI,[$00,$00,$00,$00,$00,$00,$00,$00_   ;boşluk
,$00,$00,$00,$00,$00,$18,$18,$00_   ;nokta
,$06,$0C,$18,$30,$60,$C0,$80,$00_   ;/
,$3C,$66,$6E,$7E,$76,$66,$3C,$00_   ;0
,$18,$38,$18,$18,$18,$18,$7E,$00_   ;1
,$3C,$66,$06,$1E,$30,$66,$7E,$00_   ;2
,$3C,$66,$06,$1C,$06,$66,$3C,$00_   ;3
,$1C,$3C,$6C,$6C,$7E,$0C,$1E,$00_   ;4
,$7E,$60,$7C,$06,$06,$66,$3C,$00_   ;5
,$1C,$30,$60,$7C,$66,$66,$3C,$00_   ;6
,$7E,$66,$06,$0C,$18,$18,$18,$00_   ;7
,$3C,$66,$66,$3C,$66,$66,$3C,$00_   ;8
,$3C,$66,$66,$3E,$06,$0C,$38,$00_   ;9
,$00,$18,$18,$00,$00,$18,$18,$00],VERI ;:
return
'             ,$7C,$CE,$DE,$F6,$E6,$C6,$7C,$00_   ;0
'             ,$30,$70,$30,$30,$30,$30,$FC,$00_   ;1
'             ,$78,$CC,$0C,$38,$60,$CC,$FC,$00_   ;2
'             ,$78,$CC,$0C,$38,$0C,$CC,$78,$00_   ;3
'             ,$1C,$3C,$6C,$CC,$FE,$0C,$1E,$00_   ;4
'             ,$FC,$C0,$F8,$0C,$0C,$CC,$78,$00_   ;5
'             ,$38,$60,$C0,$F8,$CC,$CC,$78,$00_   ;6
'             ,$FC,$CC,$0C,$18,$30,$30,$30,$00_   ;7
'             ,$78,$CC,$CC,$78,$CC,$CC,$78,$00_   ;8
'             ,$78,$CC,$CC,$7C,$0C,$18,$70,$00_   ;9

ZAMANOKU:

I2CRead  SDA,SLC,$D0,$00,[SN,DAK,SAAT]',HAFGUN,GUN,AY,YIL,TEMP]
temp=saat
SAAT=(temp>>4) & $03
saat=saat*10+(temp & $0F)
dak=((dak>>4) & $0F)*10+(dak & $0F)
sn=((sn>>4) & $0F)*10+(sn & $0F)
RETURN

AYAR:
Z=3:SON=16:SN=0
GOSUB SNAL
gosub GOSTER
WHILE SEC=0:WEND
HOUR:
IF SEC=0 THEN MINBIR
IF ART=0 THEN SAAT=SAAT+1
IF SAAT=24 THEN SAAT=0
IF AZL=0 THEN SAAT=SAAT-1
IF SAAT=255 THEN SAAT=23
GOSUB SAATAL
GOSUB GOSTER
GOTO HOUR
MINBIR:
Z=24
GOSUB GOSTER
WHILE SEC=0:WEND
MINUTE:
IF SEC=0 THEN KAYIT
IF ART=0 THEN DAK=DAK+1
IF DAK=60 THEN DAK=0
IF AZL=0 THEN DAK=DAK-1
IF DAK=255 THEN DAK=59
GOSUB DAKAL
GOSUB GOSTER
GOTO MINUTE

KAYIT:

Z=0:sn=0
SAAT=(SAAT DIG 1)<<4+SAAT DIG 0
DAK =(DAK DIG 1)<<4+DAK DIG 0
I2CWrite SDA,SLC,$D0,$00,[SN,DAK,SAAT]
PAUSE 10
WHILE SEC=0:WEND
GOTO BASLA

END

ete

#1
Define OSC 4 , işlemcinin 4 Mhz kristal ile çalıştığını programa bildiriyor. Böylece pause ve diğer gecikme komutları buna göre doğru çalışır.
Değişkenlerin yanındaki numaralar her değişkenin hangi hafızaya yerleşeceğini gösterir. Kullanılması zorunlu değildir. Sadece simulasyonda bazı değişkenlerin aldığı değerleri takip etmek için bu şekilde adresleri kendin belirlersin. Hiç numara yazmaz isen derleyici kendisi sıradan bir hafıza numarası vererek değişkenleri yerleştirir. Bu sana şunu anlatıyor. Her bir değişkenin hafızada bir adresi vardır. Basic bunu değişken adı ile özdeşleştirir. Program işlemcide çalışırken bu adresleri göremezsin görmende gerekmez zaten.

Flash BİT değişkeni olup ekranda bir şeyi flash yaptıracak isen bu biti Toggle (bir "1" bir "0" ) yaptırarak ekrandaki karekterin flash yaptırılması sağlanır.

Programa bakarak anlamıyorsan anlatsakda anlamazsın. Anlaman için o düzeyde program ve komut bilgin olması gerekir. Yok ise anlatılsada anlamayacaksın. Genel anlamda dotmatrix ledler ile çalışan bir saat projesi işte.

Ete

efeworld

Hocam sadece göster meüsü altındaki programı detaylı açıklarsanız programı tamamıyla anlamış olurum ilginize teşwkkürler

Powered by EzPortal