Haberler:

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

Ana Menü

MPLAB HI-TECH C yardım

Başlatan erdemildiz, 21 Nisan 2011, 19:48:25

erdemildiz

Delay kütüphanesi
#include <htc.h>	// Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
 #define _XTAL_FREQ 4000000
#endif

/** demonstration of various built-in delay mechanisms */
void main(void){
	while(1){
		NOP();
		_delay(1000);		// delay for 1000 instruction cycles
		CLRWDT();
		__delay_us(400);	// delay for 400 microseconds
		CLRWDT();
		__delay_ms(2);		// delay for 2 milliseconds
		CLRWDT();
	}
}


Keypad kütüphanesi
#define sut1 RD0 // sut1 ifadesi RD0 ifadesine esitleniyor
#define sut2 RD1 // sut2 ifadesi RD1 ifadesine esitleniyor
#define sut3 RD2 // sut3 ifadesi RD2 ifadesine esitleniyor
#define sut4 RD3 // sut3 ifadesi RD3 ifadesine esitleniyor
#define sat1 RD4 // sat1 ifadesi RD4 ifadesine esitleniyor
#define sat2 RD5 // sat2 ifadesi RD5 ifadesine esitleniyor
#define sat3 RD6 // sat3 ifadesi RD6 ifadesine esitleniyor
#define sat4 RD7 // sat4 ifadesi RD7 ifadesine esitleniyor
char keypad_oku(void) // Fonksiyon ismi
{
char tus=0;
PORTD=0x00; // D portu çıkısı sıfırlanıyor
sat1=1; // 1. satır lojik-1 yapılıyor
if(sut1) // 1. sütun okunuyor
{
__delay_ms(20);
tus=1;
}
if(sut2) // 2. sütun okunuyor
{
__delay_ms(20);
tus=2;
}
if(sut3) // 3. sütun okunuyor
{
__delay_ms(20);
tus=3;
}
if(sut4) // 4. sütun okunuyor
{
__delay_ms(20);
tus=0x0A;
}
sat1=0; // 1. satır lojik-0 yapılıyor
sat2=1; // 2. satır lojik-1 yapılıyor
if(sut1) // 1. sütun okunuyor
{
__delay_ms(20);
tus=4;
}
if(sut2) // 2. sütun okunuyor
{
__delay_ms(20);
tus=5;
}
if(sut3) // 3. sütun okunuyor
{
__delay_ms(20);
tus=6;
}
if(sut4) // 4. sütun okunuyor
{
__delay_ms(20);
tus=0x0B;
}
sat2=0; // 1. satır lojik-0 yapılıyor
sat3=1; // 3. satır lojik-1 yapılıyor
if(sut1) // 1. sütun okunuyor
{
__delay_ms(20);
tus=7;
}
if(sut2) // 2. sütun okunuyor
{
__delay_ms(20);
tus=8;
}
if(sut3) // 3. sütun okunuyor
{
__delay_ms(20);
tus=9;
}
if(sut4) // 4. sütun okunuyor
{
__delay_ms(20);
tus=0x0C;
}
sat3=0; // 1. satır lojik-0 yapılıyor
sat4=1; // 4. satır lojik-1 yapılıyor
if(sut1) // 1. sütun okunuyor
{
__delay_ms(20);
tus=0x0E;
}
if(sut2) // 2. sütun okunuyor
{
__delay_ms(20);
tus=0;
}
if(sut3) // 3. sütun okunuyor
{
__delay_ms(20);
tus=0x0F;
}
if(sut4) // 4. sütun okunuyor
{
__delay_ms(20);
tus=0x0D;
}
sat4=0; // 4. satır lojik-0 yapılıyor
return tus; // Fonksiyon "tus" değeri ile geri döner
}


LCD kütüphanesi
#define rs RC0 //Pin tanımlamaları
#define rw RC1
#define e RC2
#define lcd_port PORTB
/* LCD'de kullanilan komutlarin tanimlamasi*/
#define Sil 1 // Ekrani temizler
#define BasaDon 2 // Imleci sol üst köseye getirir
#define SolaYaz 4 // Imlecin belirttigi adres azalarak gider
#define SagaYaz 6 // Imlecin belirttigi adres artarak gider
#define ImlecGizle 12 // Göstergeyi ac, kursor görünmesin
#define ImlecAltta 14 // Yanip sönen blok kursor
#define ImlecYanSon 15 // Yanip sönen blok kursor
#define ImlecGeri 16 // Kursoru bir karakter geri kaydır
#define KaydirSaga 24 // Göstergeyi bir karakter sağa kaydır
#define KaydirSola 28 // Göstergeyi bir karakter sola kaydır
#define EkraniKapat 8 // Göstergeyi kapat (veriler silinmez)
#define BirinciSatir 128 // LCD'nin ilk satir baslangıç adresi
// (DDRAM adres)
#define IkinciSatir 192 // Dkinci satirin baslangıç adresi
#define KarakUretAdres 64 // Karakter üreteci adresini belirle
// (CGRAM adres)
/* LCD'de Kullanilan Fonksiyon Seçimi */
#define CiftSatir8Bit 56 // 8 bit ara birim, 2 satir, 5*7 piksel
#define TekSatir8Bit 48 // 8 bit ara birim, 1 satir, 5*7 piksel
#define CiftSatir4Bit 40 // 4 bit ara birim, 2 satir, 5*7 piksel
#define TekSatir4Bit 32 // 4 bit ara birim, 1 satir, 5*7 piksel
extern void veri_yolla(unsigned char);
extern void lcd_clear(void);
extern void lcd_yaz(const char *s);
extern void lcd_gotoxy(unsigned char x, unsigned char y);
extern void lcd_init(void);
extern void lcd_komut(unsigned char c);
void lcd_busy(void) // 500us bekleme
{
__delay_us(250);
__delay_us(250);
}
void lcd_komut(unsigned char c) // Komut gönderme fonksiyonu
{
rw=0; // LCD'ye yazma yapılacak
rs=0; // LCD'ye komut gönderilecek
e=1; // Düsen kenar tetikleme olduğu için E önce 1
lcd_port = ( c & 0xF0 ); // Yüksek değerlikli bitler gönderiliyor
e=0; // E, 0 yapılıyor
lcd_busy(); //Belirli süre bekleniyor
e=1; // E, 1 yapılıyor
lcd_port = ( (c & 0x0F)<<4 ); // Düsük değerlikli bitler gönderiliyor
e=0; // E, 0 yapılıyor
lcd_busy(); // Belirli bir süre bekleniyor
}
void veri_yolla(unsigned char c)
{
rw=0;
rs=1; // Komut yolladan tek farkı, RS'nin 1 olması
e=1;
lcd_port = ( c & 0xF0 );
e=0;
lcd_busy();
e=1;
lcd_port = ( (c & 0x0F)<<4 );
e=0;
lcd_busy();
}
void lcd_clear(void) // LCD siliniyor
{
lcd_komut(0x1);
__delay_ms(2);
}
void lcd_yaz(const char * s) // LCD'ye string ifade gönderiliyor
{
lcd_busy();
while(*s)
veri_yolla(*s++);
}
void lcd_gotoxy(unsigned char x,unsigned char y) //LCD'nin belli
//bölgesine gidiliyor
{
if(x==1)
lcd_komut(0x80+((y-1)%16));
else
lcd_komut(0xC0+((y-1)%16));
}
void lcd_init() // LCD ilk yükleme ayarları yapılıyor
{
rs = 0;
e = 0;
rw = 0;
__delay_ms(15);
e=1;
lcd_komut(0x02);
__delay_ms(2);
lcd_komut(CiftSatir4Bit);
lcd_komut(SagaYaz);
lcd_komut(ImlecGizle);
lcd_clear();
lcd_komut(BirinciSatir);
}


Ana program
#include <pic.h>
#include "delay.h"
#include "lcd.h"
void main(void) // Ana fonksiyon alanı
{
TRISB=0x00; // LCD için çıkıs
TRISC=0x00;
TRISD=0x0F; // Tus takımı için giris ve çıkıs
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
lcd_init(); // LCD ilk ayarları yapılıyor
lcd_yaz("Basilan Tus=");
for(;;)
{
lcd_gotoxy(1,13); // LCD 1x13'e gidiliyor
while(keypad_oku()!=0); // Keypad değeri 0'dan farklı mı
veri_yolla(keypad_oku()/10+48); // Onlar yazılıyor
veri_yolla(keypad_oku()%10+48); // Birler yazılıyor
}
}


Arkadaşlar HI_TECH MPLAB programında derlediğim zaman


Make: The target "C:\Users\Erdem\Desktop\pic\delay.p1" is up to date.
Make: The target "C:\Users\Erdem\Desktop\pic\hesap.p1" is out of date.
Executing: "C:\Program Files\HI-TECH Software\PICC\9.81\bin\picc.exe" --pass1 C:\Users\Erdem\Desktop\pic\hesap.c -q --chip=16F877A -P --runtime=default --opt=default -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Error   [1098] C:\Users\Erdem\Desktop\pic\hesap.c; 5.1 conflicting declarations for variable "main" (C:\Users\Erdem\Desktop\pic\hesap.c:5)
Warning [361] C:\Users\Erdem\Desktop\pic\hesap.c; 17.7 function declared implicit int

Hatalarını alıyorum.Acaba nedeni nedir?

X-Fi

delay kütüpanesine main başlığı koymuşsunuz ayrıca mantık hatası var o kısımda.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)