Custom CHAR LCD displa bruger PIC16F877

F

flystehu

Guest
Hullo,
Jeg forsøger at vise brugerdefinerede tegn på LCD bruger PIC 16F877.
Den compiler jeg bruger er IAR.
Når jeg samler, er det ok.Hewever, når de foretager programmet og producere. Hex.
En fejl kommer ud, siger:

Gøre mål Release ...
Forbinder ...
Fejl [E104]: Failed til at passe til alle segmenter i bestemte intervaller.Problemet blev opdaget i segment OVERLAY0.Ude af stand til at placere 3 blok (s) (0x95 byte (s) i alt) i 0x5a byte (s) af hukommelse.Problemet opstod under behandling af segment placeringsmålrettet kommandoen "-P (DATA) OVERLAY0, WRKSEG, BANK0_I, BANK0_Z, BANK0_N = 20-07F", hvor det på tidspunktet for placeringsmålrettede den tilgængelige hukommelse værdiskalaer var "20-79"

Samlet antal fejl: 1
Samlet antal advarsler: 0

Alle kan hjælpe mig opmærksom på, hvordan man kan rette fejlen?
er det fordi, den interne hukommelse af PIC er opbrugt?

//------------------------------------------------ -----
void load_CGRAM_1 (int * p)
(
int i;
LCD_RS = 0;
lcd_write (0x40);
LCD_RS = 1;
for (i = 0; i <32; i )
lcd_write (p );
)
//------------------------------------------------ -----
void load_CGRAM_2 (int * p)
(
int i;
LCD_RS = 0;
lcd_write (0x60);
LCD_RS = 1;
for (i = 0; i <32; i )
lcd_write (p );
)
//------------------------------------------------ ----------------
void display_CGRAM (int code1, int code2, int code3, int code4)
(
LCD_RS = 0;
lcd_write (0x80);
lcd_putch (code1);
lcd_putch (code2);

lcd_putch (0x20); / / plads
lcd_putch (0x20); / / plads
lcd_putch (code3);
lcd_putch (code4);
)

//------------------------------------------------ ----------------
void vigtigste ()
(
int chinese_character_matrix_1 [32] =
(
0x02, 0x02, 0x04, 0x0c, 0x14, 0x04, 0x04, 0x04,
0x04, 0x04, 0x1f, 0x04, 0x0e, 0x15, 0x1f, 0x15,
0x01, 0x00, 0x07, 0x01, 0x01, 0x03, 0x00, 0x07,
0x18, 0x10, 0x1e, 0x08, 0x18, 0x1c, 0x10, 0x1e,
);
int chinese_character_matrix_2 [32] =
(
0x02, 0x02, 0x04, 0x0c, 0x14, 0x04, 0x04, 0x04,
0x04, 0x04, 0x1f, 0x04, 0x0e, 0x15, 0x1f, 0x15,
0x04, 0x04, 0x10, 0x08, 0x00, 0x05, 0x09, 0x13,
0x0e, 0x0A, 0x0e, 0x0A, 0x0e, 0x1f, 0x15, 0x15,
);

int chinese_character_matrix_3 [32] =
(
0x00, 0x01, 0x04, 0x02, 0x0A, 0x0A, 0x09, 0x08,
0x00, 0x00, 0x08, 0x00, 0x02, 0x02, 0x02, 0x1e,
0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x09, 0x0b, 0x11,
0x04, 0x0f, 0x0A, 0x0A, 0x0f, 0x0A, 0x0A, 0x17,
);
int chinese_character_matrix_4 [32] =
(
0x04, 0x00, 0x0e, 0x04, 0x04, 0x04, 0x0c, 0x07,
0x0e, 0x00, 0x1f, 0x08, 0x0A, 0x0f, 0x00, 0x1f,
0x0e, 0x00, 0x1f, 0x08, 0x08, 0x0A, 0x0A, 0x0f,
0x04, 0x04, 0x1f, 0x05, 0x05, 0x05, 0x05, 0x0b,
);iniPort ();
lcd_init ();

load_CGRAM_1 (chinese_character_matrix_1);
load_CGRAM_2 (chinese_character_matrix_2);
display_CGRAM (0x04, 0x05, 0x06, 0x07);

DelayUs (40);
mens (1) ()
)

 
instead of int
.

Har du nogensinde overveje at erklære din arrays som usignerede CHAR
stedet for int.Dette vil halvere rom forbrug, og jeg tror, der
er ingen nødvendighed for heltal., so that they are used from ROM and don't get copied to the RAM.

Desuden bør du erklære arrays som const,
således at de anvendes fra rom og ikke får kopieres til RAM.
Eksempel:
const usignerede CHAR chinese_character_matrix_1 [32] =
(
...
)

(Aldrig brugt IAR, således ikke sikker på, at syntaksen er korrekt for IAR -> RTFM)

 
Tak.Jeg erklærede array som const usignerede CHAR og lægge det uden de vigtigste funktion.Det fungerer perfekt!

M! K skrev:

instead of int
.
Har du nogensinde overveje at erklære din arrays som usignerede CHAR
stedet for int.

Dette vil halvere rom forbrug, og jeg tror, der er ingen nødvendighed for heltal.

, so that they are used from ROM and don't get copied to the RAM.
Desuden bør du erklære arrays som const,
således at de anvendes fra rom og ikke får kopieres til RAM.

Eksempel:

const usignerede CHAR chinese_character_matrix_1 [32] =

(

...

)(Aldrig brugt IAR, således ikke sikker på, at syntaksen er korrekt for IAR -> RTFM)
 

Welcome to EDABoard.com

Sponsor

Back
Top