|
|
  |
44780 , вывод изменяющихся значений |
|
|
|
Aug 5 2008, 18:31
|

Местный
  
Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716

|
Добрый вечер всем ! Возникла проблемка при работе с жки , у меня проэкт ATmega8515 + LM7001 + PML009A , (возможно) напишу с чей то помощью . Проблема собственно такая : с книги скопировал исходник для работы с ЖКИ под 8 бит , переделал его под 4 бита режим , не совсем супер , но работает  Проблема в том что данные находящиеся во флеше выводятся на экран , а вот к примеру сделать строчку *Volume 00* и чтобы потом с помощью инкремента и декремента менять значения допустим 0 ..... 62 , никак ума не хватает Исходник свой прилагаю , буду рад пинка в нужном направлении
|
|
|
|
|
Aug 6 2008, 05:40
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(Павлик @ Aug 6 2008, 13:51)  Курсор выставить в нужное место могу , он мигает , а вот получить результат не могу , не пойму правильной логики работы  Так, а что мешает после установки курсора в нужное место, вывести туда число? У Вас затруднения с выводом числа на ЖКИ? Как я понял, Вы водите на ЖКИ строоку из флеша "Volume 00"? Далее Вы хотите измениять 00, чтобы получить к примеру "Volume 01", "Volume 62"? Вот такой код я используя для вывода целого знакового числа на ЖКИ Код void THD44780Service::WriteInt(int32_t figure, bool Zero) { uint8_t buff[10]; uint8_t i = 0; int32_t tmp = figure;
if(!tmp) WriteByte(LCD_ZERO, LCD_DTA); if(tmp < 0) { WriteByte(LCD_MINUS, LCD_DTA); tmp*= -1; } if((tmp < 10) && Zero) WriteByte(LCD_ZERO, LCD_DTA); while(tmp) { buff[i++] = tmp % 10; tmp/= 10; } while(i--) WriteByte((uint8_t)(buff[i] + LCD_ZERO), LCD_DTA); } WriteByte - это функция вывода байта на ЖКИ. Как видно здесь выводятся только данные, не команды (второй параметр WriteByte == LCD_DTA).
--------------------
Выбор.
|
|
|
|
|
Aug 6 2008, 06:38
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 25-09-07
Пользователь №: 30 817

|
Цитата(Павлик @ Aug 6 2008, 10:51)  Курсор выставить в нужное место могу , он мигает , а вот получить результат не могу , не пойму правильной логики работы  Задачу надо разбить на несколько элементарных функций, пусть это будет и не самым коротким вариантом, зато при хорошем понимании можно с первого раза достичь желаемого. Во первых надо выделить буфер переменных данных, в который уже складывать данные в кодах 44780. А далее функции установки начала строки (если их 2 или 4). Определить начальное место в строке для вывода переменной и записать туда содержимое буфера. Функцию очистки знакомест вывода. "Volume" выводить функцией вывода табличного значения во всю строку с 20h, где нет букв. Некоторые предпочитают выводит содержимое всей строки, обновляя ее целиком. Все должно получится. Реализацию на сях правда не делал. Года 4 назад на асме для адука делал тоже самое.
|
|
|
|
|
Aug 6 2008, 07:03
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(x-men @ Aug 6 2008, 15:38)  Во первых надо выделить буфер переменных данных, в который уже складывать данные в кодах 44780. А зачем буфер? Если задачу разбить на функции, как Вы предлагаете, что верно! то буфер-то и не нужен: он уже есть внутри ЖК индикатора и называется DDRAM. Нужно делать вот что: 1. Установить нужное значение переменной. С помощью кнопок, энкодера, через UART, программно - не важно. 2. Очистить дисплей. 3. Вывести строку "Volume: ". В конце пробел!. 4. Вывести число, используя функцию подобную той, что я выше привел. Это немного не оптимальный (обновляем всю строку), но наиболее интуитивно понятный метод. Либо вывести строку "Volume: " один раз, но устанавливая курсор в нужную позицию выводить туда переменную.
--------------------
Выбор.
|
|
|
|
|
Aug 6 2008, 18:17
|

Участник

Группа: Свой
Сообщений: 58
Регистрация: 17-01-07
Из: Одесса
Пользователь №: 24 523

|
В 44780 возможно указание адреса в DDRAM и запись нужного байта соответственно по указанному адресу сразу в память, не через регистры, а при последующем "кадре" на жки всё будет видно. Если работаешь с АСМом, проще некуда, да и размер программы небольшой
--------------------
|
|
|
|
|
Aug 11 2008, 08:25
|

Местный
  
Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716

|
Разобрался я ребята , спасибо за подсказки у меня получилось так : ldi data,0x80+8 // первая стока + нужное знакоместо rcall wait_lcd // джем готовности жки rcall lcd_cmd // передаем команду ldi data,0xXX // загружаем данные rcall print_char // выводим их ldi data,0xС0+8 // вторая стока + нужное знакоместо rcall wait_lcd // джем готовности жки rcall lcd_cmd // передаем команду
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|