Sari la conținut
ELFORUM - Forumul electronistilor

afisare LCD pic 16f877a


Vizitator tutumarian

Postări Recomandate

Vizitator tutumarian

Buna! sunt incepator in microcontrolere. as vrea sa afisez un text pe un LCD 16x2. am scris programul si am dat de o prolema. problema e atunci cand afisez orice caracter pe mi se sterge imediat, iar cand pun funtia "send_data()" intr-o bucla infinita mi se afiseaza acel caracter pe toata suprafata LCD-ului pana se umple. ma-ti putea ajuta va rog cu ceva idei?Lcd-ul este un LM016L.programul este urmatorul: #include#include#define RS RB0#define RW RB1#define EN RB2#define DATA PORTD#define D0 RD0#define D1 RD1#define D2 RD2#define D3 RD3#define D4 RD4#define D5 RD5#define D6 RD6#define D7 RD7void delay(){ unsigned char i,j; for(i=0;i<50;i++); for(j=0;j<255;j++);}void LCD_init(){ delay(); DATA=0b00111000; RS=0; RW=0; EN=1; EN=0; delay(); DATA=0b00001111; RS=0; RW=0; EN=1; EN=0; delay(); DATA=0b00000001; RS=0; RW=0; EN=1; EN=0; delay(); DATA=0b00000110; RS=0; RW=0; EN=1;}void lcd_command(unsigned char cmd){ DATA=cmd; RS=0; RW=0; EN=1; EN=0; delay();}void send_data(unsigned char cmd){ DATA=cmd; RS=1; RW=0; EN=1; EN=0; delay();}void main(){ TRISB=0X00; TRISD=0X00; LCD_init(); delay(); send_data('A');}}

Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • deejay2k1

    2

pai, e normal sa faca asa ....

 

partea cu stersul caracterului apare pt ca ai lcd_init() in main, care se va repeta la fiecare ciclu, deci initializezi display-ul inaintea fiecarei afisari -> sterge ecranul, apoi scrii 'A'

 

daca pui afisarea in bucla infinita, lcd-ul autoincrementeaza adresa urmatorului caracter de afisat (pozitia 0 pe care o scrii tu, apoi pozitia 1, 2,3 ,,,etc)

 

iti trebuie un main de forma

 

{TRISB=0X00;TRISD=0X00;LCD_init();do{lcd_goto (0x00);delay();    send_data('A');delay();}while(1);}

unde lcd_goto il construiesti cf datasheet-ului ca sa te pozitioneze la adresa de afisare dorita

 

eu il am de forma

 

voidlcd_goto(unsigned char pos){		lcd_command(0x80+pos);}
Link spre comentariu
  • 4 săptămâni mai târziu...
Vizitator tutumarian

mai am o problema. daca trimit un sir de caractere, al 2-lea caracter nu mi.l afiseaza, pe LCD imi afiseaza spatiu in locul celui de-al doilea caracter. de fiecare data trebie sa las 2 spatii libere inainte sa scriu fiecare measaj. functia pentru sir de caractere este urmatoare: void lcd_sendstring(unsigned char *chr){ while(*chr) lcd_senddata(*chr++);}

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări