pıc16f84a ile lcdye yazı yazdırmada sorun..

Başlatan fox1903, 30 Nisan 2011, 21:34:15

fox1903

merhabalar. bitirme ödevim hakkında bi sorunum var. proje seri porttan atx-34 arx-43 kullanarak lcdye yazı yazdırmak istiyoruz. fakat hoca programı c++ ile yazmamamı söyledi.. şimdi bi program buldum ama derleyince hata veriyor. bana yardımcı olabilirmisiniz. bu programı nasıl düzeltebilirim...


#include <pic.h>
#include <delay.c>
#define RS RA0
#define RW RA1
#define EN RA2
#define RX RB7
#define bit_set(var,bitno) ((var) |= (1<<(bitno)))
#define bit_reset(var,bitno) ((var) &= ~(1<<(bitno)))

__CONFIG( XT&WDTDIS&PWRTDIS);

void lcd_reset(void);
void clear(void);
void function_set(void);
void on_off(void);
void entry_mode(void);
void data_gonder(unsigned char lcd);
void baud(void);
unsigned char karakter, lcd;
unsigned char x, y, say;
main()
{
TRISB=0b10000000;
TRISA=0;
PORTA=0;
PORTB=0;
RW=0;
T0CS=0;
PSA=0;
PS2=1;
PS1=1;
PS0=1;
DelayMs(100);
lcd_reset();
function_set();
on_off();
entry_mode();
clear();
RS=1;
for(;;)
{
clear();
while(y<=3)
{
TMR0=0;
while(RX==0);
if(TMR0>95)
{
y++;
while(RX==1);
}
else
{
y=0;
}
}
y=0;
while(karakter!='.')
{
karakter=0;
say=0;
while(RX==0);
baud();
while(say<=7)
{
if(RX==1)
bit_set(karakter,7);
else
bit_reset(karakter,7);
karakter=karakter>>1;
say++;
baud();
}
data_gonder(karakter);
while(RX==1);
}
for(x=0;x<=14;x++)
{
DelayMs(200);
}
clear();
}
}
void lcd_reset(void)
{
RS=0;
karakter=1;
for(x=0;x<=2;x++)
{
PORTB=0;
EN=1;
NOP();
EN=0;
DelayMs(1);
}
}
void clear(void)
{
RS=0;
karakter=0b00000001;
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayUs(250);
}
void function_set(void)
{
RS=0;
karakter=0b00101000;
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayMs(1);
}
void on_off(void)
{
RS=0;
karakter=0b00001111;
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayMs(1);
}
void entry_mode(void)
{
RS=0;
karakter=0b00000110;
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayMs(1);
}
void data_gonder(unsigned char lcd)
{
RS=1;
karakter=lcd;
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
}
void baud(void)
{
for(x=0;x<16;x++)
{
DelayUs(215);
}
}


lütfen yardım edin...

Ruzgarbey

merhaba.
projenizi hangi dilde yazmak istiyorsunuz?
PicBasic Bölümüne C dilinde Kod yazmışsınız.hangi dilde yazacağınızı belirtirseniz yardımımız olabilir.kolay gelsin ?
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

fox1903

c dilinde yazmam gerekli.. yanlış yere yazdıgım için özür dilerim kafam o kadar karışıktıki farkrdememişimm...

Ruzgarbey

tekrar merhaba. öncelikle bilgisayarına bir CCS Compiler kur. Example bölümünde LCD ile ilgili örnekler mevcut ve kullanımıda çok basit.ARX-34 transparan bir modül olmadığı için ana programda RX pinini devamlı kontrol et.
while(1)
{
// RX pinine Data geldimi
///  vs ....

}
istenen data geldiğinde LCD ye yazdırırsın. RX pinini devamlı kontrol etmemizin amacı kullandığınız alıcı transparan olmadığı için.bu modül devamlı olarak out pininden RF Gürültü bilgisi gönderir.Bu bilgiyi ayırıp gerçek bilgiyi almak için bir döngü kurmalısınız.kolay gelsin.
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK