Дисплеи на основе контроллера HD44780 очень удобны в использовании, но имеют один недостаток — ограниченный набор символов. Может возникнуть ситуация, когда нужного для нашего проекта символа в стандартном наборе нету и что же тогда делать. Выход из этой ситуации мы и рассмотрим в нашей статье.
Производители контроллеров HD44780 предусмотрели возможность такой ситуации, поэтому в памяти контроллера есть специальные символы по адресам 0х00 — 0х07 — это переопределяеемые символы, графическое изображение которых может назначить сам пользователь. а значит что мы в контроллер можем записать до 8 необходимых нам символов.
#include <avr/io.h> #include <util/delay.h> #include «LCD.h»
#define PORT_LCD PORTD #define DDR_LCD DDRD
char Simvoli[][8]={ // 0 { 0b00001110, 0b00011111, 0b00010001, 0b00010001, 0b00010001, 0b00010001, 0b00011111, 0b00000000, }, // 1 { 0b00001110, 0b00011111, 0b00010001, 0b00010001, 0b00010001, 0b00011111, 0b00011111, 0b00000000, }, // 2 { 0b00001110, 0b00011111, 0b00010001, 0b00010001, 0b00011111, 0b00011111, 0b00011111, 0b00000000, }, // 3 { 0b00001110, 0b00011111, 0b00010001, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00000000, }, // 4 { 0b00001110, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00000000, }, // квадратик { 0b00011111, 0b00010001, 0b00010001, 0b00011111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, }, }; /* функчия принимает адрес символа из флеш памяти(адрес первого из 8и байтов изображения) переносит эти байты последовательно в ЖКИ по адресу (addres) addres — адрес куда запсать символ 0…7 */ void lcd_new_simvol(char Simvol[],char addres) { char i; // команда 0b01000000 + addres*8 присваение счетчику АС адреса в области CGRAM lcd_putbyte(0×40+addres*8, LCD_COMMAND);
for(i=0;i<8;i++) lcd_putbyte(Simvol[i],LCD_DATA); } int main(void) { init_port(); lcd_init();
//рисуем свои символы в ЖКИ lcd_new_simvol(&Simvoli[0][0],0); lcd_new_simvol(&Simvoli[1][0],1); lcd_new_simvol(&Simvoli[2][0],2); lcd_new_simvol(&Simvoli[3][0],3); lcd_new_simvol(&Simvoli[4][0],4);
lcd_gotoxy(0,0);
//выводим символы в соответств ячейках памяти lcd_putchar(0); lcd_putchar(1); lcd_putchar(2); lcd_putchar(3); lcd_putchar(4);
while(1); { }}
|