Prosím, opravte tento kód LCD

N

Naumanpak

Guest
Ahoj odborníci,

Měl jsem velké zkušenosti s edaboard, vy lidé mi hodně pomohl.

Mám LCD kód pro 16x4 modulu.Ale problém je, že pokaždé, když spustíte, jen jsem si černé skříňky na ř. 1 a 3.Nějaké návrhy?díkyKód:

# Include <regx51.h># Define rs P2_5

# Define rw P2_6

# Define umožnit P2_7

# Define lcd_port P0

# Define XTAL 11.059200

# Define XDIVIDER 12,0# Define delay_1ms 164 * (XTAL / XDIVIDER)neplatné zpoždění (unsigned char);

neplatné delay_ms (unsigned int);

neplatné lcd_display (unsigned char);

neplatné Lcd_Ini ();

neplatné lcd_command (unsigned char);

main ()

(

unsigned int i;

lcd_command (0x01);

Lcd_Ini ();

lcd_command (0x80);

lcd_display ('L');

lcd_display ('I');

lcd_display ('N');

lcd_display ('E');

lcd_display ('1 ');

lcd_command (0xC0);

lcd_display ('L');

lcd_display ('I');

lcd_display ('N');

lcd_display ('E');

lcd_display ('2 ');

lcd_command (0x94);

lcd_display ('L');

lcd_display ('I');

lcd_display ('N');

lcd_display ('E');

lcd_display ('3 ');

lcd_command (0xd4);

lcd_display ('L');

lcd_display ('I');

lcd_display ('N');

lcd_display ('E');

lcd_display ('4 ');while (1) (;)

)neplatné Lcd_Ini ()

(

lcd_command (0x48);

delay_ms (30);

lcd_command (0x0c);

delay_ms (10);

lcd_command (0x06);

delay_ms (10);

lcd_command (0x01);

delay_ms (10);

)neplatné lcd_command (unsigned char command)

(

rw = 0;

rs = 0;

lcd_port = příkaz;

enable = 1;

enable = 0;

delay_ms (5);

)neplatné lcd_display (unsigned char zobrazení)

(

rw = 0;

rs = 1;

lcd_port = displej;

enable = 1;

enable = 0;

delay_ms (1);

)neplatné delay_ms (unsigned int i)

(for (; i! = 0x00; i -)

(

zpoždění (delay_1ms);

)

)neplatné zpoždění (unsigned char j)

(

for (; j! = 0x00; j -)

(

)

)
 
Některé LCD potřebovat software inicializace při inicializaci hardware nefunguje.

Pokud nemáte inicializovat správné, dělají divné věci.

Google software pro inicializaci LCD a zkusit to.

Vložit také NOP mezi RW a RS nastavení, to závisí na rychlosti systému.Takže zkuste:

RW = 0;
NOP ();
RS = 0;
NOP ();

Toto je nechat signál se usadit.

 
Můžete post obrázek o tom, co se děje?Do vašeho řádky start na řádku 0, nebo řádku 1?

Jestliže naše řádky jsou stanoveny takto:

Row1
Row2
Row3
Row4

Obvykle row3 je rozšíření row1.Tam typu:

edaboard.com je přátelské místo, kde získat radu.

To by vypadat takto

Row1: edaboard.com je
Row2:
Row3: přátelské místo t
Row4:

Matt

 
Díky Matt & daviddlc pro návrhy.Zkoušel jsem NOP (), ale stejný problém ještě.

To je to, co jsem si na LCD
Omlouváme se, ale musíte přihlásit a prohlížet tuto přílohu

 
To je inicializace problém.Máte pro inicializaci LCD před odesláním data

Nandhu

 
Díky Nandhu, jsem inicializaci s Lcd_Ini (); vpravo nahoře v main ()

Můžete mi prosím říct mi přesně, co mám dělat teď ..?na zdraví

 
V mém předchozím zaměstnání, zeptal jsem se vás na Google pro inicializaci software LCD, uvidíte několik příkladů tam.Přidáno po 5 minutách:To je to, co mám na 2 x 16, budete muset přizpůsobit Vašim potřebám:

neplatné LCD_InitDisplay ()
(
RS = 0; / / RS = 0
RW = 0; / / R / W = 0
Delay10KTCYx (36); / / Wait cca.30 msec.
PORTB = 0x30, / / Sada funkcí: 8 bitů
Delay10KTCYx (6), / / Wait cca.5 ms.
PORTB = 0x30, / / Sada funkcí: 8 bitů
Delay1KTCYx (2), / / Wait cca 100uSec.(166 USEC)
LCD_WriteCommand (0x38) / / funkce Set: 8 bitů, 2 řádky, 5x7 písma
LCD_WriteCommand (0x0C); / / ON / OFF: Zobrazit na,
LCD_WriteCommand (0x01); / / Clear displeji
LCD_WriteCommand (0x06); / / Přírůstek, žádný posun
) / / LCD_InitDisplay

Opět vzpomenout na NOP () po RS a RW nastavení závisí na systému, rychlosti.

 
Udělal jsem C18 knihovnu k použití mé LCD.Není to optimální, ale funguje to bez problémů.Doufám, že to pomůže.

Kód:/ *

Biblioteca para usar LCD com PIC18F4431

Autor: Diego Sá

Data: 03.07.2010

* // / - Evitar que este hlavičkový soubor seja incluído várias vezes č. programa

# Ifndef __LCD_CONFIG_H / / ověřování SE expressão __LCD_CONFIG_H ainda Não foi definida

# Define __LCD_CONFIG_H / / define expressão __LCD_CONFIG_H

/ / -# Define RS PORTBbits.RB2

# Define RW PORTBbits.RB3

# Define EN PORTBbits.RB4

# Define DATA PORTD

# Define TRIS_DATA TRISD

# Define NEW_LINE 0x0A

# Define BUSY_FLAG PORTDbits.RD7neplatné configLCD (void);

neplatné SendCmdLCD (unsigned char cmd_lcd);

neplatné WriteCharLCD (char e);

neplatné WriteTextLCD (char * text);

neplatné BusyFlagCheck (void);char j = 0;

char d;neplatné configLCD (void)

(

TRISBbits.TRISB2 = 0; / / Pino RS como výstup

TRISBbits.TRISB3 = 0; / / Pino RW como výstup

TRISBbits.TRISB4 = 0; / / Pino EN como výstupEN = 0;

RS = 0;

RW = 0;BusyFlagCheck ();SendCmdLCD (0b00111000) / / funkce Set: 8-bit bus režim, 2-řádkový režim zobrazení, 5x8 bodů formát displeje

Delay1KTCYx (10); / / zpoždění 5ms

SendCmdLCD (0b00001111); / / Display ovládání: Zobrazit na, kurzor, kurzor blikat

Delay1KTCYx (10); / / zpoždění 5ms

SendCmdLCD (0b00000001) / / Clear Display

Delay1KTCYx (10); / / zpoždění 5ms

SendCmdLCD (0b00000110); / / kurzor se přesune doprava, DDRAM adresu zvýšila o 1; disply řazení není provedena

)neplatné SendCmdLCD (unsigned char cmd_lcd)

(

TRIS_DATA = 0b00000000;

EN = 0;

RW = 0;

RS = 0;DATA = cmd_lcd;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)EN = 1;Delay1KTCYx (10); / / Aguarda 5ms

/ / Ciclos = (TimeDelay * Fosc) / 4

/ / Ciclos = (5 ms * 8MHz) / 4

/ / Ciclos = 10.000

EN = 0;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)DATA = 0b00000000;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)BusyFlagCheck ();

)neplatné WriteCharLCD (char e)

(

TRIS_DATA = 0b00000000;EN = 0;

RW = 0;

RS = 0;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)RS = 1;

DATA = e;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)EN = 1;Delay1KTCYx (10); / / Aguarda 5msEN = 0;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)DATA = 0b00000000;

RS = 0;Delay10TCYx (2), / / Aguarda 20 ciclos (10 uSeg)BusyFlagCheck ();

)neplatné WriteTextLCD (char * text)

(

j = 0;while (* text)

(

d =* text ;if (d == NEW_LINE)

(

break;

)

jiný

(

WriteCharLCD (d);

j ;

if (j> 16) break;

)

)

)neplatné BusyFlagCheck (void)

(

TRIS_DATA = 0b11111111;EN = 0;

RS = 0;

RW = 1;

Delay1KTCYx (10); / / zpoždění 5mswhile (1)

(

EN = 1;

Delay10TCYx (1);if (BUSY_FLAG == 0)

(

break;

)

jiný

(

EN = 0;

Delay1KTCYx (10); / / zpoždění 5ms

)

)EN = 0;

RW = 0;

TRIS_DATA = 0b00000000;

)# Endif

 
O děkuji vám všem!jiné řešení v rámci 24 hodin!

Nakonec jsem to pracuje s trochu větším zpožděním a nastavení RS a RW na 0 v inicializaci.

Děkuji vám všem ještě jednou!Přidáno po 3 minutách:Mám jiný problém, ale já se po to jako další téma.

 

Welcome to EDABoard.com

Sponsor

Back
Top