Wyswietlacz LCD sterowany przez komputer



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Ralwing" <ralwing_at_nospam_go2.pl>
Subject: Wyswietlacz LCD sterowany przez komputer
Date: Thu, 15 Feb 2001 19:04:52 +0100


Witam
Jak skomunikować się z wyświetlaczem LCD przez port LPT? Czy jest do tego
potrzebny jakiś dekoder?
Jak powinien wygladac program np TP albo ASM, ktory sterowalby nizej podanym
wyswietlaczem? Wiem jak to zrobic dla I^2C albo RS 232, bo mam to w gazecie,
ale nie wiem jak to zrobic po LPT1. Caly problem polega na tym, ze nie wiem
jak wyslac bit 0 lub 1 na RS RW lub E czyli ACK, a to parametry:
polacznie przez port do pinow o numerach
RW-do ALF- pin 14
RS- INI-16
E-ACK-10
Linie danych D0 -D7 piny od 2 do 9
Wyswietlacz LCD typu
TOSHIBA TLC 493J0
Sa jeszcze inne oznaczenia, ktore nie wiem czy pomoga wam w czyms, ale na
wszelki wypadek je podam:
HD 4478
oraz 0A00
Z tego co wiem, a wiem malo, jest jakis standard wymyslony przez Hitachi, i
ten uklad go zawiera!
Jesli ktos mial kiedys cos z tym wspolnego prosze o kontakt, jesli ktos
kiedys programowal port rownolegly tez prosze o kontakt!

--

"Don't think you are, know you are..."
GIGI



Poprzedni Następny
Wiadomość
Spis treści
From: "Mariusz Jankowicz" <mariusz_at_nospam_entropia.com.pl>
Subject: Re: Wyswietlacz LCD sterowany przez komputer
Date: Thu, 15 Feb 2001 21:24:57 +0100



"Ralwing" <ralwing_at_nospam_go2.pl> wrote in message news:96h5ok$80g$1_at_nospam_news.tpi.pl...
Witam
Jak skomunikować się z wyświetlaczem LCD przez port LPT? Czy jest do tego
potrzebny jakiś dekoder?
Jak powinien wygladac program np TP albo ASM, ktory sterowalby nizej
podanym
wyswietlaczem? Wiem jak to zrobic dla I^2C albo RS 232, bo mam to w
gazecie,
ale nie wiem jak to zrobic po LPT1. Caly problem polega na tym, ze nie
wiem
jak wyslac bit 0 lub 1 na RS RW lub E czyli ACK, a to parametry:
polacznie przez port do pinow o numerach
RW-do ALF- pin 14
RS- INI-16
E-ACK-10
Linie danych D0 -D7 piny od 2 do 9
Wyswietlacz LCD typu
TOSHIBA TLC 493J0
Sa jeszcze inne oznaczenia, ktore nie wiem czy pomoga wam w czyms, ale na
wszelki wypadek je podam:
HD 4478
oraz 0A00
Z tego co wiem, a wiem malo, jest jakis standard wymyslony przez Hitachi,
i
ten uklad go zawiera!
Jesli ktos mial kiedys cos z tym wspolnego prosze o kontakt, jesli ktos
kiedys programowal port rownolegly tez prosze o kontakt!


http://www.beyondlogic.org/

Zrobiłem wg opisu (Parallel Port Interfacing/Interfacing Example - 16
Character x 2 Line LCD ) i działa :-)

Pozdrawiam,
Mariusz





Poprzedni Następny
Wiadomość
Spis treści
From: "Artur_T" <$kuku$trawa_at_nospam_polbox.com>
Subject: Re: Wyswietlacz LCD sterowany przez komputer
Date: Fri, 16 Feb 2001 10:12:00 +0100


Przykłądowy programik:

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include <conio.h>

#define hex(zn) ((zn<64) ? (zn-48) : (zn-55))
#define wait {while(kbhit())getch();while(!kbhit());}


#define LptPort 0x278

#define RS_H outportb(LptPort,inportb(LptPort)|0x40);
#define RS_L outportb(LptPort,inportb(LptPort)&0xBF);
#define RW_H outportb(LptPort,inportb(LptPort)|0x10);
#define RW_L outportb(LptPort,inportb(LptPort)&0xEF);
#define EN_H outportb(LptPort,inportb(LptPort)|0x20);
#define EN_L outportb(LptPort,inportb(LptPort)&0xDF);

#define L1 0 /*linia 1*/
#define L2 64 /*linia 2*/
#define L3 20 /*linia 3*/
#define L4 84 /*linia 4*/


#define LCD_CLR 0x01 /* Clear Display */
#define LCD_HOME 0x02 /* Cursor to Home position */
#define LCD_NID 0x04 /* NO Increment/Decrement */
#define LCD_AI 0x07 /* Auto Increment */
#define LCD_AD 0x05 /* Auto Decrement */
#define LCD_OFF 0x08 /* Display=OFF */
#define LCD_ON 0x0C /* Display=ON, Cursor=OFF, Blink=OFF */
#define LCD_C 0x0E /* Display=ON, Cursor=ON , Blink=OFF */
#define LCB_B 0x0D /* Display=ON, Cursor=OFF, Blink=ON */
#define LCD_CB 0x0F /* Display=ON, Cursor=ON , Blink=ON */
#define LCD_SCL 0x10 /* Shift Cursor Left */
#define LCD_SCR 0x14 /* Shift Cursor Right */
#define LCD_SSL 0x18 /* Shift Screen Left */
#define LCD_SSR 0x1C /* Shift Screen Right */
#define LCD_D4L1 0x20 /* Data lenght=4 Lines=1 */
#define LCD_D8L1 0x30 /* Data lenght=8 Lines=1 */
#define LCD_D4L2 0x28 /* Data lenght=4 Lines=2 */
#define LCD_D8L2 0x38 /* Data lenght=8 Lines=2 */


typedef unsigned char Char;
typedef unsigned int Int;


const Char CharPattern[64]={002,004,016,020,020,021,016,000, /* ? */
000,000,016,001,017,021,017,004, /* Ą */
014,005,006,014,004,004,016,000, /* ˆ */
002,004,026,031,021,021,021,000, /* ä */
002,004,016,021,021,021,016,000, /* ˘ */
002,004,016,020,016,001,036,000, /* ˜ */
002,004,037,020,004,010,037,000, /* < */
004,000,037,002,004,010,037,000};/* ľ */


void outp4(Char data4);
void textL(char *str,Char pos);
void lcd_wr(Char LcdData, Char RS );
void lcd_ini(void);
void newChar(void);
void putcL(Char ch, Char pos);



/* main() do usuniecia */

main()
{
Char i;
unsigned long count=0;
clrscr();
lcd_ini();
newChar();
randomize();


while(!kbhit())
{
textL("linia1",L1+random(15));
textL("linia3",L2+random(15));
textL("linia2",L3+random(15));
textL("linia4",L4+random(15));
printf("%lu\n",count++);
}
clrscr();
return(0);
}



void outp4(Char data4)
{
data4=~data4;
if(data4 & 0x04) data4&=0xfb;
else data4|=0x04;

data4&=0x0f;
outportb(LptPort+2,data4);
}



void lcd_wr(Char LcdData, Char RS )
{
RS_L
EN_L
if(RS) RS_H else RS_L
outp4(0x0f);
outp4(0x0f);
RW_H
EN_H
EN_H
while((inportb(LptPort+2) | 0x08)==0);
RW_L
RW_L
outp4(LcdData>>4);
EN_L
EN_L
outp4(LcdData);
EN_H
EN_H
EN_L
RS_L
}



void lcd_wr1(Char LcdData, Char RS )
{
RS_L
RW_L
EN_L
if(RS) RS_H else RS_L
delay(1);
outp4(LcdData>>4);
delay(1);
EN_H
delay(1);
EN_L
delay(1);
outp4(LcdData);
delay(1);
EN_H
delay(1);
EN_L
RS_L
delay(4);
}




void lcd_ini(void)
{

Char i;

EN_L
RS_L
RW_L
delay(10);

outp4(0x03);
delay(2);

for(i=0;i<3;i++)
{
EN_H
delay(2);
EN_L
if(i==1)
delay(20);
else
delay(10);

}
outp4(0x02);
EN_H
delay(2);
EN_L
delay(2);
lcd_wr(LCD_D4L2,0);


delay(2);

lcd_wr(LCD_ON,0);
delay(2);
lcd_wr(LCD_NID,0);
delay(2);
lcd_wr(LCD_SCR,0);

delay(2);
lcd_wr(LCD_CLR,0);
delay(10);


}


void textL(char *str,Char pos)
{
lcd_wr(0x80+pos,0);
pos=0;
while(str[pos]) lcd_wr(str[pos++],1);
}

void putcL(Char ch, Char pos)
{
lcd_wr(0x80+pos,0);
lcd_wr(ch,1);
}


void newChar(void)
{

Char i;
for (i=0;i<64;i++)
{
lcd_wr(0x40+i,0);
lcd_wr(CharPattern[i],1);
}
}










Poprzedni Następny
Wiadomość
Spis treści
From: "spooky" <sp00ky_at_nospam_interia.pl>
Subject: Re: Wyswietlacz LCD sterowany przez komputer
Date: Fri, 16 Feb 2001 11:42:49 +0100



Użytkownik Ralwing <ralwing_at_nospam_go2.pl> w wiadomości do grup dyskusyjnych
napisał:96h5ok$80g$1_at_nospam_news.tpi.pl...
Witam
Jak skomunikować się z wyświetlaczem LCD przez port LPT? Czy jest do tego
potrzebny jakiś dekoder?
Jak powinien wygladac program np TP albo ASM, ktory sterowalby nizej
podanym
wyswietlaczem?

popatrz na http://freshmeat.net
i poszukaj lcdproc
sciagnij zrodelka i masz wszystko
czarno na bialym