piclab kartındaki lcd konfigirasyonu

Başlatan oas, 16 Ocak 2007, 17:57:19

oas

pic c'nin kütüphanesindeki <lcd.c> makrosunda hd44780 veya muadili lcd için
portA ve portB pinleri kullanılıyor.piclab kartında ise E ve D portları kullanılıyor.benim problemim şu:
lcd.c dosyasında portları uygun şekilde değiştirdim fakat lcd.c de pinler D(orjinalinde B)D0 D1 D2 D3 LCD nin 11- 14 pinlerine bağlanıyor. piclabda ise bağlantı RD0-7.pin(lcd) RD1-8.....RD7-14 olarak bağlanıyor.bu 8bit konfigirasyonunda.4 bit konfigirasyonunda ise PORTD4-PORTD7 bacaklarını kullanıyor.dolayısıyla pic c ile derlemede lcd çalışmıyor.uygun duruma getirmem için ne yapmalıyım?

lcd.c
/*
* LCD interface example
* Uses routines from delay.c
* This code will interface to a standard LCD controller
* like the Hitachi HD44780. It uses it in 4 bit mode, with
* the hardware connected as follows (the standard 14 pin
* LCD connector is used):
*
* PORTD bits 0-3 are connected to the LCD data bits 4-7 (high nibble)
* PORTE bit 0 is connected to the LCD RS input (register select)
* PORTE bit 1 is connected to the LCD EN bit (enable)
*
* To use these routines, set up the port I/O (TRISE, TRISD) then
* call lcd_init(), then other routines as required.
*
*/

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

static bit LCD_RS @ ((unsigned)&PORTE*8+0); // Register select
static bit LCD_EN @ ((unsigned)&PORTE*8+1); // Enable

#define LCD_STROBE ((LCD_EN = 1),(LCD_EN=0))


/* write a byte to the LCD in 4 bit mode */

void
lcd_write(unsigned char c)
{
PORTD = (PORTD & 0xF0) | (c >> 4); //PORTD = (PORTD & 0xF0) | (c >> 4);
LCD_STROBE;
PORTD = (PORTD & 0xF0) | (c & 0x0F); //PORTD = (PORTD & 0xF0) | (c & 0x0F);
LCD_STROBE;
DelayUs(40);
}

/*
* Clear and home the LCD
*/

void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
DelayMs(2);
}

/* write a string of chars to the LCD */

void
lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}

/* write one character to the LCD */

void
lcd_putch(char c)
{
LCD_RS = 1; // write characters
PORTD = (PORTD & 0xF0) | (c >> 4); //PORTD = (PORTD & 0xF0) | (c>> 4);
LCD_STROBE;
PORTD = (PORTD & 0xF0) | (c & 0x0F); //PORTD = (PORTD & 0xF0) | (c & 0x0F);
LCD_STROBE;
DelayUs(40);
}


/*
* Go to the specified position
*/

void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}

/* initialise the LCD - put into 4 bit mode */

void
lcd_init(void)
{
LCD_RS = 0; // write control bytes
DelayMs(15); // power on delay
PORTD = 0x3; // attention!
LCD_STROBE;
DelayMs(5);
LCD_STROBE;
DelayUs(100);
LCD_STROBE;
DelayMs(5);
PORTD = 0x2; // set 4 bit mode
LCD_STROBE;
DelayUs(40);
lcd_write(0x28); // 4 bit mode, 1/16 duty, 5x8 font
lcd_write(0x08); // display off
lcd_write(0x0F); // display on, blink curson on
lcd_write(0x06); // entry mode
}

arslan74


semesu

mrb gonderdıgınz linkde dosya bulunamadı dıyor tekrar yukleyebılırmısınız?