t6963.c t6963.h library ler nerede acaba?

Başlatan pcb, 26 Eylül 2010, 22:28:50

pcb

Arkadaşlar 240x128 toshiba kontrolörü olan grafik lcd için aşağıdaki driver ları arıyorum. Forumlarda olan örneklerin hiç birini çalıtıramadım. CCS kütüphanesinde olmaması da çok enteresan.

T6963.c
T6963.h

gevv

#1
düzenleme : kesin kaynak bulundu  :)  ccs c http://www.techtoys.com.hk/Downloads/Download/Microchip/T6963C.zip



umarım aşağıdakiler işe yarar

t6963.c    Code to drive a Toshiba T6963C based graphic LCD module   (by Richard Taylor).

http://www.sourceboost.com/Products/C2C-plus/ExampleCode/t6963/t6963.c.html

/********************************************
* Filename: t6963.c                        *
*                                          *
* Description: Toshiba LCD Driver Functions*
*                                          *
* by Richard Taylor                        *
*                                          *
* Date: 09/02/2003                         *
*******************************************/
/* includes */
#include <system.h>
#include "t6963.h"
/* Global Variables */
void interrupt( void )
{
    disable_interrupt( GIE );
}
main()
{
    unsigned char n, address_h, address_l, x, y;
    unsigned int address;
    /* Initialise the controller */
    lcd_initialise();
    /* Clear Graphic RAM */
    lcd_clear_graphics();
    /* Clear Text RAM */
    lcd_clear_text();
    /* Set Text Mode and Graphics Mode On */
    lcd_write_command(LCD_DISPLAY_MODES_GRAPHICS_ON | LCD_DISPLAY_MODES_TEXT_ON);
    /* Write some data to display */
    lcd_write_text('1', 1, 0);
    lcd_write_text('2', 2, 0);
    lcd_write_text('3', 3, 0);
    lcd_write_text('4', 4, 0);
    lcd_write_text('5', 5, 0);
    lcd_write_text('6', 6, 0);
    lcd_write_text('a', 0, 1);
    lcd_write_text('b', 0, 2);
    lcd_write_text('c', 0, 3);
    lcd_write_text('d', 0, 4);
    lcd_write_text('e', 0, 5);
    lcd_write_text('f', 0, 6);
    /* Set Address Pointer To GRAPHIC Home */
    lcd_write_data(LCD_GRAPHICS_HOME); /* LSB */
    lcd_write_data(LCD_GRAPHICS_HOME >> 8); /* MSB */
    lcd_write_command(LCD_ADDRESS_POINTER_SET);
    /* Plot a few points (Draw an X) */
    for (x=10; x<20; x++)
    {
        y = x;
        lcd_set_pixel(x, y);
        y = 30 - x;
        lcd_set_pixel(x, y);
    }
    for (x=8; x<57; x++)
    {
        lcd_set_pixel(x, 9);
    }
    for (y=8; y<57; y++)
    {
        lcd_set_pixel(9, y);
    }
    /* Display a knight-rider type line */
    while (1)
    {
        for (x=20; x<61; x++)
        {
            lcd_set_pixel(x, 63);
            lcd_set_pixel(x, 64);
            lcd_set_pixel(x, 65);
            delay_ms(100);
            lcd_clear_pixel(x, 63);
            lcd_clear_pixel(x, 64);
            lcd_clear_pixel(x, 65);
        }
        for (x=60; x>21; x--)
        {
            lcd_set_pixel(x, 64);
            delay_ms(200);
            lcd_clear_pixel(x, 64);
        }
    }
}
/********************************************
* Function name: initialise                *
* Description:   Initialise PIC and LCD    *
*******************************************/
void lcd_initialise(void)
{
    /* Set Control Lines to outputs and High */
    LCD_CONTROL = LCD_CONTROL | LCD_WR | LCD_RD | LCD_CE | LCD_CD | LCD_RST;
    LCD_CONTROL_TRIS = LCD_CONTROL_TRIS & (~(LCD_WR | LCD_RD | LCD_CE | LCD_CD | LCD_RST));
    LCD_CONTROL = LCD_WR | LCD_RD | LCD_CE | LCD_CD | LCD_RST;
    /* Set PORTB to inputs */
    LCD_DATA_BUS_TRIS = ALL_INPUTS;
    /* Hold Reset Line for 1ms */
    clear_bit(LCD_CONTROL, LCD_RST_BIT);
    delay_s(2);
    set_bit(LCD_CONTROL, LCD_RST_BIT);
    /* Set Char Gen Up */
    lcd_write_command(LCD_CG_ROM_MODE_OR);
    /* Set Graphic Home Address */
    lcd_write_data(LCD_GRAPHICS_HOME);
    lcd_write_data(LCD_GRAPHICS_HOME >> 8);
    lcd_write_command(LCD_GRAPHIC_HOME_ADDRESS_SET);
    /* Set Graphic Area */
    lcd_write_data(LCD_GRAPHICS_AREA); /* Width of 20 Chars */
    lcd_write_data(0x00);
    lcd_write_command(LCD_GRAPHIC_AREA_SET);
    /* Set Text Home Address */
    lcd_write_data(LCD_TEXT_HOME);
    lcd_write_data(LCD_TEXT_HOME >> 8);
    lcd_write_command(LCD_TEXT_HOME_ADDRESS_SET);
    /* Set Text Area */
    lcd_write_data(LCD_TEXT_AREA); /* Width of 20 Chars */
    lcd_write_data(0x0);
    lcd_write_command(LCD_TEXT_AREA_SET);
}
/********************************************
* Function name: lcd_write_data            *
* Description:   Write Data to LCD         *
*******************************************/
void lcd_write_data(unsigned char data)
{
    /* While BUSY1 and BUSY2 are not 1 */
    while ( (lcd_read_status() & (LCD_STATUS_BUSY1 | LCD_STATUS_BUSY2)) != (LCD_STATUS_BUSY1 | LCD_STATUS_BUSY2));
    /* Clear C/D# */
    clear_bit(LCD_CONTROL, LCD_CD_BIT);
    /* Set Data Lines to Output */
    LCD_DATA_BUS = data;
    LCD_DATA_BUS_TRIS = ALL_OUTPUTS;
    /* Clear CE and WR, set RD */
    clear_bit(LCD_CONTROL, LCD_CE_BIT);
    clear_bit(LCD_CONTROL, LCD_WR_BIT);
    nop();
    nop();
    /* Set CE and RD*/
    set_bit(LCD_CONTROL, LCD_CE_BIT);
    set_bit(LCD_CONTROL, LCD_WR_BIT);
    set_bit(LCD_CONTROL, LCD_CD_BIT);
    /* Set Data Lines to Input */
    LCD_DATA_BUS_TRIS = ALL_INPUTS;
}
/********************************************
* Function name: lcd_read_data             *
* Description:   Read Data From LCD        *
*******************************************/
unsigned char lcd_read_data(void)
{
    unsigned char data;
    /* While BUSY1 and BUSY2 are not 1 */
    while ( (lcd_read_status() & (LCD_STATUS_BUSY1 | LCD_STATUS_BUSY2)) != (LCD_STATUS_BUSY1 | LCD_STATUS_BUSY2));
    /* Clear C/D# */
    clear_bit(LCD_CONTROL, LCD_CD_BIT);
    /* Set Data Lines to Input */
    LCD_DATA_BUS_TRIS = ALL_INPUTS;
    /* Clear CE and RD, set WR */
    clear_bit(LCD_CONTROL, LCD_CE_BIT);
    clear_bit(LCD_CONTROL, LCD_RD_BIT);
    nop();
    /* Read Data Bus */
    data = LCD_DATA_BUS;
    /* Set CE and RD*/
    set_bit(LCD_CONTROL, LCD_CE_BIT);
    set_bit(LCD_CONTROL, LCD_RD_BIT);
    set_bit(LCD_CONTROL, LCD_CD_BIT);
    return data;
}
/********************************************
* Function name: lcd_write_command         *
* Description:   Write Command to LCD      *
*******************************************/
void lcd_write_command(unsigned char data)
{
    unsigned char status;
    /* While BUSY1 and BUSY2 are not 1 */
    while ( (lcd_read_status() & (LCD_STATUS_BUSY1 | LCD_STATUS_BUSY2)) != (LCD_STATUS_BUSY1 | LCD_STATUS_BUSY2));
    /* Set C/D# */
    set_bit(LCD_CONTROL, LCD_CD_BIT);
    /* Set Data Lines to Output */
    LCD_DATA_BUS = data;
    LCD_DATA_BUS_TRIS = ALL_OUTPUTS;
    /* Clear CE and WR, set RD */
    clear_bit(LCD_CONTROL, LCD_CE_BIT);
    clear_bit(LCD_CONTROL, LCD_WR_BIT);
    nop();
    nop();
    /* Set CE and RD*/
    set_bit(LCD_CONTROL, LCD_CE_BIT);
    set_bit(LCD_CONTROL, LCD_WR_BIT);
    set_bit(LCD_CONTROL, LCD_CD_BIT);
    /* Set Data Lines to Input */
    LCD_DATA_BUS_TRIS = ALL_INPUTS;
}
/********************************************
* Function name: lcd_read_status           *
* Description:   Read Status From LCD      *
*******************************************/
unsigned char lcd_read_status(void)
{
    unsigned char data;
    /* Set C/D# */
    set_bit(LCD_CONTROL, LCD_CD_BIT);
    /* Set Data Lines to Input */
    LCD_DATA_BUS_TRIS = ALL_INPUTS;
    /* Clear CE and RD */
    clear_bit(LCD_CONTROL, LCD_CE_BIT);
    clear_bit(LCD_CONTROL, LCD_RD_BIT);
    nop();
    /* Read Data Bus */
    data = LCD_DATA_BUS;
    /* Set All Bits */
    set_bit(LCD_CONTROL, LCD_CE_BIT);
    set_bit(LCD_CONTROL, LCD_RD_BIT);
    set_bit(LCD_CONTROL, LCD_CD_BIT);
    return data;
}
/********************************************
* Function name: lcd_clear_graphics        *
* Description:   Wipe Graphics RAM         *
*******************************************/
void lcd_clear_graphics(void)
{
    unsigned char address_l, address_h;
    unsigned int address, address_limit;
    /* Set Address Pointer */
    address = LCD_GRAPHICS_HOME;
    address_l = address & 0xff;
    address_h = address >> 8;
    lcd_write_data(address_l);
    lcd_write_data(address_h);
    lcd_write_command(LCD_ADDRESS_POINTER_SET);
    address_limit = (LCD_GRAPHICS_HOME + LCD_GRAPHICS_SIZE);
    while (address < address_limit)
    {
        lcd_write_data(0x00);
        lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
        address = address + 1;
    }
    if (LCD_NUMBER_OF_SCREENS == 0x02)
    {
        /* Set Address Pointer */
        address = LCD_GRAPHICS_HOME + 0x8000;
        address_l = address & 0xff;
        address_h = address >> 8;
        lcd_write_data(address_l);
        lcd_write_data(address_h);
        lcd_write_command(LCD_ADDRESS_POINTER_SET);
        address_limit = (LCD_GRAPHICS_HOME + LCD_GRAPHICS_SIZE +0x8000);
        while (address < address_limit)
        {
            lcd_write_data(0x00);
            lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
            address = address + 1;
        }
    }
}
/********************************************
* Function name: lcd_clear_text            *
* Description:   Wipe Text RAM             *
*******************************************/
void lcd_clear_text(void)
{
    unsigned char address_l, address_h;
    unsigned int address, address_limit;
    /* Set Address Pointer */
    address = LCD_TEXT_HOME;
    address_l = address & 0xff;
    address_h = address >> 8;
    lcd_write_data(address_l);
    lcd_write_data(address_h);
    lcd_write_command(LCD_ADDRESS_POINTER_SET);
        address_limit =  (LCD_TEXT_HOME + LCD_TEXT_SIZE);
        while (address < address_limit)
    {
        lcd_write_data(0x00);
        lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
        address = address + 1;
    }
    if (LCD_NUMBER_OF_SCREENS == 0x02)
    {
        /* Set Address Pointer */
        address = LCD_TEXT_HOME + 0x8000;
        address_l = address & 0xff;
        address_h = address >> 8;
        lcd_write_data(address_l);
        lcd_write_data(address_h);
        lcd_write_command(LCD_ADDRESS_POINTER_SET);
        address_limit =  (LCD_TEXT_HOME + LCD_TEXT_SIZE + 0x8000);
        while (address < address_limit)
        {
            lcd_write_data(0x00);
            lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
            address = address + 1;
        }
    }
}
/********************************************
* Function name: lcd_write_text            *
* Description:   Write Character to X, Y   *
*                0 <= X <= LCD Text Width  *
*                0 <= Y <= LCD Text Height *
*******************************************/
void lcd_write_text(unsigned char character, unsigned char x, unsigned char y)
{
    unsigned int address;
    address = (y * LCD_TEXT_AREA) + x + LCD_TEXT_HOME;
    if (y > 63 && LCD_NUMBER_OF_SCREENS == 2) /* If we are on the second screen and it exists */
    {
        address = address + 0x8000;
    }
    character = character - 0x20;   /* Adjust standard ASCII to T6963 ASCII */
    lcd_write_data(address & 0xff);
    lcd_write_data(address >> 0x08);
    lcd_write_command(LCD_ADDRESS_POINTER_SET);
    lcd_write_data(character);
    lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
}
/********************************************
* Function name: lcd_set_pixel             *
* Description:   Set a single Pixel on     *
*                0 <= X <= LCD Width       *
*                0 <= Y <= LCD Height      *
*******************************************/
void lcd_set_pixel(unsigned char x, unsigned char y)
{
    unsigned char data;
    unsigned int address, shift;
    address = (y * LCD_GRAPHICS_AREA) + (x / 8) + LCD_GRAPHICS_HOME;
    if (y > 63 && LCD_NUMBER_OF_SCREENS == 2) /* If we are on the second screen and it exists */
    {
        y = y - 64;
        address = (y * LCD_GRAPHICS_AREA) + (x / 8) + LCD_GRAPHICS_HOME;
        address = address + 0x8000;
    }
    data = lcd_bit_to_byte(7 - (x % 8));
    lcd_write_data(address & 0xff);
    lcd_write_data(address >> 0x08);
    lcd_write_command(LCD_ADDRESS_POINTER_SET);
    /* Read existing display */
    lcd_write_command(LCD_DATA_READ_NO_INCREMENT);
    data = data | lcd_read_data();
    /* Write modified data */
    lcd_write_data(data);
    lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
}
/********************************************
* Function name: lcd_clear_pixel           *
* Description:   Clear a single Pixel      *
*                0 <= X <= LCD Width       *
*                0 <= Y <= LCD Height      *
*******************************************/
void lcd_clear_pixel(unsigned char x, unsigned char y)
{
    unsigned char data;
    unsigned int address;
    address = (y * LCD_GRAPHICS_AREA) + (x / 8) + LCD_GRAPHICS_HOME;
    if (y > 63 && LCD_NUMBER_OF_SCREENS == 2) /* If we are on the second screen and it exists */
    {
        y = y - 64;
        address = (y * LCD_GRAPHICS_AREA) + (x / 8) + LCD_GRAPHICS_HOME;
        address = address + 0x8000;
    }
    data = lcd_bit_to_byte(7 - (x % 8));
    lcd_write_data(address & 0xff);
    lcd_write_data(address >> 0x08);
    lcd_write_command(LCD_ADDRESS_POINTER_SET);
    /* Read existing display */
    lcd_write_command(LCD_DATA_READ_NO_INCREMENT);
    data = (~data) & lcd_read_data();
    /* Write modified data */
    lcd_write_data(data);
    lcd_write_command(LCD_DATA_WRITE_AUTO_INCREMENT);
}
unsigned char lcd_bit_to_byte(unsigned char bit)
{
    switch (bit)
    {
        case 0:
            return 1;
            break;
        case 1:
            return 2;
            break;
        case 2:
            return 4;
            break;
        case 3:
            return 8;
            break;
        case 4:
            return 16;
            break;
        case 5:
            return 32;
            break;
        case 6:
            return 64;
            break;
        case 7:
            return 128;
            break;
        default:
            return 0;
            break;
    }
}






t6963.h
Code to drive a Toshiba T6963C based graphic LCD module (by Richard Taylor).

http://www.sourceboost.com/Products/C2C-plus/ExampleCode/t6963/t6963.h.html


/********************************************
* Filename: t6963.h                        *
*                                          *
* Description: Header file for t6963.c     *
*                                          *
*                                          *
* Date: 06/02/2003                         *
*******************************************/
/* Pragmas */
#pragma CLOCK_FREQ      4000000
/* LCD Parameters */
//#define LCD_TEXT_WIDTH          0x14    /* Text Width = Graphics Width / Character Width */
//#define LCD_TEXT_HEIGHT         0x08    /* Text Height = Graphics Height / Character Height */
//#define LCD_GRAPHICS_WIDTH      0xA0    /* Width of display (0xA0 = 160 pixels) */
//#define LCD_GRAPHICS_HEIGHT     0x80    /* Height of display (0x80 = 128 pixels) */
#define LCD_NUMBER_OF_SCREENS   0x02    /* for > 68 pixels height, is probably split into 2 screens */
                                        /* into 2 screens */
#define LCD_CHARACTER_WIDTH     0x08    /* Is character 8x8 or 6x8 (0x08 / 0x06) */
/* Define the Memory Map */
#define LCD_GRAPHICS_HOME   0x0000  /* This will usually be at the start of RAM */
#define LCD_GRAPHICS_AREA   0x14    /* A graphic character is 8 bits wide (same as 8x8 char) */
#define LCD_GRAPHICS_SIZE   0x0800  /* Size of graphics RAM */
#define LCD_TEXT_HOME       0x0A00  /* Graphics Area + Text Attribute Size (same size as text size) */
#define LCD_TEXT_AREA       0x14    /* Text line is 20 chars wide */
#define LCD_TEXT_SIZE       0x0200  /* Size of text RAM */
/*  Memory Map for 160x128 pixel display */
/*  This display is made up of two screens */
/*  Both 160x64 pixels */
/*  Screen 1 */
/*  0x0000  ----------------------------- */
/*          | Graphic RAM Area          | */
/*          | 0x0000 to 0x07FF          | */
/*          | (256x64 pixels)           | */
/*  0x0800  ----------------------------- */
/*          | Text Attribute Area       | */
/*  0x0A00  ----------------------------- */
/*          | Text RAM Area             | */
/*          | 512 Bytes                 | */
/*          | (256x64 pixels)           | */
/*  0x0C00  ----------------------------- */
/*  Screen 2 (Automatically derived from Screen 1) */
/*  0x8000  ----------------------------- */
/*          | Graphic RAM Area          | */
/*          | 0x0000 to 0x07FF          | */
/*          | (256x64 pixels)           | */
/*  0x8800  ----------------------------- */
/*          | Text Attribute Area       | */
/*  0x8A00  ----------------------------- */
/*          | Text RAM Area             | */
/*          | 512 Bytes                 | */
/*          | (256x64 pixels)           | */
/*  0x8C00  ----------------------------- */
/* LCD Data Bus Pins */
#define LCD_DATA_BUS        portb
#define LCD_DATA_BUS_TRIS   trisb
/* LCD Control Pins */
#define LCD_CONTROL         portc
#define LCD_CONTROL_TRIS    trisc
#define LCD_WR_BIT          0x00
#define LCD_RD_BIT          0x01
#define LCD_CE_BIT          0x02
#define LCD_CD_BIT          0x03
#define LCD_RST_BIT         0x04
#define LCD_WR              0x01
#define LCD_RD              0x02
#define LCD_CE              0x04
#define LCD_CD              0x08
#define LCD_RST             0x10
/* Control Word Definitions */
#define LCD_CURSOR_POINTER_SET          00100001b
#define LCD_OFFSET_REGISTER_SET         00100010b
#define LCD_ADDRESS_POINTER_SET         00100100b
#define LCD_TEXT_HOME_ADDRESS_SET       01000000b
#define LCD_TEXT_AREA_SET               01000001b
#define LCD_GRAPHIC_HOME_ADDRESS_SET    01000010b
#define LCD_GRAPHIC_AREA_SET            01000011b
#define LCD_CG_ROM_MODE_OR              10000000b
#define LCD_CG_ROM_MODE_EXOR            10000001b
#define LCD_CG_ROM_MODE_AND             10000011b
#define LCD_CG_ROM_MODE_TEXT            10000100b
#define LCD_CG_RAM_MODE_OR              10001000b
#define LCD_CG_RAM_MODE_EXOR            10001001b
#define LCD_CG_RAM_MODE_AND             10001011b
#define LCD_CG_RAM_MODE_TEXT            10001100b
/* 1001 0000 is all off, OR together for ON modes */
#define LCD_DISPLAY_MODES_ALL_OFF       10010000b
#define LCD_DISPLAY_MODES_GRAPHICS_ON   10011000b
#define LCD_DISPLAY_MODES_TEXT_ON       10010100b
#define LCD_DISPLAY_MODES_CURSOR_ON     10010010b
#define LCD_DISPLAY_MODES_CURSOR_BLINK  10010001b
/* Cursor Pattern Select */
#define LCD_CURSOR_PATTERN_UNDERLINE    10100000b
#define LCD_CURSOR_PATTERN_BLOCK        10100111b
/* Send Auto_XX Command, then block of data, then Auto_reset */
#define LCD_DATA_AUTO_WRITE_SET         10110000b
#define LCD_DATA_AUTO_READ_SET          10110001b
#define LCD_DATA_AUTO_RESET             10110010b
/* Send R/W Then one byte Data */
#define LCD_DATA_WRITE_AUTO_INCREMENT   11000000b
#define LCD_DATA_READ_AUTO_INCREMENT    11000001b
#define LCD_DATA_WRITE_NO_INCREMENT     11000100b
#define LCD_DATA_READ_NO_INCREMENT      11000101b
/* Status Register Bits */
#define LCD_STATUS_BUSY1    0x01
#define LCD_STATUS_BUSY2    0x02
#define LCD_STATUS_DARRDY   0x04
#define LCD_STATUS_DAWRDY   0x08
#define LCD_STATUS_CLR      0x20
#define LCD_STATUS_ERR      0x40
#define LCD_STATUS_BLINK    0x80
/* Definitions */
#define ALL_INPUTS  0xFF
#define ALL_OUTPUTS 0x00
/* Function Declarations */
void interrupt(void);
void lcd_initialise(void);
void lcd_write_data(unsigned char data);
unsigned char lcd_read_data(void);
void lcd_write_command(unsigned char data);
unsigned char lcd_read_status(void);
void lcd_clear_graphics(void);
void lcd_clear_text(void);
void lcd_write_text(unsigned char character, unsigned char x, unsigned char y);
void lcd_set_pixel(unsigned char x, unsigned char y);
void lcd_clear_pixel(unsigned char x, unsigned char y);
unsigned char lcd_bit_to_byte(unsigned char bit);
 

muuzoo

@gevv 'in verdiği kodlar çalışıyor. Bir iki ufak düzenleme ile Hi-Tech Pic C 'de çalıştırmıştım.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

gevv

Alıntı yapılan: muuzoo - 26 Eylül 2010, 23:03:38
@gevv 'in verdiği kodlar çalışıyor. Bir iki ufak düzenleme ile Hi-Tech Pic C 'de çalıştırmıştım.

evet ccs c kodlarını araken google de görmüştüm o konuyada link verelim 

https://www.picproje.org/index.php?topic=19244.0
 

pcb

#4
Teşekkürler.

CeMiL_mktrnk

Arkadaşlar burada system.h dosyası var, o nerede??? Bir de 240x128 t6963c işlemcili grafik lcd için neler gerekiyor? bi kaç yerden bulduğum kodları denedim, hep hata verdi, biri acilen yardım etsin lütfen
Mekatronik Mühendisi/Mechatronic Engineer

Extreme


musa_ay

   Herkese merhaba forumu uzun süredir izliyorum üye olmak yeni kısmet oldu.
sizlerden bir konuda yardım istiyorum

t6963 240x128 glcd yi ccs de bir türlü çalıştıramadım protonda çalıştırdım fakat ccs de mümkün olmadı ben bu konunun okulunu okumadım tamamen kitaplardan ve forumlardaki siz ve sizin gibi lerden faydalanarak asm proton ccs öğrenmeye çalışıyorum ks 108 çalıştırdım fakat elimdeki bu bahsettiğim glcd yi ccs de çalıştıramadım sizlerden ricam acaba bir harf yazdıran bir pixel çizen bir kod örneği veremezmisiniz önceden yaptığım gibi bunları inceliyerek kendimi geliştirmeye çalışıyorum sayın gevv sizin kod ları inceledim anlamadığım kod içinde (t6963.h) data portunda port d4 yok eksikmi kalmış öyle olmasımı gerekiyor hepizize teşekkür ederim.

#define LCD_DATA         PORTD      // LCD data port
#define LCD_DATA_TRIS      TRISD      // LCD Data port Tris
#define STA0            PORTD0      // Check command execution capability
#define STA1            PORTD1      // Check data read/write capability
#define STA2            PORTD2      // Check Auto mode data read capability
#define STA3            PORTD3      // Check Auto mode data write capability
#define STA5            PORTD5      // Check controller operation capability
#define STA6            PORTD6      // Error flag. Used for screen peek and screen copy
#define STA7            PORTD7      // Check the blink condition