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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 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
Сообщений: 360
Сказал спасибо: 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
Сообщений: 360
Сказал спасибо: 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
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

И еще. Обнаружил в сообщениях смайлики которые не вставлял. Вместо них в тексте цифра 8 и скобка )
nokazus вне форума  
Непрочитано 21.03.2007, 09:27  
Muzicant
Прописка
 
Регистрация: 21.06.2003
Сообщений: 118
Сказал спасибо: 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, время: 03:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot