Vizitator tutumarian Postat Decembrie 14, 2012 Partajează Postat Decembrie 14, 2012 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
deejay2k1 Postat Decembrie 14, 2012 Partajează Postat Decembrie 14, 2012 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
Vizitator tutumarian Postat Decembrie 15, 2012 Partajează Postat Decembrie 15, 2012 iti multumesc mult. cum ar trebui sa fac, cursorul sa nu mai oscileze intre pozitia pe care il pozitionez si urmatoare? Link spre comentariu
deejay2k1 Postat Decembrie 15, 2012 Partajează Postat Decembrie 15, 2012 iti multumesc mult. cum ar trebui sa fac, cursorul sa nu mai oscileze intre pozitia pe care il pozitionez si urmatoare?cursor off, cu Make cursor invisible lcd_command(0x0C); Link spre comentariu
Vizitator tutumarian Postat Ianuarie 8, 2013 Partajează Postat Ianuarie 8, 2013 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
Vizitator tutumarian Postat Ianuarie 11, 2013 Partajează Postat Ianuarie 11, 2013 chiar nu are nimine vreo idee? Link spre comentariu
Vizitator tutumarian Postat Ianuarie 13, 2013 Partajează Postat Ianuarie 13, 2013 am rezolvat pana la urma. stie cineva o functie pentru a scrie pe lcd variabile de tip int? eventual explicata fiecare linie. Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum