Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

LCD DEM 16261(4 bit mode) + AT89C51

Непрочитано 20.03.2007, 15:00  
ajborman
Частый гость
 
Регистрация: 18.02.2005
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ajborman на пути к лучшему
По умолчанию LCD DEM 16261(4 bit mode) + AT89C51

Не могу заставить работать, перерыл(перепробовал) кучу примеров ! Я не понимаю в чём ошибка!
LCD не инициализируется(наверно) !
На экране не чего не появляется(изменяется),про� �то пустой экран !

P1.4 - P1.7(AT89C51) -› DB4-DB7(LCD)
P3.4 -› Enable
P3.5 -› RS
GND -› R/W
----------------------------------------------------
ORG 0000H
JMP START
ORG 0020H
INIT_LCD:
MOV P1,#00H
MOV P3,#00H
CALL WAIT40

MOV P1,#030H
CALL L_TIC
CALL WAIT40
MOV P1,#030H
CALL L_TIC
CALL WAIT40
MOV P1,#030H
CALL L_TIC
CALL WAIT40
MOV P1,#020H
CALL L_TIC
CALL WAIT40

MOV P1,#020H ; Function set
CALL L_TIC ; 2-line
CALL WAIT40
MOV P1,#0С0H
CALL L_TIC
CALL WAIT40

MOV P1,#000H ; Display on/off control
CALL L_TIC ; Display On
MOV P1,#0F0H ; Cursor On
CALL L_TIC
CALL WAIT40

MOV P1,#000H ; Clear Display
CALL L_TIC
MOV P1,#010H
CALL L_TIC
CALL WAIT40

MOV P1,#000H ; Entry Mode set
CALL L_TIC
MOV P1,#060H
CALL L_TIC
CALL WAIT40

MOV P1,#000H ; Display on/off control
CALL L_TIC
MOV P1,#0F0H
CALL L_TIC
CALL WAIT40

RET

L_TIC: NOP
SETB P3.4
NOP
CLR P3.4
RET

WAIT40: MOV R0,#023H
W40_L: DJNZ R0,W40_L
RET

START: MOV P1,#00H
MOV P3,#00H
CALL INIT_LCD

SETB P3.5
MOV P1,#40H ; Write "A"
CALL L_TIC
CALL WAIT40
MOV P1,#10H
CALL L_TIC
CALL WAIT40
CLR P3.5
LOOP: JMP LOOP

END
Реклама:
ajborman вне форума  
Непрочитано 20.03.2007, 17:06  
CERGEI1982
Почётный гражданин KAZUS.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

ты реально делаеш? или в протеусе?
CERGEI1982 вне форума  
Непрочитано 20.03.2007, 17:34  
scom
Прохожий
 
Регистрация: 05.02.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
scom на пути к лучшему
По умолчанию

и у меня таже ерунда.... но дисплей вроде инициализируется... и на него можно вывести всякий мусор, записав неправельные код символа, например #F6h... вот такие плохие дела...
scom вне форума  
Непрочитано 20.03.2007, 20:13  
ajborman
Частый гость
 
Регистрация: 18.02.2005
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ajborman на пути к лучшему
По умолчанию

Делаю в реале !
А не покажеш свой код ?
Как узнать инициалезировался или нет ЛСД ?
ajborman вне форума  
Непрочитано 21.03.2007, 08:46  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 359
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

Здравствуйте. Про инициализацию LCD очень много можно найти в мире. Лучше смотреть DataSheet. Если Вы не видите ничего на экране, то возможно у Вас не правильно подано напряжение на драйвер LCD (регулировка контраста Vo). Некоторые индикаторы требуют подачи отрицательного напряжения на этот вывод. Если при подаче питания крутить движок потенциометра туда-сюда, то на экране должны появляться-исчезать знакоместа. Надеюсь с подключением у Вас все ОК.
Теперь инициализация. Писал программки давно. Кому интересно берите. Все работает.
8-бит подключение. Два индикатора
Возможно Вам придется изменить синтаксис. Это написано под старый x8051.exe
.CHIP 8052
.LLCHAR _
;******Блок констант******
FOSC .EQU 11059 ;Частота кварцевого резонатора
;***Назначение выводов****
;DB0..DB7 LCD на P0
RSLCD: REG P3.4 ;Выбор регистра LCD
RWLCD: REG P3.5 ;Выбор операции LCD
ELCD1: REG P3.6 ;Выбор кристалла LCD1
ELCD2: REG P3.7 ;Выбор кристалла LCD2

;
;ПП Delay_ms - задержка на мс без использования таймера
; -› A - Длительность задержки в мс
Delay_ms:
CLR C ;Очистить С для правильного вычитания
_C2: PUSH A ;Сохраним для последующих обращений
MOV A,#‹((FOSC/12-7)/;Константа задержки на 1 мс
_C1: NOP ;
NOP ;
NOP ;Задержка
NOP ;на
NOP ;1 мс
NOP ;
DJNZ A,_C1 ;
POP A ;Восстановить кол-во оставшихся мс
DJNZ A,_C2 ;Если не конец, то повторить
RET ;выход
;
;--------------Работа с LCD--------------
;
;
;ПП GETBSFLCD - Проверка флага занятости LCD
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; ‹- C - Флаг занятости LCD (0-готов 1-занят)
GETBSFLCD:
CLR RSLCD ;Адрес регистра управления LCD
MOV P0,#0FFH ;Настроить порт на ввод
SETB RWLCD ;Операция чтения
JB F0,_1 ;Если LCD2, то строб2
SETB ELCD1 ;Выставить строб1
SJMP _2 ;Обход
_1: SETB ELCD2 ;Выставить строб2
NOP ;Задержка
_2: NOP
MOV C,P0.7 ;Читать флаг занятости LCD
CLR ELCD1 ;Снять строб
CLR ELCD2 ;чтения
CLR RWLCD ;Операция записи
RET ;выход
;
;ПП WRLCD_NB - Запись данных в LCD без проверки занятости
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; C - 0-команда 1-данные
; A - команда/данные
WRLCD_NB:
MOV RSLCD,C ;Адрес регистра LCD
CLR RWLCD ;Операция записи
MOV P0,A ;Выставит данные
JB F0,_1 ;Если LCD2, то строб2
SETB ELCD1 ;Выставить строб1
SJMP _2 ;Обход
_1: SETB ELCD2 ;Выставить строб2
NOP ;Задержка
_2: NOP
CLR ELCD1 ;Снять строб
CLR ELCD2 ;записи
NOP
MOV P0,#0FFH
RET ;выход
;
;ПП WRLCD - Запись данных в LCD
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; C - 0-команда 1-данные
; A - команда/данные
; ‹- LCD_ERR - 1-ошибка (нет готовности)
WRLCD: PUSH PSW ;Сохранить слово состояния
PUSH A ;Сохранить A
MOV ‹T0INC,#0 ;Таймер ожидания готовности
_W1: MOV A,‹T0INC ;Если вышло время
CJNE A,#5,_1 ;ожидания готовности,
SETB LCD_ERR ;Установить флаг ошибки
SJMP _2 ;Закончить запись
_1: CALL GETBSFLCD ;Проверить занятость LCD
JC _W1 ;Ждать готовность
_2: POP A ;Восстановить A
POP PSW ;Восстановить слово состояния
CALL WRLCD_NB ;Запись данных
RET ;выход
;
;ПП LCD_Reset - Инициализация LCD
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; ‹- LCD_ERR - 1-ошибка (нет готовности)
LCD_Reset:
MOV A,#37H ;Режим работы 8бит 1строка 5х10
CLR C ;Команда
CALL WRLCD_NB ;Записать
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
MOV A,#37H ;Режим работы 8бит 1строка 5х10
CLR C ;Команда
CALL WRLCD_NB ;Записать
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
MOV A,#37H ;Режим работы 8бит 1строка 5х10
CLR C ;Команда
CALL WRLCD_NB ;Записать
MOV A,#37H ;Режим работы 8бит 1строка 5х10
CLR C ;Команда
CALL WRLCD ;Записать
MOV A,#08H ;Отображение выкл. курсоры выкл.
CLR C ;Команда
CALL WRLCD ;Записать
MOV A,#01H ;Очистка экрана
CLR C ;Команда
CALL WRLCD ;Записать
MOV A,#06H ;Инкремент курсора без сдвига экрана
CLR C ;Команда
CALL WRLCD ;Записать
MOV A,#0EH ;Включить отображение и курсор
CLR C ;Команда
CALL WRLCD ;Записать
RET ;выход
;
;ПП CursResto - Включить курсор
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
CursResto:
MOV A,#0EH ;Вкл. отображение, вкл. курсор
CLR C ;Команда
CALL WRLCD ;Записать
RET ;выход
;
;ПП CursKill - Выключить курсор
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
CursKill:
MOV A,#0CH ;Вкл. отображение, выкл. курсор
CLR C ;Команда
CALL WRLCD ;Записать
RET ;выход
;
;ПП ClrScr - Очистить экран
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
ClrScr: MOV A,#01H ;Очистка экрана
CLR C ;Команда
CALL WRLCD ;Записать
RET ;выход
;
;ПП GotoBegLine - Перевести курсор в начало строки
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
GotoBegLine:
MOV A,#80H ;Установка счетчика адреса в 0
CLR C ;Команда
CALL WRLCD ;Записать
RET ;выход
;
;ПП LCDOUT_Chr - Вывод символа
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; A - код ASCII символа
LCDOUT_Chr:
JBC A.7,_RUS ;Если русский алфавит, то обработать
_OUT: SETB C ;Данные
CALL WRLCD ;Запись кода символа в LCD
RET ;выход
_RUS: CJNE A,#30H,_1 ;Если буквы от А до п,
_1: JC _DECODE ;то декодировать
SUBB A,#30H ;Вычесть символы псевдографики
CJNE A,#30H,_2 ;Если символ псевдографики,
_2: JC _SP ;то вывести пробел
CJNE A,#46H,_3 ;Если символ от р до ё,‹›^y
_3: JC _DECODE ;то декодировать,
_SP: MOV A,#20H ;Иначе код пробела
SJMP _OUT ;вывести
_DECODE:
ADD A,#(TABLCD-$-3) ;Загрузить
MOVC A,@A+PC ;код из таблицы
SJMP _OUT ;Вывод
TABLCD: .BYTE 041H,0A0H,042H,0A1H,0E0H,045H,0A3H,0A4H ;А..З
.BYTE 0A5H,0A6H,04BH,0A7H,04DH,048H,04FH,0A8H ;И..П
.BYTE 050H,043H,054H,0A9H,0AAH,058H,0E1H,0ABH ;Р..Ч
.BYTE 0ACH,0E2H,0ADH,0AEH,0ADH,0AFH,0B0H,0B1H ;Ш..Я
.BYTE 061H,0B2H,0B3H,0B4H,0E3H,065H,0B6H,0B7H ;а..з
.BYTE 0B8H,0B9H,0BAH,0BBH,0BCH,0BDH,06FH,0BEH ;и..п
.BYTE 070H,063H,0BFH,079H,0E4H,078H,0E5H,0C0H ;р..ч
.BYTE 0C1H,0E6H,0C2H,0C3H,0C4H,0C5H,0C6H,0C7H ;ш..я
.BYTE 0A2H,0B5H,0DBH,0DCH,0D9H,0DAH ;Ё,ё,‹,›,^,y
;
;ПП LCDOUT_Str - Вывод строки символов, очистка до конца строки
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; R0 - адрес строки ( CR_terminate) в памяти данных
LCDOUT_Str:
CALL GotoBegLine ;Перевести курсор в начало строки
PUSH 1 ;Сохранить R1
MOV R1,#MAX_X ;Счетчик символов
_C1: CJNE @R0,#0DH,_CH ;Если не конец строки, то вывод символа,
MOV A,# ;иначе вывод пробелов
SJMP _OUT ;до конца строки
_CH: MOV A,@R0 ;Загрузить символ в акк.
INC R0 ;Указатель на след. символ
_OUT: CALL LCDOUT_Chr ;Вывести символ
DJNZ R1,_C1 ;Повторить до конца строки
POP 1 ;Восстановит R1
RET ;выход
;
;ПП LCDOUT_Str_Const - Вывод строки символов из памяти программ
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; DPTR - адрес строки ( CR_terminate) в памяти программ
LCDOUT_Str_Const:
CALL GotoBegLine ;Перевести курсор в начало строки
PUSH 1 ;Сохранить R1
MOV R1,#MAX_X ;Счетчик символов
_C1: CLR A ;Загрузить
MOVC A,@A+DPTR ;символ в акк.
CJNE A,#0DH,_CH ;Если не конец строки, то вывод символа,
MOV A,# ;иначе вывод пробелов
SJMP _OUT ;до конца строки
_CH: INC DPTR ;Указатель на след. символ
_OUT: CALL LCDOUT_Chr ;Вывести символ
DJNZ R1,_C1 ;Повторить до конца строки
POP 1 ;Восстановит R1
RET ;выход
;
;ПП SetCustomChar - Определяет собственный символ
; -› F0 - Номер LCD (0-LCD1 1-LCD2)
; A - Адрес символа в LCD
; DPTR - Таблица (8 байт) данных знакогенератора
SetCustomChar:
MOV B,#8 ;Вычислить адрес
MUL AB ;в памяти знакогенератора
ORL A,#40H ;Добавить код команды
CLR C ;Команда
CALL WRLCD ;Записать команду
MOV B,#8 ;Количество байт в таблице
_C1: CLR A ;Загрузить данные
MOVC A,@A+DPTR ;из таблицы
SETB C ;Данные
CALL WRLCD ;Записать в память знакогенератора LCD
INC DPTR ;Указатель на следующий байт
DJNZ B,_C1 ;Если не все данные, то повторить
RET ;выход
nokazus вне форума  
Непрочитано 21.03.2007, 08:56  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 359
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

Это писал не так давно для 4-бит подключения, но возиться с оптимизацией, комментами не было времени.
Версия asma другая.
4-бит подключение
$MOD814 ; enable predefined ADuC814 registers

;**********************Блок констант*********************************
FOSCH EQU 16777 ;Высокая Частота Тактового генератора, кГц
;**********************Назначение выводов****************************
pin_LCDE BIT P3.2 ;Выбор кристалла LCD
pin_LCDRS BIT P3.3 ;Выбор регистра LCD
;DB4..DB7 LCD - P3.4..P3.7
;********************Работа с LCD************************************
;
;ПП Delay_ms - задержка на мс без использования таймера
; -› A - Длительность задержки в мс
Delay_ms:
CLR C ;Очистить С для правильного вычитания
Delay_ms_C2:
PUSH ACC ;Сохраним для последующих обращений
MOV A,#LOW((FOSCH/12-7)/;Константа задержки на 1 мс
Delay_ms_C1:
NOP ;
NOP ;
NOP ;Задержка
NOP ;на
NOP ;1 мс
NOP ;
DJNZ ACC,Delay_ms_C1 ;
POP ACC ;Восстановить кол-во оставшихся мс
DJNZ ACC,Delay_ms_C2 ;Если не конец, то повторить
RET ;выход
;
;ПП WRCOMLCD - Запись команды в LCD
; -› A - команда
WRCOMLCD:
ANL A,#0F0H ;Маска незначащих бит
ORL A,#3 ;RxD, TxD =1
MOV P3,A ;Выставить данные, адрес
NOP ;
SETB pin_LCDE ;Выдать строб
NOP ;Задержка
NOP ;
CLR pin_LCDE ;Снять строб
NOP ;
MOV P3,#0F3H ;Снять данные
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
RET ;выход
;
;ПП WRDATLCD - Запись данных в LCD
; -› A - данные
WRDATLCD:
PUSH ACC ;Сохранить младшую тетраду
ANL A,#0F0H ;Маска незначащих бит
ORL A,#0BH ;RxD, TxD =1, pin_LCDRS=1
MOV P3,A ;Выставить данные, адрес
NOP ;
SETB pin_LCDE ;Выдать строб
NOP ;Задержка
NOP ;
CLR pin_LCDE ;Снять строб
NOP ;
POP ACC ;Восстановить
SWAP A ;младшую тетраду
ANL A,#0F0H ;Маска незначащих бит
ORL A,#0BH ;RxD, TxD =1, pin_LCDRS=1
MOV P3,A ;Выставить данные, адрес
NOP ;
SETB pin_LCDE ;Выдать строб
NOP ;Задержка
NOP ;
NOP ;Задержка
NOP ;
CLR pin_LCDE ;Снять строб
NOP ;
MOV P3,#0F3H ;Снять данные
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
RET ;выход
;
;ПП LCD_Reset - Инициализация LCD
LCD_Reset:
MOV A,#15 ;15 мс
CALL Delay_ms ;Задержка
MOV A,#030H ;
CALL WRCOMLCD ;Запись команды в LCD
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
MOV A,#030H ;
CALL WRCOMLCD ;Запись команды в LCD
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
MOV A,#030H ;
CALL WRCOMLCD ;Запись команды в LCD
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
MOV A,#020H ;
CALL WRCOMLCD ;Запись команды в LCD
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
;
MOV A,#020H ;27h
CALL WRCOMLCD ;
MOV A,#070H ;
CALL WRCOMLCD ;
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
MOV A,#000H ;08h
CALL WRCOMLCD ;
MOV A,#080H ;
CALL WRCOMLCD ;
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
MOV A,#000H ;01h
CALL WRCOMLCD ;
MOV A,#010H ;
CALL WRCOMLCD ;
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
MOV A,#000H ;06h
CALL WRCOMLCD ;
MOV A,#060H ;
CALL WRCOMLCD ;
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
MOV A,#000H ;0ch
CALL WRCOMLCD ;
MOV A,#0C0H ;
CALL WRCOMLCD ;
MOV A,#1 ;1 мс
CALL Delay_ms ;задержка
RET ;выход
;
;ПП ClrScr - Очистить экран
ClrScr:
MOV A,#000H ;01h
CALL WRCOMLCD ;
MOV A,#010H ;
CALL WRCOMLCD ;
MOV A,#5 ;5 мс
CALL Delay_ms ;задержка
RET ;выход
;
;ПП GotoBegLine - Перевести курсор в начало строки
GotoBegLine:
MOV A,#080H ;80h
CALL WRCOMLCD ;
MOV A,#000H ;
CALL WRCOMLCD ;
RET ;выход

Остальные процедуры, если нужны, переделываются из вышевыложенного под 4-бит
nokazus вне форума  
Непрочитано 21.03.2007, 09:00  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 359
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

И еще. Обнаружил в сообщениях смайлики которые не вставлял. Вместо них в тексте цифра 8 и скобка )
nokazus вне форума  
Непрочитано 21.03.2007, 09:27  
Muzicant
Прописка
 
Регистрация: 21.06.2003
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 19 сообщении(ях)
Muzicant на пути к лучшему
По умолчанию

У меня на URL//Stantion.narod.ru в ЦПС схема 4-х битного подключения и исходник на C. Я помню у меня тоже были проблемы с 4-х битным подключением. Ну вообщем посмотри по исходнику. ИМХО для начало проверь в протеусе. Правда работа в протеусе не обязательно влечет работу в железе, но наоборот точно работать не будет.
Muzicant вне форума  
Непрочитано 21.03.2007, 15:26  
ajborman
Частый гость
 
Регистрация: 18.02.2005
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ajborman на пути к лучшему
По умолчанию

Всем спасибо за помощ !
Разобрался с Вашей помощью!
Я не туда припоял V0 ! Надо было на землю, а не на +5 ! Я как нашол ошибку, так чуть все воласы не вырвал себе(и не только на голове ) !
Особая благодарность товарищу nokazus !
ajborman вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как совместить Microblaze.bit с общим проектом ISE.bit? tixonia Цифровые сигнальные процессоры 1 28.12.2007 10:08
Что такое SPI mode 0, 3 ? Maver Микроконтроллеры, АЦП, память и т.д 3 09.02.2006 01:15
Программирование AVR - Fase Correct PWM Mode и флаг TOV2 pinokio3000 Микроконтроллеры, АЦП, память и т.д 2 12.07.2005 12:44


Часовой пояс GMT +4, время: 15:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.