реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> 44780 , вывод изменяющихся значений
pavel-pervomaysk
сообщение Aug 5 2008, 18:31
Сообщение #1


Местный
***

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



Добрый вечер всем !
Возникла проблемка при работе с жки , у меня проэкт ATmega8515 + LM7001 + PML009A , (возможно) напишу с чей то помощью .
Проблема собственно такая : с книги скопировал исходник для работы с ЖКИ под 8 бит , переделал его под 4 бита режим , не совсем супер , но работает 05.gif Проблема в том что данные находящиеся во флеше выводятся на экран , а вот к примеру сделать строчку *Volume 00* и чтобы потом с помощью инкремента и декремента менять значения допустим 0 ..... 62 , никак ума не хватает wub.gif
Исходник свой прилагаю , буду рад пинка в нужном направлении twak.gif
Прикрепленные файлы
Прикрепленный файл  PML009A.rar ( 17.11 килобайт ) Кол-во скачиваний: 48
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 5 2008, 19:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Павлик @ Aug 6 2008, 00:31) *
а вот к примеру сделать строчку *Volume 00* и чтобы потом с помощью инкремента и декремента менять значения допустим 0 ..... 62 , никак ума не хватает wub.gif
Используйте команды LCD для позиционирования курсора и выводите число в нужную позицию. Или проблема не в этом?
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Aug 6 2008, 04:51
Сообщение #3


Местный
***

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



Курсор выставить в нужное место могу , он мигает , а вот получить результат не могу , не пойму правильной логики работы wacko.gif
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 6 2008, 05:40
Сообщение #4


Познающий...
******

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



Цитата(Павлик @ Aug 6 2008, 13:51) *
Курсор выставить в нужное место могу , он мигает , а вот получить результат не могу , не пойму правильной логики работы wacko.gif

Так, а что мешает после установки курсора в нужное место, вывести туда число?
У Вас затруднения с выводом числа на ЖКИ?
Как я понял, Вы водите на ЖКИ строоку из флеша "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).


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
x-men
сообщение Aug 6 2008, 06:38
Сообщение #5


Местный
***

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



Цитата(Павлик @ Aug 6 2008, 10:51) *
Курсор выставить в нужное место могу , он мигает , а вот получить результат не могу , не пойму правильной логики работы wacko.gif

Задачу надо разбить на несколько элементарных функций, пусть это будет и не самым коротким вариантом, зато при хорошем понимании можно с первого раза достичь желаемого.
Во первых надо выделить буфер переменных данных, в который уже складывать данные в кодах 44780. А далее функции установки начала строки (если их 2 или 4). Определить начальное место в строке для вывода переменной и записать туда содержимое буфера. Функцию очистки знакомест вывода. "Volume" выводить функцией вывода табличного значения во всю строку с 20h, где нет букв.
Некоторые предпочитают выводит содержимое всей строки, обновляя ее целиком.
Все должно получится. Реализацию на сях правда не делал. Года 4 назад на асме для адука делал тоже самое.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 6 2008, 07:03
Сообщение #6


Познающий...
******

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



Цитата(x-men @ Aug 6 2008, 15:38) *
Во первых надо выделить буфер переменных данных, в который уже складывать данные в кодах 44780.

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Aug 6 2008, 10:46
Сообщение #7


Местный
***

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



haker_fox на С это все красиво , но я пишу на асме и не понимаю чесно говоря С .
Спасибо пока за советы , сегодня буду вечером пробовать , о результатах отпишусь .
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 6 2008, 13:25
Сообщение #8


Познающий...
******

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



Цитата(Павлик @ Aug 6 2008, 19:46) *
но я пишу на асме и не понимаю чесно говоря С .

А вообще (ИМХО) - зря sad.gif Си учить нужно.
Может быть самое время начать? smile.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Aug 6 2008, 16:20
Сообщение #9


Местный
***

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



Цитата(haker_fox @ Aug 6 2008, 15:25) *
А вообще (ИМХО) - зря sad.gif Си учить нужно.
Может быть самое время начать? smile.gif


Я вполне согласен a14.gif , чтобы не флудить , о результатах отпишу beer.gif
Go to the top of the page
 
+Quote Post
Dmitry_Od
сообщение Aug 6 2008, 18:17
Сообщение #10


Участник
*

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



В 44780 возможно указание адреса в DDRAM и запись нужного байта соответственно по указанному адресу сразу в память, не через регистры, а при последующем "кадре" на жки всё будет видно.

Если работаешь с АСМом, проще некуда, да и размер программы небольшой
Прикрепленные файлы
Прикрепленный файл  lcd_HD44780.pdf ( 385.19 килобайт ) Кол-во скачиваний: 42
 


--------------------
http://odessa-intern.myminicity.com/ - эдакий муравейник
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 8 2008, 11:52
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Небольшая лепта 44780+I2C


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Aug 11 2008, 08:25
Сообщение #12


Местный
***

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



Разобрался я ребята , спасибо за подсказки beer.gif
у меня получилось так :

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 // передаем команду
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01468 секунд с 7
ELECTRONIX ©2004-2016