|
Вопрос по LCD и CodeVision |
|
|
|
Feb 16 2007, 23:01
|
Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699

|
У меня есть два вопроса
Первый он же главный. Подскажите пожалуйста, как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ?
Второй. Есть ли еще команды для роботы с ЖКИ в CodeVision кроме стандартных в lcd.h, если есть, то как их можно использовать в том же CodeVision (синтаксис команды или функции)?
Заранее благодарен.
|
|
|
|
|
 |
Ответов
|
Mar 1 2007, 00:04
|
Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699

|
О спасибо всем, очень помогли ваши советы. Что самое интересно что в хелпе на сvavr как и показал vooon есть пример:
/* table for the user defined character arrow that points to the top right corner */ flash byte char0[8]={ 0b0000000, 0b0001111, 0b0000011, 0b0000101, 0b0001001, 0b0010000, 0b0100000,
0b1000000};
/* function used to define user characters */ void define_char(byte flash *pc,byte char_code) { byte i,a; a=(char_code<<3) | 0x40; for (i=0; i<8; i++) lcd_write_byte(a++,*pc++); }
но он както так непонятно (тогда был) написан или я чтото недопонимаю но после ваших советов, стало все так красиво получатся, и я смог даже отобразить курсор с его разными формами (их вроде там три).
И что означают вот ети две строчки функции define_char
a=(char_code<<3) | 0x40; for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
если можно поподробней.
А сейчас я поставил себе задачу, вывести на экран бегущую строку тобишь есть строка символов которая имеет допустим 50 символов то ее нужно вывести на дисплей имеющий 20 символов в строке.
Кстати написал я вот такой код то, что первое пришло наум и явно чтото не здравое Вот
int i; char s[12]="Hello world"; ....... for(i=0;i<=19;i++) { delay_ms(500); lcd_gotoxy(i,0); lcd_puts(s); } ........
и он мне нормально сдвигал строку пока символ d не дошел до края дисплея, а потом с начала нижней строки стали отображаться исчезнувшие символы верхней строки. Почему? Я подумал что строка должна просто себе исчезать по мере продвижения.
Подскажите что я сделал не так, помогите пожалуйста ссылками или советами по поводу бегущей строки символов по строке дисплея. И как все это можна организовать на CodeVisionAVR Вот еще, дисплей у меня 4х20
Заранее благодарен.
|
|
|
|
|
Mar 1 2007, 01:09
|

Участник

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401

|
Цитата(Рома_С @ Mar 1 2007, 00:04)  И что означают вот ети две строчки функции define_char
a=(char_code<<3) | 0x40; for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
если можно поподробней.
А сейчас я поставил себе задачу, вывести на экран бегущую строку тобишь есть строка символов которая имеет допустим 50 символов то ее нужно вывести на дисплей имеющий 20 символов в строке. посмотрите http://electronix.ru/forum/index.php?s=&am...st&p=129947  a - это адрес куда будем писать, у 44780 есть две области памяти знакогенератор и данные, отображаемые на экране адрес первой ячейки знакогенератора 0x40, а данных - 0x80 на каждый _свой_ символ нужно 8 байт (т. е. для символа 0 это 0x40 - 0x47, соответственно для 1ого 0x48 - 0x4F, и т.д.) это делаем сдвигом номера символа на 3 влево, и побитное или с 0х40. далее в цикле записываем 8 значений из массива переданного через указатель pc Ах да! забыл сказать: у 44780 данные разделены на две строки по 40 байт у двухстрочных для удобства первая строка это первая  , а вторая - вторая Но у четырехстрочных первая строка в озу отображается на 1ой и 3ей(!) строках а вторая строка в озу - на 2ой и 4ой надеюсь понятно написал
|
|
|
|
|
Mar 1 2007, 22:25
|
Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699

|
Цитата(vooon @ Mar 1 2007, 00:09)  a - это адрес куда будем писать, у 44780 есть две области памяти знакогенератор и данные, отображаемые на экране адрес первой ячейки знакогенератора 0x40, а данных - 0x80 на каждый _свой_ символ нужно 8 байт (т. е. для символа 0 это 0x40 - 0x47, соответственно для 1ого 0x48 - 0x4F, и т.д.) это делаем сдвигом номера символа на 3 влево, и побитное или с 0х40.
далее в цикле записываем 8 значений из массива переданного через указатель pc Спасибо конечно за ответ, но если чесно я еще болие запутался.  Почему мы сдвигаем номер символа именно на 3. А номер символа это что? А где можно про это поподробней прочитать? Уж больно интересно узнать принципы создания символа. Извините меня пожалуйста за мои, возможно, ламерские вопросы.
|
|
|
|
|
Mar 2 2007, 00:27
|

Участник

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401

|
Цитата(Рома_С @ Mar 1 2007, 22:25)  А где можно про это поподробней прочитать? Уж больно интересно узнать принципы создания символа. вот гляньте, достаточно полное описание http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm
|
|
|
|
|
Mar 2 2007, 17:12
|

Участник

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401

|
Цитата(Сергей Борщ @ Mar 2 2007, 14:40)  ... про программирование знакогенератора там практически ничего нет. а впринципе про программирование знакогенератора нужно знать совсем чуть-чуть  при шрифте 5х8 (самый распространный) образ состоит из 8и байт, в которых используются с 0ого по 4ый биты; 1 - черная точка, 0 - прозрачная 8ой байт обычно не отображается. номера символов: с 0 по 7ой (чтобы вывести символ 0 придется писать lcd_putchar() , т.к. 0 "обрубит" строку) вот полное описание от хитачи http://www.atmel.ru/Spec/HD44780.pdfPS: если что-то непонятно всеравно можно воспользоваться http://vooon.narod.ru/test/hd/index.html?&...62=16&c63=0я ей пользуюсь постоянно(когда в проекте есть 44780)
|
|
|
|
|
Mar 5 2007, 21:27
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Люди  те кто будет пробовать использовать стандартные библиотеки для работы с I2C и LCD под CodeVision!!!!! Во первых I2C полный отстой по времени работы,пишите свои функции на асме(вставки) увидите реальный прирост скорости. Во вторых функции работы с LCD глючны!! Не используйте их.Мной проверены они на 4433 и на меги8 блин виснет нафиг проц минут через 15-10.Они также очень тормозные. Возьмите сядьте и напишите свои функции. Просто очень хочется огородить начинающих,когда проц будет виснуть и не будешь знать из-за чего. Я переписал нужные мне функции под I2C и LCD гонял их непрерывно - всё работало как часы. Ну а может просто версия у меня старая CodeVision 1.24 щас свежее есть.
|
|
|
|
|
Mar 6 2007, 01:04
|

Участник

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401

|
Цитата(Wano @ Mar 5 2007, 21:27)  Во вторых функции работы с LCD глючны!! Не используйте их.Мной проверены они на 4433 и на меги8 блин виснет нафиг проц минут через 15-10.Они также очень тормозные. возможно вам попался плохо вылеченный CV. устройство на М8 нормально работает круглые сутки почти пол года - проблем нет скомпилен был CV 1.24.8b возможно конечно что вы пользовались ф-цией srintf() она действительно может виснуть при некоторых настройках. I2C CV не пользую - зачем, когда есть TWI
|
|
|
|
Сообщений в этой теме
Рома_С Вопрос по LCD и CodeVision Feb 16 2007, 23:01 Яrik Цитата(Рома_С @ Feb 16 2007, 22:01) У мен... Feb 16 2007, 23:36 Artur Nikitin Цитата(Рома_С @ Feb 16 2007, 23:01) ...ка... Feb 28 2007, 12:42 vooon Цитата(Рома_С @ Feb 16 2007, 23:01) У мен... Feb 28 2007, 22:30   Сергей Борщ Цитата(Рома_С @ Mar 1 2007, 21:25) Почему... Mar 1 2007, 23:24       Petka Цитата(Wano @ Mar 5 2007, 21:27) Люди т... Mar 6 2007, 01:10        Wano Кароче товарищи жаль что нельзя с вами поспорить.Х... Mar 6 2007, 21:34 megachip Использую 1.24.6, никаких проблем с библиотекой LC... Mar 6 2007, 21:48 Wano Киньте на ksotпсюкlist.ru свою версию,я посравнива... Mar 6 2007, 21:57 Рома_С Ну, наконец то разобрался я с вот этой функцией.
... Mar 6 2007, 23:32 vooon Цитатасколько можно собственных символов записать ... Mar 7 2007, 01:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|