Nokia 3310 Lcd ile saat program sorunu.

Başlatan matador, 29 Kasım 2010, 18:23:56

matador

#include <htc.h>
#include "3310.h"
#include "delay.h"
#include "ds1302.h"
#include "ds18b20.h"

#define sec RA0
#define art RA1
#define az RA2
#define mod RA3
#define yak RB0


void main(void)
{
	unsigned char gun,ay,yil,hafta,saat,dakka,saniye;
	
	int a=0;
	int	b=0;
	int	c=0;
	int	d=2;
	int	e=0;
	int	f=0;
	int g=0;
	int ayar=0;
	int s=0;
	int y=0;
	int sal=0;
	int san=0;
	int dak=0;
	
	ADCON1=0x07;
	TRISA=0xFF;
	TRISB=0x00;
	TRISD=0x00;
	TRISE=0x00;
	PORTB=0x00;
	PORTD=0x00;
	PORTE=0x00;
	
	nokia_init();
	ds1302_init();
	
	rtc_set_datetime(a,b,c,d,e,f,0);
	
	
	for(;;)
	{	
		rtc_get_date(&gun,&ay,&yil,&hafta);
		nokia_gotoxy(2,0);
		nokia_print(gun/10+48);
		nokia_print(gun%10+48);
		nokia_printchar(":");
		nokia_print(ay/10+48);
		nokia_print(ay%10+48);
		nokia_printchar(":");
		nokia_print(yil/10+48);
		nokia_print(yil%10+48);
		nokia_gotoxy(13,2);
		switch(hafta)
		{
			case 1: nokia_printchar("Pazar");break;
			case 2: nokia_printchar("Pazartesi");break;
			case 3: nokia_printchar("Sali");break;
			case 4: nokia_printchar("Carsamba");break;
			case 5: nokia_printchar("Persembe");break;
			case 6: nokia_printchar("Cuma");break;
			case 7: nokia_printchar("Cumartesi");break;
		}
		
		rtc_get_time(&saat,&dakka,&saniye);
		nokia_gotoxy(30,4);
		nokia_print(saat/10+48);
		nokia_print(saat%10+48);
		nokia_printchar(":");
		nokia_print(dakka/10+48);
		nokia_print(dakka%10+48);
		nokia_printchar(":");
		nokia_print(saniye/10+48);
		nokia_print(saniye%10+48);
		
		if(sec==1)
		{
			while(sec);
			if(ayar>6)
				ayar=0;
			ayar++;
		}

		if(ayar==1)
		{
			nokia_gotoxy(1,0);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(gun/10+48);
			nokia_print(gun%10+48);			
			if(art==1)
				a=a+1;
			if(az==1)
			{
				while(az);
				a=a-1;
			}
			if(a>31)
				a=1;
			if(a<1)
				a=31;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);
		}
		if(ayar==2)
		{
			nokia_gotoxy(18,0);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(ay/10+48);
			nokia_print(ay%10+48);	
			if(art==1)
				b=b+1;
			if(az==1)
			{
				while(az);
				b=b-1;
			}
			if(b>12)
				b=1;
			if(b<1)
				b=12;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);
		}
		if(ayar==3)
		{
			nokia_gotoxy(33,0);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(yil/10+48);
			nokia_print(yil%10+48);	
			if(art==1)
				c=c+1;
			if(az==1)
			{
				while(az);
				c=c-1;
			}
			if(c>99)
				c=0;
			if(c<0)
				c=99;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);
		}
		if(ayar==4)
		{
			nokia_gotoxy(12,2);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(hafta/10+48);
			nokia_print(hafta%10+48);	
			if(art==1)
				d=d+1;
			if(az==1)
			{
				while(az);
				d=d-1;
			}
			if(d>7)
				d=1;
			if(d<1)
				d=7;
			while(art);
			nokia_gotoxy(13,2);
			switch(d)
			{
				case 1: nokia_printchar("Pazar");break;
				case 2: nokia_printchar("Pazartesi");break;
				case 3: nokia_printchar("Sali");break;
				case 4: nokia_printchar("Carsamba");break;
				case 5: nokia_printchar("Persembe");break;
				case 6: nokia_printchar("Cuma");break;
				case 7: nokia_printchar("Cumartesi");break;
			}
			rtc_set_datetime(a,b,c,d,e,f,g);
			s++;
			if(s==1)
				nokia_clean_ddram();
			if(s>1)
				s=0;			
			rtc_set_datetime(a,b,c,d,e,f,g);			
		}
		if(ayar==5)
		{
			nokia_gotoxy(28,4);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(saat/10+48);
			nokia_print(saat%10+48);			
			if(art==1)
				e=e+1;
			if(az==1)
			{
				while(az);
				e=e-1;
			}
			if(e>23)
				c=0;
			if(e<0)
				e=23;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);			
		}
		if(ayar==6)
		{
			nokia_gotoxy(47,4);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(dakka/10+48);
			nokia_print(dakka%10+48);			
			if(art==1)
				f=f+1;
			if(az==1)
			{
				while(az);
				f=f-1;
			}
			if(f>59)
				f=0;
			if(f<0)
				f=59;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);			
		}
		if(az==1)
		{
			while(az);
			y=y+1;
			if(y==1)
				yak=1;
			else if(y==2)
			{
				yak=0;
				y=0;
			}
		}	
	}
}


Kodun tamamı bu şekilde.   
Sormak istediğim sorular ise;
1) Saati ayarlamak için kısa bir yol önerebilir misiniz?
    Saati ayarlayan kısım:
if(sec==1)
		{
			while(sec);
			if(ayar>6)
				ayar=0;
			ayar++;
		}

		if(ayar==1)
		{
			nokia_gotoxy(1,0);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(gun/10+48);
			nokia_print(gun%10+48);			
			if(art==1)
				a=a+1;
			if(az==1)
			{
				while(az);
				a=a-1;
			}
			if(a>31)
				a=1;
			if(a<1)
				a=31;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);
		}
		if(ayar==2)
		{
			nokia_gotoxy(18,0);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(ay/10+48);
			nokia_print(ay%10+48);	
			if(art==1)
				b=b+1;
			if(az==1)
			{
				while(az);
				b=b-1;
			}
			if(b>12)
				b=1;
			if(b<1)
				b=12;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);
		}
		if(ayar==3)
		{
			nokia_gotoxy(33,0);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(yil/10+48);
			nokia_print(yil%10+48);	
			if(art==1)
				c=c+1;
			if(az==1)
			{
				while(az);
				c=c-1;
			}
			if(c>99)
				c=0;
			if(c<0)
				c=99;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);
		}
		if(ayar==4)
		{
			nokia_gotoxy(12,2);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(hafta/10+48);
			nokia_print(hafta%10+48);	
			if(art==1)
				d=d+1;
			if(az==1)
			{
				while(az);
				d=d-1;
			}
			if(d>7)
				d=1;
			if(d<1)
				d=7;
			while(art);
			nokia_gotoxy(13,2);
			switch(d)
			{
				case 1: nokia_printchar("Pazar");break;
				case 2: nokia_printchar("Pazartesi");break;
				case 3: nokia_printchar("Sali");break;
				case 4: nokia_printchar("Carsamba");break;
				case 5: nokia_printchar("Persembe");break;
				case 6: nokia_printchar("Cuma");break;
				case 7: nokia_printchar("Cumartesi");break;
			}
			rtc_set_datetime(a,b,c,d,e,f,g);
			s++;
			if(s==1)
				nokia_clean_ddram();
			if(s>1)
				s=0;			
			rtc_set_datetime(a,b,c,d,e,f,g);			
		}
		if(ayar==5)
		{
			nokia_gotoxy(28,4);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(saat/10+48);
			nokia_print(saat%10+48);			
			if(art==1)
				e=e+1;
			if(az==1)
			{
				while(az);
				e=e-1;
			}
			if(e>23)
				c=0;
			if(e<0)
				e=23;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);			
		}
		if(ayar==6)
		{
			nokia_gotoxy(47,4);
			nokia_printchar(" ");
			DelayMs(70);
			nokia_print(dakka/10+48);
			nokia_print(dakka%10+48);			
			if(art==1)
				f=f+1;
			if(az==1)
			{
				while(az);
				f=f-1;
			}
			if(f>59)
				f=0;
			if(f<0)
				f=59;
			while(art);
			rtc_set_datetime(a,b,c,d,e,f,g);			
		}


2) Ben data bank tarzında bir şey yapmak istiyordum fakat bu programa bir kaç satır daha eklediğim de hata alıyorum Hi tech lite kullanıyorum bu sürümde satır kısıtlaması var mı?

3) Son olarak bir fonksiyon yazdığım bu fonksiyonun içinden 3 değişkene ait değeri nasıl main fonksiyonuna alabilirim?

justice_for_all

similasyondami calisiyosunuz yoksa gercek ortamdami??
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

matador

Alıntı yapılan: justice_for_all - 29 Kasım 2010, 21:15:24
similasyondami calisiyosunuz yoksa gercek ortamdami??

Simülasyonda çalışıyorum. Yalnız benim sıkıntım simülasyon değil saat ve tarih ayar için daha kısa bir program mantığı var mı? Ve ben programın bu haline bir kaç alt program daha yazdığımda hex e çevirirken hata alıyorum.


Alıntı yapılan: FxDev - 29 Kasım 2010, 22:19:57
Kodlar bana ait ise eğer 3 yerden teyit aldım çalıştığına dair eğer sorununuz ekranda ise.
Evet size ait.  Program çalışıyor. Ben menu adı altında bir int oluşturdum. mod butonuna basınca menu birer artıyor ve her artışında farklı bir menü ekrana geliyor. örneğin 0 iken saat ve tarih ekranda varken 1 olunca kronometre geliyo ekrana.  Bunu 7110 ekranı ile yaptım. Bugün gidip aradım 7110 ekranı bulamadım 3310 buldum onu aldım şimdi de düşüncemi bu ekrana uygulamak istedim fakat dediğim gibi lite versiyonla ilgili bir durum sanırım daha fazla kod yazınca hex e çevirmiyor.  Sonuçta pro versiyonunu kullanmam için satın almam gerekiyo açıkcası almaya da hiç niyetim yok.   Bunu kütüphane dosyaları ile halletmek daha mantıklı olacak gibi geliyor bana.

sigmoid

ben std versiyonunu kullaniyorum. eğer bir fonksiyonun içeriğinde çok fazla kod varsa derleyemiyor. bundan dolayi bu tip fonksiyonlari kendi içinde küçük fonksiyonlara parcaliyorum. lite versiyonunun e fazla kaç kb kod ürettiğini bilmiyorum.

3310 lcdyi kaça aldiniz. bende bir ara bu lcd ile çalişmak istiyorumda.

teşekkürler.

ferit06

3310 lcd fiatları sizin pazarlık yeteneğinize kalmıştır 3TL de olur 10 TL de telefon  teknik servisleri isteğiniz kadarını söküp veriyorlar.

matador

Alıntı yapılan: abdullaho - 30 Kasım 2010, 09:52:25
ben std versiyonunu kullaniyorum. eğer bir fonksiyonun içeriğinde çok fazla kod varsa derleyemiyor. bundan dolayi bu tip fonksiyonlari kendi içinde küçük fonksiyonlara parcaliyorum. lite versiyonunun e fazla kaç kb kod ürettiğini bilmiyorum.

3310 lcdyi kaça aldiniz. bende bir ara bu lcd ile çalişmak istiyorumda.

teşekkürler.

Karaköy veya tahtakale civarında 10 lira gibi bir fiyattan alabilirsin ben 12 ye aldım. Avcılarda bir telefon satıcısından.

sigmoid

eskiden 3310 lcdleri karakter lcdden ucuzdu, şimdi tam tersi desenize. 5 TL karakter lcd, 20 tlye de 128x64grafik veriliyor. Açıkcası 10 lira bana fazla geldi.

matador