ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
440404 Топик полностью
fk0, легенда (10.09.2013 15:14, просмотров: 108) ответил Mazur на Бр-р-р. Запутался. Не до конца разобрался. Есть массив. Буфер дисплея.
Интерфейс с дисплеем HD44780 из реального проекта см. ниже. Вся суть в интерфейсах.  /*! атрибуты знакоместа -- может быть выбрано только одно (в hd_attr) */ enum e_hd_attr { HD_ABLINK=1, /* мигающий */ HD_ALIGHT=2, /* быстро мигающий */ HD_ABLACK=3, /* затемнённое знакоместо */ HD_AUNDER=4 /* подчёркнутое знакоместо */ }; /*! маска атрибутов (в hd_attr) */ #define HD_ATTR_MASK 0x0f /*! признак/бит обновления знакоместа (в hd_text и hd_attr) */ #define HD_TOUCH 0x80 /*! фреймбуфер текстовое содержимое */ extern uint8_t hd_text[HD_NSCREENS][HD_VLINES][HD_VCOLUMNS]; /*! фреймбуфер -- атрибуты и признак необходимости обновления */ extern uint8_t hd_attr[HD_NSCREENS][HD_VLINES][HD_VCOLUMNS]; /*! инициализация (аппаратная) дисплея, вызывается однократно после * включения питания */ void hd_init(void); /*! макс. значение яркости и контрастности */ #define HD_MAX_VOL 255 /*! регулировка яркость, HD_MAX_VOL -- максимальная */ void hd_backlight(uint_least8_t vol); /*! регулировка контрастности, оптимальное значение НЕИЗВЕСТНО */ void hd_contrast(uint_least8_t vol); /*! включение заданного виртуального экрана, 0..HD_NSCREENS */ void hd_screen(uint_least8_t screen); /*! включение курсора в ТЕКУЩЕМ виртуальном экране */ void hd_cursor_on(void); /*! выключение курсора в текущем виртуальном экране */ void hd_cursor_off(void); /*! опция виртуального экрана -- текст заворачивается по границе видимой * части экрана, а не по полной ширине виртуального экрана */ #define HD_TXTWRAP 1 /*! разрешение автоскролла и сворачивания строк */ #define HD_AUTOSCROLL 2 /*! чтение опций для заданного виртуального экрана */ uint_least8_t hd_getopts(uint_least8_t screen); /*! установка опций `flags' для заданного виртуального экрана `screen' */ void hd_setopts(uint_least8_t screen, uint_least8_t flags); /*! установка курсора в заданную позицию в заданном виртуальном экране */ void hd_set_cursor(uint_least8_t screen, uint_least8_t line, uint_least8_t col); /*! чтение позиции видимой части экрана относительно большего виртуального экрана */ void hd_getvpos(uint_least8_t screen, uint_least8_t *line, uint_least8_t *col); /*! установка позиции видимой части экрана относительно виртуального экрана */ void hd_setvpos(uint_least8_t screen, uint_least8_t line, uint_least8_t col); /*! установка атрибутов для вывода текста (возвращается старое значение) */ uint_least8_t hd_set_attr(uint_least8_t screen, uint_least8_t newattr); /*! очистка видимой части экрана. */ void hd_cls(uint_least8_t screen); /*! сдвиг содержимого экрана вверх на одну строку */ void hd_scroll(uint_least8_t screen); /*! вывод символа в заданный виртуальный экран */ void hd_putc(uint_least8_t screen, char c); /*! вывод строки */ void hd_puts(uint_least8_t screen, const char *data); /*! вывод последовательности символов заданной длины */ void hd_write(uint_least8_t screen, const char *data, size_t size);
[ZX]