Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.01.2013, 09:33
|
|
Прописка
Регистрация: 05.05.2007
Сообщений: 116
Сказал спасибо: 10
Сказали Спасибо 58 раз(а) в 34 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
все символьные индикаторы инициализирующий одинаково (с теми что я сталкивался)
это один из вариантов на HI-TECH C Compiler для 4 битного интерфейса
Цитата:
|
__delay_ms(10);
__delay_ms(10);
__delay_ms(10);
RW=0;//режим записи в дисплей
RS=0;//режим команд
for ( a = 0; a ‹ 4; a++ )
{
LCD = 0b00110000; // код инциализации 0х03 (4 битного интерфейса) 3 раза
E = 1; // загрузить
NOP();
E = 0; //
__delay_ms(6);
}
LCD = 0b00100000; // включить режим 4битный интерфейс.
E = 1; // загрузить
NOP();
E = 0;
__delay_ms(2);
SendLCDc( 0b00101000 ); // Настройка функций
SendLCDc( 0b00001100 ); // Включить дисплей
SendLCDc( 0b00000001 ); // Дисплей очистить
SendLCDc( 0b00000110 ); // Entry Mode
SendLCDc( 0b10000000 ); // DDRAM addresss 0000
SendLCDc( 0b00000010 ); // return home
|
отсюда можно скачать готовую библиотеку может работать как с 1 строчными так и с 4 строчными индикаторами, поддерживает и вывод строк с русскими и латинскими символами.
|
|
|
|
25.01.2013, 09:59
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
И зачем это ?
Код:
|
for ( a = 0; a ‹ 4; a++ )
{
LCD = 0b00110000; // код инциализации 0х03 (4 битного интерфейса) 3 раза
E = 1; // загрузить
NOP();
E = 0; // |
Достаточно:
Код:
|
LCD = 0b00110000; // код инциализации 0х03 (4 битного интерфейса) 3 раза
for ( a = 0; a ‹ 4; a++ )
{
E = 1; // загрузить
NOP();
E = 0; // |
Или даже без цикла 3 раза строб...
__________________
Осторожно , злой кот
|
|
|
|
25.01.2013, 10:02
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
__________________
Осторожно , злой кот
|
|
|
|
25.01.2013, 11:28
|
|
Гражданин KAZUS.RU
Регистрация: 24.08.2006
Адрес: Одесса
Сообщений: 580
Сказал спасибо: 129
Сказали Спасибо 155 раз(а) в 118 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
Сообщение от Halex07
|
Ну, если уж очень хочется... то идите ка Вы ... к производителю. Дело в том, что Winstar и не скрывает того, что он использует в своих индикаторах. Там внизу справа по ссылке два даташита контроллеров для Character дисплеев, которые ставятся в Винстаровскую продукцию. Один, как правильно было "угадано с одной ноты" ST7066U. Что конкретно торчит под "каплей" вашего дисплея - х.з. И модифицировать старый проверенный алгоритм 44780 с точки зрения "правильности" имеет смысл только, если он не работает с вашим WH1602B, или вас жестко нормировали по стартовым таймингам в разработке нового девайса.
|
О, а я это как раз искал, спасибо что отослали куда нужно. Хорошо хоть 2 варианта камней, а не 10.
Про нормирование тоже угадали. Но в ущерб алгоритму конечно резать ничего не буду.
|
|
|
|
25.01.2013, 12:04
|
|
Частый гость
Регистрация: 13.03.2009
Сообщений: 27
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
Странно, но с этим модулем (WH1602B-NGG) все вышло сразу и без бубна. Приведу куски библиотеки под STM32:
#define LCD_PORT GPIOC
#define LCD_RS GPIO_Pin_4
#define LCD_E GPIO_Pin_5
#define LCD_RW GPIO_Pin_7
#define LCD_DB4 GPIO_Pin_0
#define LCD_DB5 GPIO_Pin_1
#define LCD_DB6 GPIO_Pin_2
#define LCD_DB7 GPIO_Pin_3
void __EN_(void)
{
LCD_PORT-›ODR|=LCD_E;
_delay_10us(1);
LCD_PORT-›ODR&=~LCD_E;
}
void LCD_NYB(unsigned char nyb, char typed)
{
LCD_PORT-›ODR=nyb;
LCD_PORT-›ODR&=~LCD_RW;
if(typed == 0)
{
LCD_PORT-›ODR&=~LCD_RS;
} else
{
LCD_PORT-›ODR|=LCD_RS;
}
__EN_();
}
void LCD_Read_busy(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LCD_DB4| LCD_DB5 | LCD_DB6 | LCD_DB7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(LCD_PORT, &GPIO_InitStructure);
LCD_PORT-›ODR&=~LCD_RS;
LCD_PORT-›ODR|=LCD_RW;
do
{
LCD_PORT-›ODR|=LCD_E;
_delay_10us(1);
LCD_PORT-›ODR&=~LCD_E;
}
while (LCD_PORT-›IDR&LCD_DB7);
LCD_PORT-›ODR&=~LCD_RW;
GPIO_InitStructure.GPIO_Pin = LCD_DB4| LCD_DB5 | LCD_DB6 | LCD_DB7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_PORT, &GPIO_InitStructure);
}
void LCD_Write_Byte(unsigned char datas,unsigned char typed)
{
LCD_Read_busy();
LCD_NYB((datas››4),typed);
LCD_NYB(datas, typed);
}
void LCD_Write_CMD(unsigned char b)
{
LCD_Write_Byte(b,0);
}
void LCD_Write_Data(unsigned char b)
{
LCD_Write_Byte(b,1);
}
void initLCD(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LCD_RS | LCD_E | LCD_DB4| LCD_DB5 | LCD_DB6 | LCD_DB7 | LCD_RW;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_PORT, &GPIO_InitStructure);
LCD_PORT-›ODR&=~LCD_E;
LCD_PORT-›ODR&=~LCD_RS;
LCD_PORT-›ODR&=~LCD_RW;
LCD_NYB(0x03,0); //Required for initialisation
_delay_10us(4); //required delay
LCD_Write_CMD(0x02);
LCD_Write_CMD(0x28 );
LCD_Write_CMD(0x0c);
LCD_Write_CMD(0x01); //clear display
_delay_10us(200);
LCD_Write_CMD(0x06);
}
Код, правда, писал с даташита на 1602А.
|
|
|
|
25.01.2013, 13:24
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
Сообщение от vdvvvs
|
все вышло сразу и без бубна.
|
Позвольте усомниться , ибо :
__________________
Осторожно , злой кот
|
|
|
|
25.01.2013, 13:26
|
|
Частый гость
Регистрация: 13.03.2009
Сообщений: 27
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
Сообщение от dosikus
|
Позвольте усомниться , ибо :
|
Отвечу просто:
#define LCD_PORT GPIOC
#define LCD_RS GPIO_Pin_4
#define LCD_E GPIO_Pin_5
#define LCD_RW GPIO_Pin_7
#define LCD_DB4 GPIO_Pin_0
#define LCD_DB5 GPIO_Pin_1
#define LCD_DB6 GPIO_Pin_2
#define LCD_DB7 GPIO_Pin_3
|
|
|
|
25.01.2013, 14:03
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
vdvvvs, То есть вы все равно упретесь рогом и не согласитесь, что
данная команда просто тупо портит порт целиком?
И не надо считывать порт а потом выводить через маску?
Отличную свинью вы подкладываете в виде своей либы...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 25.01.2013 в 14:09.
|
|
|
|
25.01.2013, 14:31
|
|
Частый гость
Регистрация: 13.03.2009
Сообщений: 27
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
Сообщение от dosikus
|
vdvvvs, То есть вы все равно упретесь рогом и не согласитесь, что
данная команда просто тупо портит порт целиком?
И не надо считывать порт а потом выводить через маску?
Отличную свинью вы подкладываете в виде своей либы...
|
На порту С просто ничего кроме дисплея не висит, а кому надо, сам и маску наложит.
|
|
|
|
25.01.2013, 14:36
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Правильная инициализация ЖК 16х2
Сообщение от vdvvvs
|
На порту С просто ничего кроме дисплея не висит, а кому надо, сам и маску наложит.
|
Вредительство!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:45.
|
|