Заголовок сообщения: Re: LCD и Atmega16 самый простой код, на простом примере.
Добавлено: Вс апр 07, 2013 23:21:35
Модератор
Карма: 90
Рейтинг сообщений: 1435
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4603 Откуда: Планета Земля
Рейтинг сообщения:-1 Медали: 1
Плохой пример взяли, поищите другой... Хотя бы, чтобы была команда перевода курсора по координатам. Мне кажется, подобных библиотек в тырнете тьма тьмущая...
Не могу судить об этом примере, плохой или хороший. Просто он самый доходчивый и простой, без подключения библиотеки LCD. Да и мне пока многого и не надо. Нужно всего лишь вывести несколько переменных на экран. Как вывели строку "Hello world!" Если конечно это возможно в этом примере. Спасибо!
// HD44780 #define RS BIT7 // 0 - команда, 1 - данные #define E BIT6 // Стробирующий вход (синхр.)
// 74HC595 #define SH BIT5 // #define ST BIT4 // #define DS BIT3 //
#endif /* hd44780 */
int StrokaOne[] = {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}; // 16
int StrokaTwo[]= {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}; // 16 int LedPauza = 50;
// Init_HD_44780(Комманда); int Init_HD_44780(int Commands) { // Команда //************************ for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка P1OUT &= ~RS; P1OUT |= E; //P1OUT = 12; HC595Out(Commands); for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
P1OUT &= ~RS + E; for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка //************************ } // OUT_LED_Word(Символы, Номер строки, Адрес стартовой ячейки, Статус Символов (char - 1 или int - 2), Символ в Dec); int OUT_LED_Word(char Text[], int Stroka, int StartAadres, int StatusChar, int TextDec[]) { if(StatusChar == 1) { if(Stroka == 1) { Stroka = 128; }
if(Stroka == 2) { Stroka = 168; }
for(int i = 0; i <= 16; i++) { if(Text[i] == 0) { } else { if(Text[i+1] == 0) { if(Text[i+1] == 0) { OutStrokaOne(Text[i], i, StartAadres, Stroka); i = 16; } else { OutStrokaOne(Text[i], i, StartAadres, Stroka); } } else { OutStrokaOne(Text[i], i, StartAadres, Stroka); } } } }
if(Stroka == 2) { Stroka = 168; } for(int i = 0; i <= 16; i++) { if(TextDec[i] == 0) { } else { if(TextDec[i+1] == 0) { if(TextDec[i+1] == 0) { OutStrokaOne(TextDec[i], i, StartAadres, Stroka); i = 16; } else { OutStrokaOne(TextDec[i], i, StartAadres, Stroka); } } else { OutStrokaOne(TextDec[i], i, StartAadres, Stroka); } } } } }
// OUT_LED_Dec(Значение, Номер строки, Адрес стартовой ячейки, Статус дроби); int OUT_LED_Dec(int Value, int Stroka, int StartAadres, int Share ) { //Value = Value * 100; unsigned char s[16]; if(Stroka == 1) { Stroka = 128; }
for (int i = 0; i <= 4; i++) { OutStrokaOne(s[i], i, StartAadres, Stroka); } }
// OutStrokaOne(Символ в Dec, Номер символа, Адрес стартовой ячейки, Адрес строки(128, 168)); int OutStrokaOne(int Simvl, int StrokaAdres, int StartAdresStrokaOne, int StrokaOneTwo) { //************************ Команда P1OUT &= ~RS; P1OUT |= E; //P1OUT = StrokaOneTwo + StrokaAdres + StartAdresStrokaOne; HC595Out(StrokaOneTwo + StrokaAdres + StartAdresStrokaOne);
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка P1OUT &= ~RS + E; for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка //************************
Если не хотите воспользоваться умным советом от Аlex, то выводите пустые символы(знак пробела) до тех пор, пока индикатор сам не перебросит на следующую строку, а там преобразовав х в текст выдавайте на лцд.
Если серьезно, то есть команды перемещения курсора, читайте описание лцд.
Спасибо! Я так понимаю длинный код переданный "кефир"ом это библиотека, которую надо подключить к главному коду! Я пользуюсь "WinAVR+Studio4.19" или Studio6 с собственным Toolchain(заменитель WinAVR). Однако ни тот ни другой не видят готовых библиотек работающих с LCD. И библиотеки эти находятся глубоко в поддиррикториях. <hd44780.h>,<lcd.h>. Попробую разобраться с высланным кодом, и с предложеним о пробелах, спасибо! Кстати в готовых библиотеках прописанны порты для работы с шиной LСD. Но в них указанны другие порты чем в моём проекте. Мне нужно в библиотеках редактировать порты ввода вывода, а потом подключать в главную программу?
"Правильная" библиотека имеет расширение .а (это отдельная тема)
.h в нем описываются переменные , прототипы функций(файл описаний, подключается инструкцией #include <lcd.h>), а тело функций описано в .с (вот ее и называют библиотекой, в принципе это обычный "с" файл, как подключить уже описывал.)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения