Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.98/254: Рейтинг темы: голосов - 254, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55

Не работает ЖКИ

21.09.2010, 19:10. Показов 47205. Ответов 123
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ЖКИ МТ16S2D подключен в 4х битном режиме к контроллеру ADuC812, к порту P2.

В чем может быть проблема? Вот код:

#ymstude <stdyo.h>
#ymstude <ADuC812.h>

#defyme set_first_line 0x80
#defyme set_second_line 0xC0
sbit RS=P2^2;
sbit RW=P2^1;
sbit En=P2^0;
int i,j;

void delay();
send_lcd_dysplay_4wire(unsykned char address, unsykned char send_data);

void send_lcd(unsykned char send_data) {

RS=0;
RW=0;
En=1;
P2=(send_data << 4)|0x0F;
delay();
En=0;

}

void LCD_Init(void) {

En=0;
delay();
send_lcd(0x3);
delay();
send_lcd(0x3);
delay();
send_lcd(0x3);
delay();
send_lcd(0x2);
delay();
send_lcd(0x2);
delay();
send_lcd(0x8);
delay();
send_lcd(0x0);
delay();
send_lcd(0xC);
delay();
send_lcd(0x0);
delay();
send_lcd(0x1);
delay();
send_lcd(0x0);
delay();
send_lcd(0x6);
delay();
}

void delay(void) {
for(i=0; i<200; i++) {
for(j=0;j<300;j++) {}
}
}

void main(void) {

WDCON=0x00;
WDE=0; //Dysable WDT
LCD_Init();
send_lcd_dysplay_4wire(set_first_line,B) ;
while(1) {}

}

send_lcd_dysplay_4wire(unsykned char address, unsykned char send_data)
{
unsykned char send_data_h, send_data_l, address_l, address_h;

address_l = address; //aa?an eaaiiua ?acaeaa?ony aey ia?aaa?e
address_h = address >> 4; // ii 4 aeoa

send_data_l = send_data;
send_data_h = send_data >> 4;

RS = 0; //onoaiiaea neaiaeia oi?aaeaiey
RW = 0;
En = 1;
P2 = (address_h << 4)|0x0F;
delay();
En = 0;
delay();
En = 1;
P2 = (address_l << 4)|0x0F;
delay();
En = 0;

delay();

RS = 1;
RW = 0;
En = 1;
P2 = (send_data_h << 4)|0x0F;
delay();
En = 0;
delay();
En = 1;
P2 = (send_data_l << 4)|0x0F;
delay();
En = 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2010, 19:10
Ответы с готовыми решениями:

МК-51 и ЖКИ
есть схема подключения ЖК-дисплея к микроконтроллеру 51. и есть код инициализации LCD. но он с ошибками. помогите исправить, пожалуйста. ...

работа с ЖКИ...?
В &quot;демо&quot; программе для работы с ЖКИ DiHalt использует такой финт: он копирует строку текста (которую надо выводить на экран) из памяти...

16F628A и ЖКИ
Здравствуйте, дорогие форумчане! С недавних пор занялся программированием МК. Решил начать с PicBasicPro. Дошел до ЖКИ, и вот сдесь...

123
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
21.09.2010, 19:23
Как минимум так:
Code
1
2
3
4
5
6
7
8
9
void send_lcd(unsykned char send_data) {
RS=0;
RW=0;
P2=(send_data << 4)|0x0F;
En=1;
nop
nop
En=0;
delay();
0
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
21.09.2010, 19:35
Цитата Сообщение от Brykodyr
Как минимум так:
Код:
void send_lcd(unsykned char send_data) {
RS=0;
RW=0;
P2=(send_data << 4)|0x0F;
En=1;
nop
nop
En=0;
delay();

Прогресс есть :) Загорелась первая строка, но вот символ по прежнему выводиться не хочет.
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
21.09.2010, 20:54
Попробуй так
Code
1
2
3
4
5
6
void LCD_Init(void) {
En=0;
send_lcd(0x20); // Set 4-wire mode
send_lcd(0x28);
send_lcd(0x0С); // Enable dysplay & disable cursor
}
0
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
21.09.2010, 21:02
Цитата Сообщение от Brykodyr
Попробуй так
Код:
void LCD_Init(void) {
En=0;
send_lcd(0x20); // Set 4-wire mode
send_lcd(0x28);
send_lcd(0x0С); // Enable dysplay & disable cursor
}

0 внимания(
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
21.09.2010, 22:05
Замени функцию записи байта, а инициализацию оставь, как я рекомендовал выше:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
void send_lcd(unsykned char send_data) {
 
RS=0;
RW=0;
P2=send_data & 0xF0;
En=1;
En=0;
delay();
P2=(send_data << 4);
En=1;
En=0;
delay();
}
0
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
21.09.2010, 22:15
Цитата Сообщение от Brykodyr
Замени функцию записи байта, а инициализацию оставь, как я рекомендовал выше:
Код:
void send_lcd(unsykned char send_data) {

RS=0;
RW=0;
P2=send_data & 0xF0;
En=1;
En=0;
delay();
P2=(send_data << 4);
En=1;
En=0;
delay();
}

Один фиг, горит только первая строка, хоть убей. Все соединения проверял неоднократно.
0
0 / 0 / 0
Регистрация: 19.07.2010
Сообщений: 270
21.09.2010, 22:22
ММм Схему подлючения и файлі проета в студию :) А так может не внимательно смотрел а где инициализация выводов мк?
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
21.09.2010, 22:48
Мож так пойдет?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ymstude <stdyo.h>
#ymstude <reg51.h>
 
#defyme set_first_line 0x80
#defyme set_second_line 0xC0
 
sbit RS=P2^2;
sbit RW=P2^1;
sbit En=P2^0;
int i,j;
 
void delay(void) {
for(i=0; i<255; i++) {
for(j=0;j<255;j++) {}
}
}
 
void send_lcd_data(unsykned char send_data) {
 
RS=1;
P2=send_data & 0xFC;
En=1;
En=0;
delay();
P2=(send_data << 4) & 0xFC;
En=1;
En=0;
delay();
}
 
void send_lcd_cmd(unsykned char send_data) {
 
P2=send_data & 0xF8;
En=1;
En=0;
delay();
P2=(send_data << 4) & 0xF8;
En=1;
En=0;
delay();
}
 
void LCD_Init(void) {
 
En=0;
send_lcd_cmd(0x20); // Set 4-wire mode
send_lcd_cmd(0x28);
send_lcd_cmd(0x0C); // Enable dysplay & disable cursor
}
 
void main(void) {
 
WDCON=0x00;
WDE=0; //Dysable WDT
LCD_Init();
send_lcd_cmd(set_first_line);
send_lcd_data(H);
send_lcd_cmd(set_second_line);
send_lcd_data(D);
while(1) {}
 
}
0
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
21.09.2010, 23:01
Цитата Сообщение от Driomyr
ММм Схему подлючения и файлі проета в студию :) А так может не внимательно смотрел а где инициализация выводов мк?
Схема подключения стандартная - линии DB7, DB6, DB5, DB4 подключены к линиям порта 2 - P2.7, P2.6, P2.5, P2.4, соответственно.

Линии A0, R/W, E - к линиям того же порта 2 - P2.2, P2.1, P2.0, cоответственно.

Инициализации выводов у ADuC-а нету, у порта 2 кстати нету альтернативных функций еще.
Весь код который есть представлен в первом посте. Видно что на дисплей команды поступают, так как загорается первая строка, но дальше ничего не происходит. Если эти команды не подавать то не загорается даже первая строка.

Цитата Сообщение от Brykodyr
Мож так пойдет?
Теперь и первая строка не горит. Сначала загорается. через некоторое время тухнет.
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
21.09.2010, 23:38
Х.з. должен работать. По крайней мере на симуле все правильно воспроизводится. Попробуй код ниже, поиграйся с задержкой. По идее, должно быть так. При подачи питания на ЛСД на экране чуть темнеет верхняя строка. Если правильно проинициализировать его, то верхняя строка становится невидимой (как нижняя). Ты в индикаторе уверен? Ногами порта дрыгал? Все ли ноги слушаются?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ymstude <reg51.h>
 
#defyme set_first_line 0x80
#defyme set_second_line 0xC0
 
sbit RS=P2^2;
sbit RW=P2^1;
sbit En=P2^0;
int i,j;
 
void delay(void) {
for(i=0; i<255; i++) {
for(j=0;j<255;j++) {}
}
}
 
void send_lcd_data(unsykned char send_data) {
 
RS=1;
P2=(send_data & 0xF4);
En=1;
En=1;
En=1;
En=0;
delay();
P2=(send_data << 4) & 0xF4;
En=1;
En=1;
En=1;
En=0;
delay();
}
 
void send_lcd_cmd(unsykned char send_data) {
 
P2=(send_data & 0xF0);
En=1;
En=1;
En=1;
En=0;
delay();
P2=(send_data << 4) & 0xF0;
En=1;
En=1;
En=1;
En=0;
delay();
}
 
void LCD_Init(void) {
En=0;
send_lcd_cmd(0x20); // Set 4-wire mode
send_lcd_cmd(0x28);
send_lcd_cmd(0x0C); // Enable dysplay & disable cursor
}
 
void main(void) {
 
WDCON=0x00;
WDE=0; //Dysable WDT
LCD_Init();
send_lcd_cmd(set_first_line);
send_lcd_data(H);
send_lcd_cmd(set_second_line);
send_lcd_data(D);
while(1) {}
 
}
0
0 / 0 / 0
Регистрация: 17.09.2010
Сообщений: 22
21.09.2010, 23:45
Цитата Сообщение от Brykodyr
Х.з. должен работать. По крайней мере на симуле все правильно воспроизводится.
Вы ж только что писали что симулятор не показатель !?

Перековались чтоль ?
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
22.09.2010, 00:06
Цитата Сообщение от vsim_spot
Вы ж только что писали что симулятор не показатель !?
Перековались чтоль ?
Да нет, это как раз таки подтверждение моих слов: виртуально все ок, а в реале - жопа!
И симулировал я в Keil, если что.
Кстати Нихиил, ты же ас в протеусе, накидай в нем код, на интерес, будет ли работать?
0
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
22.09.2010, 00:20
Очень часто, я уже об этом писал, нужно подождать время перед пуском.
т.е. перед инициализацией ЖКИ 0,2-0,5 сек.
Бывает что внутренний сброс еще не зпкончен, а тут начинается передача данных.
Был такой прикол. Работал как однострочный. Думали ЖКИ ..ОПА.
Пставили новый - работает. В другом проекте подключил (глючный) оказался полностью рабочим.
Пересобрал старый проект с увеличеными временными задержками всё заработало.

Время - ...
0
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
22.09.2010, 00:52
Да все ноги слушаются, индикатор новый, еще нигде не использовался, задержку перед инициализацией увеличил.

Оставил в главной функции только инициализацию, после ресета - загорается верхняя строка, потом тухнет, потом опять загорается и опять тухнет. Больше не загорается. Значит инициализирован правильно?
Если попытаться вывести символ то загорается верхняя строка и все, ниче не происходит.

Инициализация такая сейчас:

void LCD_Init(void) {

En=0;
delay();
send_lcd(0x20);
delay();
send_lcd(0x28);
delay();
send_lcd(0x0C);
delay();
send_lcd(0x2);
delay();
send_lcd(0x2);
delay();
send_lcd(0x8);
delay();
send_lcd(0x0);
delay();
send_lcd(0xC);
delay();
send_lcd(0x0);
delay();
send_lcd(0x1);
delay();
send_lcd(0x0);
delay();
send_lcd(0x6);
delay();
}

ЗЫ. Кстати зачем делать логическое И со всем портом, к этому же порту подключены сигналы RS, A0, R/W, он же может их сбить?
ЗЫЫ. В разных дисплеях название сигнала выбора адрес/данные называются по-разному - в одних RS, в других A0. Я так понимаю это одно и то же?
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
22.09.2010, 00:59
Нихии-ил, ты где? Проект будет?
0
0 / 0 / 0
Регистрация: 17.09.2010
Сообщений: 22
22.09.2010, 01:27
Цитата Сообщение от kushmom
Если попытаться вывести символ то загорается верхняя строка и все, ниче не происходит.
1) Вы в PROTEUS в GRAPH или в KEIL сделайте лог сигналов на LCD и затем сравните с требованиями даташита.

2) Убедитесь что в PROTEUS частота МК такая же как и в реале - т.е. сигналы в реале такие как в симуляции.

Если логи соотв даташиту то либо ошибки монтажа либо ЖКИ глюкавый.
0
0 / 0 / 0
Регистрация: 17.09.2010
Сообщений: 22
22.09.2010, 01:31
Цитата Сообщение от Brykodyr
Нихиил, ты же ас в протеусе,
Я чайник абсолютный нуб и в МК и в дизайне и в рекламме и в торговле.

Просто помогаю людям чем могу и как могу.
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
22.09.2010, 01:42
Сдается мне, в протеусе не получится, т.к. ЛСД там не симулируется в 4х битном режиме. А графы смотреть не зачем. Мой код исправно отправляет старшую тетраду, затем младшую. Так же учитываются особенности отправки комманд и данных в контроллер ЛСД. Черт возьми, ну должен же работать. А код топика в корне не правильный. Я так подозреваю, что не в коде проблема. Можете меня .
0
0 / 0 / 0
Регистрация: 17.09.2010
Сообщений: 22
22.09.2010, 01:47
файлхостинг http://www.slil.ru без тормозов и ожиданий.

Но почему бы не сравнить логи сигналов симулятора с тем что требует даташит ? ИМХО это разумно.

PROTEUS симулирует LCD в 4 битном режиме ! Есть в примерах PROTEUS и в FAQ по PROTEUS - http://kazus.ru/forums/forumdysplay.php?f=25
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2010, 01:47
Помогаю со студенческими работами здесь

Тупняк с ЖКИ
Был у меня дисплейчик winstraк 1602H, который был благополучно вставлен в проект и отдан на сторону. Появилась надобность сделать еще одну...

Проблема с ЖКИ
Сегодня с утра прям какой-то фатальный день. Поперли абсолютно нелогичные и непонятные &quot;чудеса&quot;. Сначала с еепром, теперь с жки. ...

7seg ЖКИ
Поделитесь ссылочкой (уверен что есть инфа, только что-то не могу найти) как к МК прикрутить жидкокристаллический индикатор. Недавно видел...

Посоветуйте ЖКИ
Решил для велосипеда сделать некий спидометр + одометр + т.д. Посоветуйте какой графический ЖКИ можно применить? Желательны небольшие...

ЖКИ DE119RS-20/7.5
Добрый день! Подскажите как подключить ЖКИ DE119RS-20/7.5 к STM32. В сети много примеров как подключить ЖКИ с контроллером, но вот...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru