Без описания |
Поиск в теме | Версия для печати |
Artem |
Отправлено: 13 Июня, 2013 - 19:23:01
|
Главнокомандующий
Сообщений всего: 347
Дата рег-ции: Май 2012
|
morokoriss пишет:Правильно ли ты подключил его?
Да, я в этом уверен, по даташиту проверял, дисплей WH1602B всё проверил 10 раз.
Можно узнать что это такое?
mihail пишет:Вы смогли откомпилировать код по ссылке?
Да смог, никаких ошибок не выдало. |
|
|
Artem |
Отправлено: 16 Июня, 2013 - 22:36:07
|
Главнокомандующий
Сообщений всего: 347
Дата рег-ции: Май 2012
|
Короче, посмотрел я я этот даташит, к сожалению в английском небельмес
Поэтому пользовался услугами переводчика Гугл, из криво написанных фраз понял, как нужно производить инициализацию, нужно, чтобы на каждой ноге дисплея в определённый момент был определённый сигнал, и комбинация этих сигналов и определяет настройку дисплея. И ещё нужно паузы делать между этими комбинациями.
Я тут подумал, а можно это не через функции делать, а самому, ну точнее, просто программа, которая дёргает ножками микроконтроллера в нужный момент? Я понимаю, что это не очень разумно, но мне кажется, что так у меня лучше получиться
И ещё такой момент: я не до конца понял, как туда записывается то, что будет выводиться на экран. И того что прочитал, понял, что в памяти дисплея уже хранятся некоторые символы и мы просто вызываем их из памяти ( до конца этот процесс я так и не понял), а как быть с теми символами, которых нет в памяти?
(Добавление)
И ещё такой вопрос: вот даташит на дисплей: http://www.compel.ru/datapdf/win...12b46af5b91e.pdf
Там на 18-ой странице есть алгоритм инициализации дисплея, в первый раз, когда мы выставляем нужные биты на нужные порты-всё понятно (я так понял, что звёздочки-это значит, что без разницы какой там бит?), а во второй раз, там каждому порту соответствует ещё и буква какая-то? |
|
|
mihail |
Отправлено: 18 Июня, 2013 - 19:13:29
|
Гуру
Сообщений всего: 1065
Дата рег-ции: Март 2010
|
Artem пишет:как быть с теми символами, которых нет в памяти? Их экранчик не показывает. Все что душе угодно показывают графические экранчики.Artem пишет:звёздочки - это значит, что без разницы какой там бит? Да.
Для начала попробуйте работать с дисплеем через восмибитную шину данных. Ниже приведен пример тестового кода для аналогичного экранчика. За основу взят код с http://chipenable.ru
/* AVR GCC, ATmega8, WH1602B */
#include <avr/io.h>
#include <util/delay.h>
// порт к которому подключена шина данных ЖКД
#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDRX_DATA DDRD
// порт к которому подключены управляющие выводы ЖКД
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB
// номера выводов к которым подключены управляющие выводы ЖКД
#define RS 4
#define RW 5
#define EN 6
// макросы для работы с битами
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))
// функция записи команды
void LcdWriteCom(unsigned char data)
{
ClearBit(PORT_SIG, RS); // установка RS в 0 - команды
PORT_DATA = data; // вывод данных на шину индикатора
SetBit(PORT_SIG, EN); // установка EN в 1
_delay_us(2); // ждем 2 мкс
ClearBit(PORT_SIG, EN); // установка EN в 0
_delay_us(40); // ждем 40 мкс
}
// функция записи данных
void LcdWriteData(unsigned char data)
{
SetBit(PORT_SIG, RS); // установка RS в 1 - данные
PORT_DATA = data; // вывод данных на шину индикатора
SetBit(PORT_SIG, EN); // установка EN в 1
_delay_us(2); // ждем 2 мкс
ClearBit(PORT_SIG, EN); // установка EN в 0
_delay_us(40); // ждем 40 мкс
}
// функция очистки дисплея
void Lcd_Clear(void)
{
LcdWriteCom(0x01);
_delay_ms(2); // ждем 2 мс
}
// позиционирование курсора
void LCD_Goto(unsigned char x, unsigned char y)
{
LcdWriteCom(((((y)& 1)*0x40)+((x)& 15))|128);
}
// функция инициализации
void InitLcd(void)
{
DDRX_DATA = 0xff;
PORT_DATA = 0xff;
DDRX_SIG = 0xff;
PORT_SIG |= (1<<RW)|(1<<RS)|(1<<EN); // установка RW, RS, EN в 1
ClearBit(PORT_SIG, RW); // установка RW в 0
_delay_ms(40); // ждем 40 мс
LcdWriteCom(0b00111000); // 8 разрядная шина, 5*8, 2 строки
LcdWriteCom(0b00001100); // дисплей включен, курсор выключен, мерцание выключено
LcdWriteCom(0b00000001); // очистка дисплея
_delay_ms(2); // ждем 2 мс
LcdWriteCom(0b00000110); // курсор движется вправо, сдвига нет
}
// основная функция программы
int main( void )
{
InitLcd();
LcdWriteData('T');
LcdWriteData('e');
LcdWriteData('s');
LcdWriteData('t');
LcdWriteData('.');
_delay_ms(3000);
Lcd_Clear();
LcdWriteData('0');
LcdWriteData('1');
LcdWriteData('2');
LcdWriteData('3');
LcdWriteData('4');
LcdWriteData('5');
LcdWriteData('6');
LcdWriteData('7');
_delay_ms(3000);
LCD_Goto(0,1);
LcdWriteData('8');
LcdWriteData('9');
LcdWriteData('.');
LcdWriteData('1');
LcdWriteData(' ');
LcdWriteData('e');
LcdWriteData('f');
LcdWriteData('g');
while(1);
return 0;
} (Отредактировано автором: 18 Июня, 2013 - 19:17:03) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
« Делимся опытом » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|