Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

kutuphane, ekeleme olsuturma

Başlatan eseneren, 25 Ocak 2011, 00:17:12

eseneren

Selamlar
Aşağıdaki fonksiyonları yazıyorum ve bir cok projede kullanıyorum surekli kodlarda asagı yukarı gıtmemek (Code Folding enabled) ıcın bunu "lcd.c" olarak mı "lcd.h" olarakmı kaydedıp kodumun basında yazmam lazım hep tek dosya ıle calıstım mplab da view-projects deyınce gelen pencereyı kullanmayı bılmıyorum. Hi-tech diye arıyorum hi-tech ile ilgili degil Mplab dokumanlarına bakıyorum onunlada alakalı degıl A dan Z ye C kıtabı var onuda kurcaladım. Sanırım bu bir kultur o da bende yok malesef :) yol gosteren yada bılen bahsederse sevınırım.


void lcd_chardefine(const char k)		// Karakter tanımlama
{
lcd_command(cgram);					// CGRAM'e gec
	for(i=0;i<8;i++)					// Continous dizisindeki elemanları 	
		lcd_data(continous_value[k+i]);	// karakter olarak tanımlıyor
lcd_command(ddram);					// DDRRAM'e gec
}//
void lcd_go(const char x,const char y)	        // LCD imlec konumlandırma
{
if(x==0)
	lcd_command(128+y);
	else if(x==2)
		lcd_command(148+y);
		else if(x==1)
			lcd_command(192+y);
				else if(x==3)
					lcd_command(212+y);
}
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

PARSIC

merhabalar...öncelikle proje dosyanız ana program dosyası ve burda yayınladığınız dosyadan mı oluşuyor
********************************************************************HI-TECH*******************************************************************

eseneren

Tum olarak bu degıl ama maın fonksıyonu da ıcınde lakın sadece bu ıkı fonsıyonu eklemek ıstesem ne yapmam lazım ?
(gerekli ise tum kodu da ekleyeyım kırlılık olmasın dıye eklemedım).
Yanı bır cok fonksıyondan olusan programımın sadece maın fonksıyonunu kodluyorum dıgerlerını mısal lcd.h olaak kaydetmek ve kullanmak ıstıyorum.
Denedım lakın beceremedım.
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

arslan74

Merhaba,

Tüm projeyi buraya upload edersen sorunun belli olur. Bu şekilde kesin bir şey söylenmez.

Selmlar


eseneren

Yazdıgım kod hepsi bu kadar ben surekli main fonsıyonu ıle oynuyorum o sebeple #define vs hepsını bır kutuphane yapıp
************
include htc
include delay
inlude lcd
main()
************
sekılde olmasını nıyetındeyım


#include <htc.h>
#include "delay.c" 
#define Xtal_FREQ 20Mhz
#define Clear	RD2
#define Enter	RD3
#define Beep	RD1

__CONFIG(HS & UNPROTECT & WDTDIS & LVPDIS & PWRTDIS & BORDIS );

void initialize();
void init_lcd();
void def_char(const char sabit);
void rakam();
void write_str(const char *s);
void go(const char x,const char y);
void reset();
void cicek(const char sabit);
unsigned int adc(void);

unsigned char i,wait=1,kdigit=7,fatal,fatal2=0,fatal3=0;
unsigned int adc_v=0,epnum=0,x=0,temp=0,number=0,key=12345,try=0;

unsigned char continous_value[]={14, 17, 19, 21, 25, 17, 14, 0,
									4, 12, 4, 4, 4, 4, 14, 0,
									14, 17, 1, 2, 4, 8, 31, 0,
									31, 2, 4, 2, 1, 17, 14, 0,
									2, 6, 10, 18, 31, 2, 2, 0,
									31, 16, 30, 1, 1, 17, 14, 0,
									6, 8, 16, 30, 17, 17, 14, 0,
									31, 1, 2, 4, 8, 8, 8, 0,
									14, 17, 17, 14, 17, 17, 14, 0,
									14, 17, 17, 15, 1, 2, 12, 0,
									0,0,0,0,0,0,0,0};
void main(void)							// Ana fonksiyon alanı
{
initialize();
init_lcd();
def_char(20);
reset();
for(i=0;i<20;i++)DelayMs(50);
go(1,6);
write_str("WELLCOME");					// Wellcome mesajı
for(i=0;i<20;i++)DelayMs(250);

beep();
for(i=0;i<10;i++)DelayMs(250);
beep();
for(i=0;i<10;i++)DelayMs(250);
beep();

for(;;)
{
go(1,0);
write_str("                    ");		// Ekranın bir parcasını temizle
go(1,5);
write_str("ENTER CODE");				// Enter Kod yaz
if(Enter==1)
{
	fatal=adc_v%8;
	if(!(fatal==0)||(fatal==1)||(fatal==2))
	goto CIKLAN;
	else 
	fatal=(int)(adc_v/8);
	
if((kdigit>6)&&(kdigit<12))
	{		
	try=(int)((try*10)+(adc_v/8));
	go(2,kdigit);
	cicek((int)((adc_v/8)+48));
	kdigit++;
			Beep=1;
			for (i=0;i<5;i++)DelayMs(50);
			Beep=0;
	}
	if(kdigit==12)
		{
		if(key==try)
		{	
			
			go(1,0);
			write_str("                    ");
			go(1,3);
			write_str("CODE  ACCEPTED");
			
			kdigit=7;
			go(2,7);
			write_str("     ");
			try=0;
			
			Beep=1;
			for (i=0;i<10;i++)DelayMs(50);
			Beep=0;
			for (i=0;i<20;i++)DelayMs(200);
			Beep=1;
			for (i=0;i<10;i++)DelayMs(50);
			Beep=0;
	
			for(i=0;i<50;i++)DelayMs(100);
		
		}else
		{
			go(1,0);
			write_str("                    ");
			go(1,4);
			write_str("CODED DENIED");

			kdigit=7;
			go(2,7);
			write_str("     ");
			try=0;

			Beep=1;
			for (i=0;i<30;i++)DelayMs(200);
			Beep=0;
			
			for(i=0;i<40;i++)DelayMs(250);

			
		
		}
		go(1,0);
		write_str("                    ");
		go(1,5);
		write_str("ENTER CODE");
		}
CIKLAN:
for(i=0;i<10;i++)DelayMs(100);
}
if(Clear==1)
{
kdigit=7;
go(2,7);
write_str("     ");
try=0;
Beep=1;
for (i=0;i<10;i++)DelayMs(100);
Beep=0;
for(i=0;i<10;i++)DelayMs(100);
}
adc_v=(int)(adc()/14);					// ADC cevrim baslasin
def_char(adc_v);						// CGRAM karakter olusturuyor 

fatal2=adc_v%8;
if((fatal2==0)||(fatal2==1)||(fatal2==2))
{
	fatal2=adc_v/8;
	if(!(fatal3==fatal2))
	{
	Beep=1;
	for (i=0;i<5;i++)DelayMs(50);
	Beep=0;
	fatal3=fatal2;
	}
}
go(2,kdigit);							// 1-2-3-4 gecıs ıcın adc_v
cicek(0);								// degeri ile cont..value dan cekilir
for(i=0;i<10;i++)DelayMs(100);
}}

void rakam()							// Ekrana 4 Hane seklınde sayı basar
{
RD6=1;
x=(number-number%1000)/1000;
DelayMs(wait);
PORTB=48+x;
RD7=1;
RD7=0;

RD6=1;
x=((number-number%100)/100)%10;
DelayMs(wait);
PORTB=48+x;
RD7=1;
RD7=0;

RD6=1;
x=(number/10)%10;
DelayMs(wait);
PORTB=48+x;
RD7=1;
RD7=0;

RD6=1;
x=number%10;
DelayMs(wait);
PORTB=48+x;
RD7=1;
RD7=0;
}


void def_char(const char k)				// Karakter tanımlama;
{
RD6=0;							// CGRAM'e gec
DelayUs(200);
PORTB=64; 		
RD7=1;
RD7=0;
RD6=1;							// Karakter tanımlama
DelayUs(200);
for(i=0;i<20;i++)
{
DelayMs(wait);
PORTB=continous_value[k+i];
RD7=1;
RD7=0;
}
RD6=0;							// CGRAM'dan cık
DelayUs(200);
PORTB=128;
RD7=1;
RD7=0;
}
void go(const char x,const char y)
{
RD6=0;				
DelayUs(200);
if(x==0)
{
PORTB=128+y;
RD7=1;
RD7=0;
}else if(x==2)
{
PORTB=148+y;
RD7=1;
RD7=0;
}else if(x==1)
{
PORTB=192+y;
RD7=1;
RD7=0;
}else if(x==3)
{
PORTB=212+y;
RD7=1;
RD7=0;
}}	// LCD imlec konumlandırma
void cicek(const char k)				// CGRAM den bir karakter basar
{
RD6=1;
DelayUs(200);
PORTB=k;
RD7=1;
RD7=0;
} 
void write_str(const char *str)			// LCD'ye string ifade gönderiliyor
{
RD6=1;							
DelayUs(200);
while(*str)
{
DelayUs(200);
PORTB=*str;
RD7=1;
RD7=0;
*str++;
}}

unsigned int adc(void)					// ADC cevrimi yapılsın
{
CHS2=0;									// AN0 seçiliyor
CHS1=0;
CHS0=0;
DelayUs(200);
ADGO=1;									// Cevrim basla
while(ADGO);
DelayUs(200);
number=(int)((ADRESH*256+ADRESL));		// cevrim number degıskenıne atanır 
return(number);
}
void reset()							// LCD resetlenir,ekranı temizler.
{
RD6=0;
DelayMs(wait);
PORTB=1;
RD7=1;
RD7=0;
}
void init_lcd()
{
DelayMs(250);
DelayMs(wait);
PORTB=0b00111100; 		// 2 line
RD7=1;
RD7=0;
DelayMs(wait);
PORTB=0b00001100; 		// display cursor on blink off
RD7=1;
RD7=0;
DelayMs(wait);
PORTB=0b00000001;
RD7=1;
RD7=0;
DelayMs(wait);
PORTB=0b00000011;
RD7=1;
RD7=0;
DelayMs(wait);
}						// LCD acılır ve ayarları yapılır
void initialize()						// I/O portları ve PIC ayarlanır  
{
TRISA=0x03; 							// Analog giris
PORTA=0x00;
TRISB=0x00;								// LCD icin cıkıs
PORTB=0x00;
TRISC=0x00;
PORTC=0x00;
TRISD=0b00001100;
PORTD=0x00;

PCFG3=1; 								// AN0 analog
PCFG2=1;
PCFG1=1;
PCFG0=0;
ADFM=1;									// Sağa dayalı yazılıyor
ADON=1;									// ADC açılıyor
/*
CCPR1L=0x3E; 							// Duty registere 250 yükleniyor
CCP1X=1;								// Duty cycle 1ms periyodunda
CCP1Y=0;

T2CKPS1=1;								// Prescaler 1:16 oluyor
T2CKPS0=1;

TOUTPS3=0;								// Postscale 1:1 oluyor	
TOUTPS2=0;
TOUTPS1=0;
TOUTPS0=0;


CCP1M2=1;
CCP1M3=1;
TMR2ON=1;								// Timer 2 çalıGtırılıyor
*/
}
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

sigmoid

mplab da view-projects şeklinde çıkan pencerede source files, header files, object files şeklinde gider.

source files üzerinde sağ tuşa tıklayıp add files ile  c uzantılı dosyaları ekle
header files üzerinde sağ tuşa tıklayıp add files ile  h uzantılı dosyaları ekle

sonrada c uzantılı bir dosya oluştur. ben genellikle main.c adını vermeyi tercih ediyorum. Bu dosyayıda Source files altına ekle ve içine kodları aşağıdaki gibi yaz.

#include <htc.h>
#include "delay.h"
#include "lcd.h"

void fonksiyon(char sayi);

void main()
{
}


void fonksiyon(char sayi)
{

}



şeklinde gidersin.
dikkat edersen sadece h uzantılı dosyaları include ettim. delay.h delay.c  lcd.h lcd.c dosyaları projenle aynı klasörde olsun.

kolay gelsin.

eseneren

Abdullah ben deıdıgnden anladıgım kadarı ıle yazdıgım programdan maın fonks cıkartıp hem .c hemde .h olarak kaydedecegım dıyelım kı adı adbullahozel olarak kaydettım bunu
1-wıev-project kısmında ıkını de eklıyorum
2- ınclude olarak asıl programa satır olarak eklenecek
3- aynı klasore dosyalar eklenecektır.
ana programda bu sekılde olacak?

#include <htc.h>
#include "delay.h"
#include "lcd.h"
#include "abdullahozel.h"

void main()
{
}

Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

sigmoid


eseneren

libb.h olarak
#define Enable	RD7
#define R_S		RD6

extern void go(const char x,const char y);


libb.c olarak
#include <htc.h>
#include "libb.h"

void go(const char x,const char y)
{
R_S=0;				
if(x==0)
{
PORTB=128+y;
Enable=1;
Enable=0;
}else if(x==2)
{
PORTB=148+y;
Enable=1;
Enable=0;
}else if(x==1)
{
PORTB=192+y;
Enable=1;
Enable=0;
}else if(x==3)
{
PORTB=212+y;
Enable=1;
Enable=0;
}}	// LCD imlec konumlandırma



main olarak da
#include <htc.h>
#include "libb.h"

void main(void)
{
go(0,0);
	
}


Bu dosyaları olusturdum her seferınde fonksıyonu yapıstırmakdan sa libb.h ve libb.c olarak projects bolumune eklıyorum kod kalabalıgından kurtuldum.
Sadece bir değil daha fazla fonksiyonlarıda ekleme sansımız var.
(Derleme hata vermedi fiziksel olarak denemedim)

Tesekkur ederim beyler

Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk