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) ()
)
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) ()
)