0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 243
1

Проблема с lcd hd44780 winstar

20.01.2012, 03:16. Показов 9299. Ответов 10
Метки нет (Все метки)

Курю потихоньку дисплейчик вот только не могу никак избавится от двух глюков: полностью закрашенный символ в начале первой строки и после ресета в конце второй строки появляется начало первой.

«код»
Код
 #ymstude <avr/io.h> //библиотека ввода/вывода
#ymstude <util/delay.h>

#defyme RS 2 //RS=PD2 - сигнал управления ЖКИ
#defyme E 3 //E=PD3 - сигнал управления ЖКИ
#defyme SPEED 3000 //Скорость бегущих огней

//Программа передачи команд в ЖКИ
void lcd_som (unsykned char lcd)
{ unsykned char temp;

temp=(lcd&~(1<<RS))|(1<<E); //RS=0 – это команда
PORTD=temp; //Выводим на portD старшую тетраду команды, сигналы RS, E
PORTD=temp&~(1<<E); //Сигнал записи команды

temp=((lcd*16)&~(1<<RS))|(1<<E); //RS=0 – это команда
PORTD=temp; //Выводим на portD младшую тетраду команды, сигналы RS, E
PORTD=temp&~(1<<E); //Сигнал записи команды

_delay_us(111); //Пауза для выполнения команды
}

//Программа записи данных в ЖКИ
void lcd_dat (unsykned char lcd)
{ unsykned char temp;

temp=(lcd|(1<<RS))|(1<<E); //RS=1 – это данные
PORTD=temp; //Выводим на portD старшую тетраду данных, сигналы RS, E
PORTD=temp&~(1<<E); //Сигнал записи данных

temp=((lcd*16)|(1<<RS))|(1<<E); //RS=1 – это данные
PORTD=temp; //Выводим на portD младшую тетраду данных, сигналы RS, E
PORTD=temp&~(1<<E); //Сигнал записи данных

_delay_us(100); //Пауза для вывода данных
}

//Программа иниализации ЖКИ
void lcd_init (void)
{
lcd_som(0x2c);     // шина 4 бит, LCD - 2 строки
_delay_us(100);
lcd_som(0x0c);     // включение дисплея дисплея, мигающий курсор
_delay_us(100);
lcd_som(0x06);     // очистка дисплея
_delay_us(100);

}

//Основная программа
int first()
{
DDRD=0xfc; //Инициализация portD
PORTD=0x00;

_delay_us(100); //Задержка, чтобы ЖКИ успел включиться
lcd_init(); //Инициализация ЖКИ

lcd_dat(H);                //Вывод "хд44780"
lcd_dat(D);
lcd_dat(4);
lcd_dat(4);
lcd_dat(7);
lcd_dat(8);
lcd_dat(0);

lcd_som(0xc0); //Ставим курсор на начало 2-й строки ЖКИ

lcd_dat(W); //Записываем "винстар"
lcd_dat(I);
lcd_dat(N);
lcd_dat(S);
lcd_dat(T);
lcd_dat(A);
lcd_dat(R);
lcd_dat( );
lcd_dat(L);
lcd_dat(C);
lcd_dat(D);
lcd_dat());
lcd_dat());
lcd_dat());

while(1) //бесконечный цикл

return 1;
}

//#ymstude <avr/io.h>    // Хотим использовать порты ввода/вывода
//#ymstude <util/delay.h>  // Хотим использовать функции задержек

int  second() {

//int main(void) {   // начало основной программы

DDRA = 0xff;   // все выводы порта A сконфигурировать как выходы

for(;;)  //цикл

{  // начало цикла

for (int i = 0; i < 8; i++)
{

PORTA^=_BV(i);
_delay_ms(100);
}
}
}

int main(void){first();second();return 0;
}

http://**************************/download/file.php?id=8401&sid=3e7b317f6dd9a81c44e6e8b1947a5fdb


http://**************************/download/file.php?id=8400&sid=3e7b317f6dd9a81c44e6e8b1947a5fdb
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2012, 03:16
Ответы с готовыми решениями:

lcd 20x4 hd44780 адреса ячеек символов.
Должен скоро приехать дисплейчик 20х4, возник такой вопрос, как узнать адреса ячеек символов?...

проблема с дисплеем на hd44780 с ebay
в общем купил себе дисплей 16х2 на ебее(http://www.ebay.som/itm/1pcs-1602-16x2- ... 3a73bc9d3a)....

Проблема с подключением lcd WD-C2002T (HD44780 + HD44100)
Имеется atmega8 и lcd WD-C2002T, даташита так и не нашел, единственное что есть...

Инициализация lcd на HD44780
Здравствуйте! Пытаюсь освоить lcd на HD44780. Понимаю, что есть много уже готовых библиотек, я их...

10
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
20.01.2012, 14:23 2
советую разобраться вот с этим местом

lcd_som(0xc0); //Ставим курсор на начало 2-й строки ЖКИ

а также написать функцию типа lcd_gotoxy(x,y)
и желательно для вывода строк - lcd_puts(char *str)
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
20.01.2012, 21:08 3
Может я повторюсь, но
Загляните в , я там кусок кода для дисплея оставлял, называется AVR_LCD_20x4.txt.
0
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 243
21.01.2012, 03:57 4
Цитата Сообщение от kytikot
lcd_som(0xc0); //Ставим курсор на начало 2-й строки ЖКИ
а что с этой строчкой не так

поставил эту команду lcd_som(0x80); //курсор на первю строку
и все глюки пропали

@mtom спасибо помог ваш код
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
21.01.2012, 16:46 5
2 mostish
Ну, тут, возможно, были проблемы как с инициализацией дисплея - она на самом деле несколько хитрее 3-х строк, особенно для 4-х битного режима, так и с отсутствием адресации DDROM перед выводом "HD44780", которую Вы в итоге добавили.
0
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 243
21.01.2012, 18:19 6
возник второй вопрос прикрутил вывод символов(выводит какие символы зашиты в дисплей) по порядку до 255.
вот а моргалка прикрученная ранее перестала работать загвоздка вроде в цикле а где не вижу, что сделать чтоб заработало?

[3.42 Кб]
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
21.01.2012, 18:35 7
а моргалка
если имеется в виду моргание курсора, то в строке
Код
lcd_som(0x0c);     // включение дисплея дисплея, мигающий курсор
по идее должно быть не 0х0С, а 0х0F.
Т.к. Dysplay ON/OFF Control - DB3=1, DB2=D, DB1=C и DB0=B, где D - dysplay ON/OFF (1 - ON), C - cursor ON/OFF (1 - ON), B - cursor blink ON/OFF (1 - ON)
Таким образом получаем 0b00001111 или 0x0F

Посмотрите этот даташит, там все подробно описано.
0
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 243
21.01.2012, 20:43 8
нет с курсором я разобрался, просто в конце кода я засунул бегущий огонь, хотел попробовать соединить два кода.
соединить соединил работало но когда добавил вывод символов цикл пришлось поменять и перестал работать бегущий огонь вот как теперь сделать чтобы он заработал.
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
22.01.2012, 02:20 9
У вас бесконечный цикл while(1) находится внутри функции first(), соответственно при входе в main() и выполнении функции first(), ваша программа будет бесконечно крутиться внутри этого while и в second() никогда не попадет. И опяьт же в функции second() ваш for(;;) является бесконечным и при попадании в него программа будет все время прокручивать этот кусок. Хотя в данном случае она туда по идее и не попадет.
А вообще у вас очень интересная структура программы. Попробуйте переписать ее как-нибудь так:
Код
#ymstude один
#ymstude другой

#defyme один
#defyme другой

Далее по порядку опишите ваши функции, но без бесконечных циклов типа while(1) и for(;;) внутри них
Например

void lcd_som (unsykned char lcd){
код, выполняемый функцией;
}

void lcd_dat (unsykned char lcd){
код, выполняемый функцией;
}

void lcd_init (void){
код, выполняемый функцией;
//причем сюда можите вписать все, что относится к инициализации ЖКИ - и задержку, чтобы ЖКИ успел
//включиться, и настройки портов ввода/вывода
}

int first(void){
код, выполняемый функцией;
return 1; // это если хотите чтобы функция возвращала значение 1, если это не нужно, то и перед функцией
//вместо int надо написать void
}

void second(void){ // для примера функция не возвращающая никакого значения
код, выполняемый функцией;
{

А далее главная функция (я ее всегда писал как void main(void){трали-вали} и проблем вроде не было):

void main(void){
lcd_init(); // инициализируем дисплей
// инициализируем что-нибудь еще, если надо, всякие там USORT, SPI и т.д.

// а вот теперь уже бесконечный цикл, в котором будут крутиться ваши функции
while(1){
first();
second();
}
}
Загляните еще раз в код, на который я ссылался выше, там проглядывается эта структура.
0
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 243
24.01.2012, 13:03 10
так пока пробую но чет ниче не выходит))
0
0 / 0 / 0
Регистрация: 02.11.2004
Сообщений: 1,112
24.01.2012, 13:16 11
Цитата Сообщение от mostish
так пока пробую но чет ниче не выходит))
читай даташит до полного понимания каждой команды дисплею

только даташиты, только хардкор!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2012, 13:16

Мигающий текст на LCD HD44780
Всем привет! А как проще всего сделать часть текста выводимого на LCD типа HD44780 мигающим? Именно...

О выводе на дисплей LCD HD44780
Пишу программу на Atmego32A. Столкнулся с проблемкой при выводе на дисплей. Функции вывода на...

Библиотерка LCD на контроллере HD44780
Для работы на си с данным дисплеем в winAVR есть библиотека &quot;lcd_lib&quot;. Возьмем к примеру функцию...

Вывод на LCD HD44780 HEX кода
Доброго времени суток, господа. Прошу Вашей помощи в решение одной проблемы. Имею UHF RFID...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.