Moderadores: 51, guest2003, Renie, gpenga
MarcusPonce escreveu:Um ARM7 consegue desenhar rápido mesmo que seja um controlador KS0108. Como a RAM interna é de tamanho razoável, separamos 1kByte para manter uma cópia do que está sendo exibido no display e usamos esta cópia na hora de setar um pixel, por exemplo. Assim fica mais rápido desenhar.
Usar um LCD com KS0108 tende a ser mais lento, pois ele não contém as fontes das letras internamente, ou seja, para mostrar um "A" é preciso que o LCD receba alguns bytes que formam o desenho do "A". Se for uma letra grande (digamos uns 16 pixels de altura), então são mais bytes e as rotinas também precisam informar o LCD onde colocar o cursor interno para ir colocando os bytes no lugar certo, no meio de cada letra.
Para simplificar a programação também existem LCDs com controladores
que já contám fontes de letras, mas pelo que lembro não podem colocar letras grandes sozinhos.
Existem algumas rotinas free na Internet para controladores diversos, portanto procure pelo nome do controlador do seu display. Já dá para desenhar e escrever no LCD com elas, mas as bibliotecas mais completas são pagas.
MarcusPonce escreveu:Para simplificar a programação também existem LCDs com controladores
que já contám fontes de letras, mas pelo que lembro não podem colocar letras grandes sozinhos.
// INT8U d;
GLCD_DATA_DIR_IN()
GLCD_CONTROL_DIR_OUT();
CLR (PIN_RW_GLCD);
CLR (PIN_DI_GLCD);
CLR (PIN_E_GLCD);
SET (PIN_CS1_GLCD);
SET (PIN_CS2_GLCD);
CLR (PIN_RESET_GLCD);
DelayMiliSegundo(100);
SET (PIN_RESET_GLCD);
DelayMiliSegundo(100);
DelayMiliSegundo(500);
lcd_wait(0);
lcd_wait(1);
lcd_write_wait(0, LCD_INST, LCD_POWERON(1));
lcd_write_wait(1, LCD_INST, LCD_POWERON(1));
lcd_write_wait(0, LCD_INST, LCD_STARTLINE(0));
lcd_write_wait(1, LCD_INST, LCD_STARTLINE(0));
lcd_clear();
}
void lcd_wait(INT8U chip) {
while((lcd_read(chip, LCD_INST)) & (LCD_BUSY | LCD_RESET)){};
}
void lcd_write_wait(INT8U chip, INT8U reg, INT8U data) {
lcd_write(chip, reg, data);
lcd_wait(chip);
}
void lcd_clear() {
INT8U x, y;
for(x = 0; x < 8; ++x) {
lcd_write_wait(0, LCD_INST, LCD_YADDR(0));
lcd_write_wait(0, LCD_INST, LCD_XADDR(x));
for(y = 0; y < 64; ++y) {
lcd_write_wait(0, LCD_DATA, 0x00);
}
}
for(x = 0; x < 8; ++x) {
lcd_write_wait(1, LCD_INST, LCD_YADDR(0));
lcd_write_wait(1, LCD_INST, LCD_XADDR(x));
for(y = 0; y < 64; ++y) {
lcd_write_wait(1, LCD_DATA, 0x00);
}
}
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante