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


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.59 Kraj: Trzic
|
Objavljeno: Sob Mar 29, 2008 2:15 am Naslov sporočila: |
|
|
dpavli je napisal/a: |
Ali si uporabil Buermenov LCD driver?
Ti ga je ratalo oklestit na <16kB (zaradi uVisiona)?
LPd |
O tem je že kolega zadnjič govoril. 16kB za LCD driver? Se opravičujem, ampak WTF?
Kje se nabere toliko kode? Je toliko tabel za znake noter? _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
dpavli Član

Pridružen-a: Čet 25 Jan 2007 9:19 Prispevkov: 121 Aktiv.: 0.54
|
Objavljeno: Sob Mar 29, 2008 9:40 am Naslov sporočila: |
|
|
A nisva ravno midva nekaj po MSNju govorila o tem?
Nevem, bom govoril kaj z Buermenom ko ga vidim.
Smo na vezi,
D. |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1235 Aktiv.: 5.66 Kraj: KOPER
|
Objavljeno: Ned Mar 30, 2008 5:27 pm Naslov sporočila: |
|
|
Vse kar rabiš je tu!!!
Zanesljivo dela..
Koda: |
//--------------------------------------------------//
// LCD.C za KEIL MCB2130U razvojni board z LPC2138 //
//--------------------------------------------------//
#include <LPC21xx.h>
#include "lcd_ET.h"
void LCD_var(int var)
{
int a, i, set;
set = 0;
for(i = 9;i >= 0;i --)
{
a=0;
while (var >= desetX(i))
{
var -= desetX(i);
a++;
if (a !=0 )
{
set = 1;
}
if (a !=0 || set)
{
LCD_var (a);
}
if (a == 0 && i == 0 && set == 0)
{
LCD_var (a);
}
}
}
}
int desetX(int x)
{
int i = 0;
int rez = 1;
while (i < x)
{
rez *= 10; //
i++;
}
return rez;
}
void LCD_init()
{
IODIR0 = 0x00FF0000; /* P1.16..23 defined as Outputs */
set(E);
reset(RW);
reset(RS);
waitms(4000);
set(D4);
set(D5);
E_pulse();
waitms(1000);
set(D4);
set(D5);
E_pulse();
waitms(100);
set(D4);
set(D5);
E_pulse();
waitms(100);
set(D5);
reset(D4);
E_pulse();
waitms(100);
// LCD_cmd (0x28); // 4 bit mode, 1/16 duty, 5x8 font, 2 lines
// waitms(1000);
LCD_cmd (On); // display on
waitms(1000);
LCD_cmd (Cls); // display on
waitms(1000);
}
void E_pulse()
{
int a;
// IOSET1 = 0x00010000; /* Turn on LED */
// waitms(3000); /* Delay */
// IOCLR1 = 0x00010000;
set(E);
for(a = 0 ; a < 4000 ; a++ ) // delay app. 50ys
reset(E);
}
void LCD_cmd(int cmd)
{
reset(RS); // LCD command mode
LCD_port(cmd>>4); // high bits
E_pulse();
waitms(1000);
LCD_port(cmd&0x0f); // LOW BYTE
E_pulse();
waitms(1000);
set(RS); // LCD data mode
}
void LCD_vars(int var)
{
set(RS);
LCD_port((0x30|var)>>4);
E_pulse();
LCD_port((0x30|var)&0x0f);
E_pulse();
}
void LCD_chr(char data[])
{
int i;
set(RS);
for(i = 0; data[i]!= 0 ; i++)
{
LCD_port(data[i]>>4);
E_pulse();
LCD_port(data[i]&0x0f);
E_pulse();
}
reset(RS);
}
void LCD_locate(int row, int column)
{
reset(RS);
if (row == 1)
{
LCD_cmd(0x80 | (column - 1)&0x0f);
}
else
{
LCD_cmd(0xc0 | (column - 1)&0x0f);
}
}
void LCD_port(int port_value)
{
if(port_value > 0x0f ) //LCD port is only 4 bit long
port_value = 0; // we dont want to mess other bits
IOSET0 = port_value << 16;
IOCLR0 = (~port_value&0x0f) << 16;
}
void waitms (int ms)
{
volatile int i,j;
for (i = 0; i < ms; i++)
for (j = 0; j < 170; j++);
}
void Led_sk()
{
unsigned int n;
// IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */
for (n = 0x00010000; n <= 0x00800000; n <<= 1);
{
/* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
IOSET1 = n; /* Turn on LED */
waitms(3000); /* Delay */
IOCLR1 = 0x00FF0000; /* Turn off LEDs */
}
}
void set(int pin)
{
IOSET0 = (1<<pin);
}
void reset(int pin)
{
IOCLR0 = (1<<pin);
}
int main (void)
{
unsigned int n;
IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */
IODIR0 = 0x00FF0000; /* P1.16..23 defined as Outputs */
waitms(30000);
LCD_init();
waitms(30000);
while (1) //* Loop forever */
{
for (n = 0x00010000; n <= 0x00800000; n <<= 1)
{
//* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
IOSET1 = n; /* Turn on LED */
waitms(3000); /* Delay */
IOCLR1 = 0x00FF0000; /* Turn off LEDs */
}
LCD_locate(1,1);
LCD_chr("WINNER");
waitms(30000);
LCD_locate(2,1);
LCD_chr("RUDI");
}
}
//------------------------//
// LCD.h //
//-----------------------//
// LCD control lines
#define D4 16
#define D5 17
#define D6 18
#define D7 19
#define RS 20
#define RW 21
#define E 22
// LCD commands
#define Cls 0x01
#define CursorHome 0x02
#define ShiftL 0x18
#define ShiftR 0x1c
#define On 0x0c
#define Off 0x08
#define CursorOn 0x0e
#define CursorOff 0x0c
#define CursorBlinkOn 0x0f
#define CursorBlinkOff 0x0e
void LCD_init(void);
void LCD_cmd(int cmd);
void LCD_chr(char data[]);
void LCD_port(int port_value);
void waitms(int);
void set(int);
void reset(int);
void E_pulse(void);
int desetX(int);
void E_Pulse(void);
void Led_sk(void);
|
_________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
 |
BluPhenix Član

Pridružen-a: Pet 05 Mar 2004 12:54 Prispevkov: 1018 Aktiv.: 4.29 Kraj: Sežana
|
Objavljeno: Ned Mar 30, 2008 6:31 pm Naslov sporočila: |
|
|
Problem tistega LCD driverja ki ga talajo na faksu je v tem, da uporablja printf in zadeva zavzame ogrooomno placa. MAli program je velik če čez 80k.
Rešitev je v izdelavi lastnih driverjev in recimo printf funkcije. Jaz sem tako naredil za diplomsko. Cel program mp3 predvajalnika internetnih radijskih postaj, vključno s html "datotekami" lcd driverjem in vsem je bil velik 32k. In to bi lahko še nekoliko (mogoče tudi precej) zmanjšal, vendar je bil to prvi moj večji projekt z C in ARm, tako da je ostalo kot je.
V glavnem če se le da ne uporabljat tistih LCd driverjev of faksa, boste prišralai marsikateri kb. |
|
Nazaj na vrh |
|
 |
dpavli Član

Pridružen-a: Čet 25 Jan 2007 9:19 Prispevkov: 121 Aktiv.: 0.54
|
Objavljeno: Pon Mar 31, 2008 11:40 pm Naslov sporočila: |
|
|
rudiP je napisal/a: |
Vse kar rabiš je tu!!!
Zanesljivo dela..
|
Hvala, bom sprobal ampak ti verjamem na besedo.
LPd |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1235 Aktiv.: 5.66 Kraj: KOPER
|
Objavljeno: Tor Apr 01, 2008 7:09 am Naslov sporočila: |
|
|
NAPAKA V TEM DELU KODE PROSIM POPRAVI !!
Koda: |
void LCD_var(int var)
{
int a, i, set;
set = 0;
for(i = 9;i >= 0; i --)
{
a = 0 ;
while (var >= desetX(i))
{
var -= desetX(i);
a++;
}
if (a !=0 )
{
set = 1;
}
if (a !=0 || set)
{
LCD_vars(a);
}
if (a == 0 && i == 0 && set == 0)
{
LCD_vars(a);
}
}
} |
Uspešno vklopil RTC !! _________________ Lep pozdrav iz Kopra Rudi |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|