Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Уж не знаю, что там у вас на Си, но предлагаю посмотреть рабочий код на асме для МЭЛТ 12232В (+)

Отправлено sadat 07 декабря 2006 г. 14:05
В ответ на: AVR+МЭЛТ(SED1520). От МК ничего не выдает :( ... может глаза замылились? (распайка верна.) отправлено <font color=gray>gsm</font> 07 декабря 2006 г. 12:40

Весь экран держим в ОЗУ, программа только регенирирует из озу в память ЛЦД. У меня регенерация - 16 раз в секунду - достаточно.
Код для АТМЕГИ 32 и такт. 8мГц
Вывод РЕСЕТа дисплея подключен к выводу ресета мк, поэтому я этот код закомментировал.
Код РЕАЛЬНО работает. Если есть желание - скину еще и процедуру печати....

.MACRO LDIZ ; Загрузка двойного значения в регистр Z
ldi r30, low (@0)
ldi r31, high (@0)
.ENDMACRO

;--------------------------------------------------------
; описываем переменные и связанные с ними регистры
; Касаемо ЛСД дисплея
;--------------------------------------------------------
.equ LCD_A0 = PA3; данные/команда управления
.equ LCD_E1 = PA2; строб данных - первый кристалл
.equ LCD_E2 = PA1; строб данных - второй кристалл
.equ LCD_RW = PA0; запись/чтение на ЛСД
; .equ LCD_RES = PA4; сброс ЛСД дисплея - ОПЦИОНАЛЬНО - его нет в наличии !!!!
.equ LCD_COMMAND_PORT = PORTA; порт команд
.equ LCD_PORT = PORTB; вывод данных - на порт ЛСД
.equ LCD_LED = PD0; включение подсветки ЛСД
.equ LCD_LED_P = PORTD; порт подсветки ЛСД
;--------------------------------------------------------


; установка порта А
clr a;
out PORTA,a;
ldi a, (1< out DDRA,a;
; установка порта B
clr a;
out PORTB,a;
ldi a, 0xFF;
out DDRB,a; порт B - на вывод!!!!!


;*********************************************************************************
; программа инициализации LCD
;======================================================================================
INIT_LCD:
push a;
push b;
;Комментарии из-за отсутствия физического ресета у дисплея
; in b, PORTA;
; cbr b,(1<; out PORTA, b;
; ldi a, 10;
; rcall PAUSE_1mksXa; ждем 10 мкс
; sbr b,(1<; out PORTA, b;
; ldi a, 2;
; rcall PAUSE_10msXa; ждем 20 мс
; подаем процессору ЖК команду RMW
ldi a, 0b11100000;
RCALL VIVOD_LCD;
; подаем процессору ЖК команду режима работы
ldi a, 0b10100100; обычное управление
RCALL VIVOD_LCD;
; подаем процессору ЖК команду выбора мультиплекса
ldi a, 0b10101001; модуль МТ-12232В
RCALL VIVOD_LCD;
; подаем процессору ЖК команду включения дисплея
ldi a, 0b10101111; включаем дисплей
RCALL VIVOD_LCD;
; подаем процессору ЖК команду установки верхней строки дисплея
ldi a, 0b11000000; да самая нулевая и есть нулевая
RCALL VIVOD_LCD;
; подаем процессору ЖК команду установки столбца SET ADRESS
ldi a, 0b00000000; столбец - нулевой (X)
RCALL VIVOD_LCD;
; подаем процессору ЖК команду установки столбца SET PAGE
ldi a, 0b10111010; столбец - 0 (Y)
RCALL VIVOD_LCD;
pop b;
pop a;
ret;

;======================================================================================
;подпрограмма вывода на порт В содержащегося в регистре b и паузы
;======================================================================================
VIVOD_LCD:
push b;
out PORTB, a;
in b, porta;
cbr b, (1< out porta, b;
nop;
nop;
sbr b, (1< out porta, b; фроны на Е нарастают
nop;
nop;
nop;
nop;
cbr b, (1< out porta, b; фронты на Е спадают
pop b;
RET;
;======================================================================================

;*********************************************************************************
; программа регенерации из ОЗУ в ЛСД дисплей
;*********************************************************************************
REFRESH_LCD:
push a;
in a, SREG
push a; запомнили значение регистра состояния
push b;
push c;
push d;
push yl;
push yh;
push zl;
push zh;
ldi c, 03; четыре строки, но с указателем....
refr1:
; подаем процессору ЖК команду снятие флага RMW END
ldi a, 0b11101110;
RCALL VIVOD_LCD;
; подаем процессору ЖК команду установки столбца SET ADRESS
ldi a, 0b00000000; столбец - нулевой (X)
RCALL VIVOD_LCD;
; подаем процессору ЖК команду установки столбца SET PAGE
ldi a, 0b10111000; столбец
or a,c;
RCALL VIVOD_LCD;
; выводим побайтно
ldi b, 60;
refr2:
LDIZ LCD_data;
add zl,b;
brcc prop_refr1; если переноса не было, то старш не увеличиваем
inc zh;
prop_refr1:
ldi a, 3;
sub a,c; надо получить увеличение на строку - 128 байт
ror a; если флаг с - то устанавливаем 7 бит
brcc prop_refr2; если переноса не было, то старш не увеличиваем
sbr ZL,128;
prop_refr2:
ror a;
brcc prop_refr3; если переноса не было, то старш не увеличиваем
inc zh;
prop_refr3:
; итак, имеем адрес ОЗУ и установленную позицию дисплея
push b;
LD a, Z;
out PORTB, a; вывели на кристалл 2
in b, porta;
sbr b, (1< cbr b, (1< out porta, b;
nop
nop
sbr b, (1< out porta, b; фроны на Е нарастают
nop
nop
nop
nop
cbr b, (1< out porta, b; фронты на Е спадают
nop
nop
adiw ZL, 61;
LD a,Z;
out PORTB, a; вывели на кристалл 1
sbr b, (1< out porta, b; фроны на Е нарастают
nop
nop
nop
nop
cbr b, (1< out porta, b; фронты на Е спадают
pop b;
dec b;
brmi prop_per_refr_1;
jmp refr2; отрабатываем 61 байт
prop_per_refr_1:
dec c;
brmi prop_per_refr_2;
jmp refr1; отрабатываем 4 строки
prop_per_refr_2:
pop zh;
pop zl;
pop yh;
pop yl;
pop d;
pop c;
pop b;
pop a;
out SREG,a; восстановили значение регистра состояния
pop a;
ret;
;*********************************************************************************

;*****************************************************************************************************
PAUSE_10msXa:
push zh;
push zl;
push a;
pause_1_sec_m2:
ldi Zl, low (Quartz/400); задаем время задержки
ldi Zh, high (Quartz/400);
pause_1_sec_metka:
sbiw Zl,1; 2 такта
brne pause_1_sec_metka; 2 такта
dec a;
wdr;
brne pause_1_sec_m2;
pop a;
pop zl;
pop zh;
ret;
;*****************************************************************************************************

;*****************************************************************************************************
; Временная задержка 1 мkсек умноженная на а
;*****************************************************************************************************
PAUSE_1mksXa:
push a;
pause_1_sec_m4:
dec a; 1
nop;1
nop;1
nop;1
nop;1
nop;1
brne pause_1_sec_m4;2
pop a;
ret;
;*****************************************************************************************************



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа

Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
прибавьте тройку к двум:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru