Grafisk LCD modul datablad (150 point)

M

Maverickmax

Guest
Hej

Jeg er ikke sikker på, at jeg har skrevet kode i korrekte måder, fordi jeg er lidt forvirret med E1 og E2.Jeg tror, de er vant til at overføre give signal til master og slave hhv.Bascially jeg vil udskrive en linje på toppen og venstre hjørne af LCD.Ret mig hvis jeg har lavet en fejl i min kode

På forhånd tak

MM

PS Hvis du hjælpe mig med at løse dette spørgsmål, vil jeg belønne dig kæmpestor 150 point

Code:/ / Funktion Prototyper

void Display (int status);

void Display_Start_Line (int Row);

void Static_Drive (int Drive);

void Column_Address (int Adresse);

void Page (int Number);

void DutyCycle (int Switch);

void ADC_Select (int Output);

void End ();void Write_Display (int Line);void Delay ();void Delay ()

(

int i;for (i = 0; i <100; i );

)void Display (int Status)

(

statisk int DATA;DATA = 0x5E | Status;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;)void Display_Start_Line (int Row)

(

statisk int DATA;DATA = 0xCE | Row;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;)
void Static_Drive (int Drive)

(

statisk int DATA;DATA = 0xAE | Drive;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;

)void Column_Address (int Adresse)

(

statisk int DATA;DATA = Adresse;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;

)void Page (int Number)

(

statisk int DATA;DATA = 0xB8 | Antal;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;

)void DutyCycle (int Switch)

(

statisk int DATA;DATA = 0xA8 | Switch;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;

)void ADC_Select (int Output)

(

statisk int DATA;DATA = 0xa0 | Output;

PORTB = DATA;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;

)void End ()

(

PORTB = 0xEE;

PORTE = 0x00; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x04;

Delay ();

PORTE = 0x00;

PORTB = 0x00;

)void Write_Display (int Line)

(

statisk int DATA;DATA = Line;

PORTB = DATA;

PORTE = 0x01; / / A0 - 0 Bit

/ / R / W - 1 Bit

/ / E2 - 2 Bit (Slave)

/ / E1 - 3 Bit (Master)

PORTE = 0x05;

Delay ();

PORTE = 0x00;

PORTB = 0x00;)int vigtigste (void)

(/ / usignerede CHAR counter;DDRB = 0xFF;

DDRE = 0xFF;PORTB = 0x00;

PORTE = 0x00;Display (0x01);

Display_Start_Line (0x00);

Static_Drive (0x00);

Column_Address (0x00);

Page (0x03);

DutyCycle (0x01);

ADC_Select (0x00);

End ();Write_Display (0xFF);
mens (1)

(tilbagevenden 1;

))

 
Ja jeg har, det er en meget let controller til brug.

Jeg kan sende dig nogle gamle init koder ECT.Måske nyttige.?

 
Det ville være vidunderligt, hvis du giver mig nogle koder.

Jeg er nødt til at spørge dig om E1 og E2.Jeg er lidt forvirret med kommando, der blev givet i et datablad.

For eksempel,

Hvis jeg vil skrive display data,
vil jeg blot 0xff for D0 til D7 og sæt R / W til logik nul eller sætte den på 0V og til sidst sat AO til 1.Hvad med E1 og E2?Hilsen

mmTilføjes efter 5 timer 7 minutter:Skal jeg udføre A0, RW og D0-D7 i rækkefølge?

Ret mig, hvis Im fejl

Hilsen

MM

 
Kære fyre

Jeg er lidt skuffet over manglende svar fra jer.Jeg kan kun antage du ikke famaliar med SED1520?

MM

 
E1 E2 er at Acess venstre del af lcd eller højre sektion
actialy LCD har to sed1520 hver kontrollerer en del af LCD så hvis du gå for at få adgang til den venstre del af lcd E1 = 0, E2 = 1.ret afsnit E1 = 1, E2 = 0
SO E1, E2 er den aktivere linjen for de to sed1520

Der er to model prøve dette to metode og viser, der vil arbejde vil (skrive data til skærm)

1-du indstiller data (d0-D7)
2-sæt A0, E1, E2
3 - sæt R / W
på stigende kant R / W data vil blive skrevet

ELLER

1-du indstiller data (d0-D7)
2-sæt A0 R / W
3 - sæt E1, E2
på stigende kant E1 eller E2 data vil blive skrevet

PS:
Bemærk, at TRIN 3 det valgte signal skal un aktiveres, før du sætter det, fordi sagen er taget kun på kanten

ok

 
Jeg har igen forsøgt at arbejde med de samme LCD med min ATMEGA128 men jeg kunne ikke få et sorte pletter på min skærm ....

Her er min opdaterede koder

Code:# include <avr/io.h>

# include "STRING.H"

# include <stdio.h>

# include <avr/iom128.h>

# include <compat/deprecated.h># define F_OSC 16000000 / * oscillator-frekvensen i Hz * /

# define UART_BAUD_RATE 2400

# define UART_BAUD_CALC (UART_BAUD_RATE, F_OSC) ((F_OSC) / ((UART_BAUD_RATE) * 16L) -1)# define LCD_A0 PB0

# define LCD_E1 PB1

# define LCD_E2 PB2

# define LCD_RW PB3

# define DATA PORTE

# define LCD_EL PB4void Delay ();

void LCD_On (void);

void LCD_Off (void);

void LCD_Power_Up (void);

void LCD_Power_Down (void);

void LCD_Reset (void);

void LCD_Write_Command (CHAR Kommando);

void LCD_Write_Data (CHAR LCD_Data);/ / -------------------- Delay Loop -----------------------void Delay (indhold)

(

int i;for (i = 0; i <100; i );

)/ / -------------------- Void LCD_On () -----------------------void LCD_On (void)

(

LCD_Write_Command (0xAF);

LCD_Write_Command (0xA4); / / Statisk Driving Off

)/ / -------------------- Void LCD_Off () -----------------------void LCD_Off (void)

(

CBI (PORTB, LCD_EL);

Delay ();

LCD_Write_Command (0xAE); / / Statisk Driving Off

)/ / -------------------- Void LCD_Power_Up () -----------------------void LCD_Power_Up (void)

(

/ / LCD_POWER = 0;

CBI (PORTB, LCD_EL);

LCD_Write_Command (0xAE); / / Display Off

Delay ();

LCD_Write_Command (0xC0); / / Start Line Com 0

LCD_Write_Command (0xA4); / / Statisk Driving Off

LCD_Write_Command (0x00); / / Kolonne = 0 (0-59)

LCD_Write_Command (0xB8); / / page = 0 (0-3)

LCD_Write_Command (0xA9); / / 1 / 32 Duty

LCD_Write_Command (0xA9); / / ADC = CW (Forward)

LCD_Write_Command (0xEE); / / udgangen læse-modify-skrive kode

LCD_Write_Command (0xAF); / / Display ON

)/ / -------------------- Void LCD_Power_Down () -----------------------void LCD_Power_Down (void)

(

LCD_Write_Command (0xAE); / / Display Off

LCD_Write_Command (0xA5); / / Statisk kørsel påDelay ();

CBI (PORTB, LCD_E1);

Delay ();

CBI (PORTB, LCD_E2);

Delay ();

CBI (PORTB, LCD_RW);

Delay ();

CBI (PORTB, LCD_A0);

Delay ();

/ / LCD_POWER = 1;

)/ / -------------------- Void LCD_Reset () -----------------------

void LCD_Reset (void)

(

LCD_Write_Command (0xE2); / / Display Off

)/ / -------------------- Void LCD_Write_Command (CHAR) -----------------------

/ /

void LCD_Write_Command (CHAR Kommando)

(

CBI (PORTB, LCD_E1);

Delay ();

CBI (PORTB, LCD_E2);

Delay ();

CBI (PORTB, LCD_RW);

Delay ();

CBI (PORTB, LCD_A0);

Delay ();

SBI (PORTB, LCD_E1);

Delay ();

SBI (PORTB, LCD_E2);

Delay ();

PORTE = Command;

Delay ();

CBI (PORTB, LCD_E1);

Delay ();

CBI (PORTB, LCD_E2);

Delay ();

)/ / -------------------- Void LCD_Write_Data (CHAR) -----------------------

/ /

void LCD_Write_Data (CHAR LCD_Data)

(

/ / If (xaxis == 60) (LCD_Write_Command (0x00));

CBI (PORTB, LCD_E1);

Delay ();

CBI (PORTB, LCD_E2);

Delay ();

CBI (PORTB, LCD_RW);

Delay ();

SBI (PORTB, LCD_A0);

Delay ();/ / If (xaxis <60) (SBI (PORTB, LCD_E1);)

/ / Ellers hvis (xaxis> 59) (SBI (PORTB, LCD_E2);)

PORTE = LCD_Data;

Delay ();SBI (PORTB, LCD_E1);

Delay ();

SBI (PORTB, LCD_E2);

Delay ();

PORTE = LCD_Data;

Delay ();

CBI (PORTB, LCD_E1);

Delay ();

CBI (PORTB, LCD_E2);

Delay ();

)
int vigtigste (void)

(/ / usignerede CHAR counter;DDRB = 0xFF;

DDRE = 0xFF;PORTB = 0x00;

PORTE = 0x00;LCD_Power_Up ();

LCD_Write_Data (0xFF);

LCD_Write_Data (0xFF);

LCD_Write_Data (0xFF);gøre

() mens (1);)
 
Tja, så er det sandsynligvis dit problem.

LCD spænding, også kendt som LCD bias spænding, vil bestemme kontrast
displayet, dvs hvordan mørke eller lyse sin pixels er.
Databladet siger (absolut maksimum ratings):
Forsyningsspænding for LCD: VDD-VLCD: min 0: max 10,0 V

Så hvis du har en VDD af 5V, VLCD bør fra
5 V-5V.
Desværre er den anbefalede LCD driftsspaending mangler fra tabel 6.1
i databladet, men hvis du har en variabel spænding ved hånden kan du slutte, at
at VLCD og se, hvad der sker.
Mit gæt er, at du har brug for en negativ spænding for kontrasten -
det har altid
været tilfældet med de skærme jeg har stødt på.

 
Hmmm .....

Jeg har ikke et dobbelt strømforsyning på dette tidspunkt ....

BTW jeg målte usammenhængende VLCD og det er 5V.Jeg egentlig ikke forstå hvorfor.Venligst oplyse migMM
Sidst redigeret af Maverickmax den 02 december 2007 18:16, edited 1 gang i den samlede

 
Prøv et 9V batteri.Hook den positive terminal til VDD og negativ til VLCD.
Det bør give dig om-4V på VLCD.

I det mindste vil du se en forskel i displayet.

 
XNOX_Rambo wrote:

Prøv et 9V batteri.
Hook den positive terminal til VDD og negativ til VLCD.

Det bør give dig om-4V på VLCD.I det mindste vil du se en forskel i displayet.
 

Welcome to EDABoard.com

Sponsor

Back
Top