 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
A.B. Član

Pridružen-a: Sob 24 Jan 2009 14:50 Prispevkov: 91 Aktiv.: 0.46
|
Objavljeno: Tor Mar 05, 2013 10:15 pm Naslov sporočila: PIC876A + HD4480 LCD težave |
|
|
Pozdravljeni,
imam težave pri upravljanju LCD-ja z mikrokontrolerjem. Za simuliranje uporabljam program Proteus. Kurzor začne utripati, tako da je inicializacija uspešna.
Vpisati poizkušam besedilo "test" vendar neuspešno.
Koda: |
#include <pic.h>
#define E RB4
#define RS RB5
#define D4 RB0
#define D5 RB1
#define D6 RB2
#define D7 RB3
void waitms(int ms)
{
volatile int i,j;
for (i=0;i<ms;i++)
for (j=0;j<60;j++);
}
void wait20us(int ms)
{
volatile int i,j;
for (i=0;i<ms;i++)
for (j=0;j<2;j++);
}
void E_pulse(void)
{
E=1;
wait20us(5);
E=0;
wait20us(5);
}
void LCD_cmd(int cmd)
{
int pv;
RS=0; // LCD command mode
pv = cmd>>4;
PORTB=pv; // high bits
E_pulse();
waitms(5);
pv = cmd&0x0f;
PORTB=pv; // low bits
E_pulse();
waitms(10);
}
void LCD_chr(char data[])
{
int i;
int pv;
int ch;
E=0;
RS=1; // LCD data mode
for(i = 0; data[i] != 0; i++)
{
ch=data[i];
pv=ch>>4;
PORTB=pv; // high bits
E_pulse();
waitms(2);
pv=ch&0x0f;
PORTB=pv; // low bits
E_pulse();
}
waitms(10);
}
void LCD_locate(int row, int column)
{
RS=0;
if(row == 1)
{
LCD_cmd(0x80 | (column - 1)&0x0f);
}
else
{
LCD_cmd(0xc0 | (column - 1)&0x0f);
}
waitms(5);
}
void LCD_init(void)
{
TRISB=0;
waitms(40);
RS=0;
PORTB=0x3;
E_pulse();
waitms(6);
PORTB=0x3;
E_pulse(); // init!
waitms(6);
PORTB=0x3;
E_pulse(); // init!
waitms(6);
PORTB=0x2;
E_pulse();
LCD_cmd(0x28);
LCD_cmd(0x08);
waitms(5);
LCD_cmd(0x06);
LCD_cmd(0x0F);
waitms(1);
}
void main(){
LCD_init();
waitms(10);
LCD_chr("test");
while(1){
}
}
|
LP
Opis: |
|
Velikost datoteke: |
250.14 KB |
Pogledana: |
4 krat |

|
|
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.34
|
Objavljeno: Tor Mar 05, 2013 11:15 pm Naslov sporočila: |
|
|
Po moje je težava nekje med
Koda: |
void LCD_chr(char data[]) |
in
Funkcija void LCD_chr pričakuje array znakov, kjer mora zadnji znak biti 0 (null terminated). Ti pa namesto arraya znakov, kot argument pošiljaš string. Preoblikuj funkcijo tako, da podaš za argument pointer na array, v katerega vpiši željen niz znakov z 0 kot zadnjim znakom.
_________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
A.B. Član

Pridružen-a: Sob 24 Jan 2009 14:50 Prispevkov: 91 Aktiv.: 0.46
|
Objavljeno: Sre Mar 06, 2013 1:18 am Naslov sporočila: |
|
|
Težavo sem odpravil. Bila je začetniška napaka. Pri pisanju na PORTB je na 0 šel tudi RS pin.
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 486 dni
Powered by phpBB © 2001, 2005 phpBB Group
|