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

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

как переключиться на вторую строку в hd44780 ?

Отправлено Frensis 12 сентября 2008 г. 21:31


.include "2313def.inc"
;**************************************************************************
;Программа "runstr" написана для индикатора , имеющего 20 символов в строке
;и включенного по схеме рис. 7.
;**************************************************************************
.list
.cseg

.org 0
;
;Инициализация
runstr:
ldi r25,$ff ;настроить порт D на вывод
out ddrd,r25
;
ldi r25,RAMEND ;установка стека
out spl,r25
;
rcall initlcd
;
;Основной цикл
Loop: ldi r24, 10 ;установка счетчика символов
;
shift: ldi r25,0b00011100 ;сдвиг дисплея на один символ
rcall icom_2313
rcall ddelay ;задержка ~200 мкс при кварце 4 МГц
dec r24
brne shift
;
ldi r24,5 ;остановка после вывода каждой строки
stop: rcall ddelay
dec r24
brne stop
;
rjmp Loop ;повторить сначала
;
initlcd:
ldi r25,0b00100000 ;4-битный интерфейс, 1-строка, шрифт-5х7 точек
rcall icom_2313
rcall del
ldi r25,0b00001100 ;включить дисплей, выключить курсор
rcall icom_2313
rcall del
ldi r25,0b00100000 ;4-битный интерфейс, 1-строка, шрифт-5х7 точек
rcall icom_2313
rcall del
ldi r25,0b00000001 ;очистить дисплей и установить курсор в
rcall icom_2313 ; начальную позицию
rcall delay
;
;Перепись CGRAM для букв 'Э' и 'Ф'
ldi r25,0b01000000 ;после этой команды данные записываются в CGRAM
rcall icom_2313 ;начиная с адреса 0
rcall del
ldi r30,low(rus_buf*2) ;установить указатель Z на начало буфера rus_buf
ldi r31,high(rus_buf*2)
ldi r24,16 ;установить счетчик программируемых ячеек CGRAM
cgram:
lpm ;извлечь из flash-памяти байт данных
mov r25,r0
rcall idat_2313 ;записать его в CGRAM
rcall del
ld r1,z+ ;увеличить на 1 указатель Z адреса flash-памяти
dec r24 ;если еще не все ячейки запрограммированы
brne cgram ;вернуться назад
;
;Вывод в DDRAM постоянного текста

ldi r25,0b10000000 ;после этой команды данные записываются в DDRAM
rcall icom_2313 ;начиная с адреса 0
rcall del
tuda:
ldi r30,low(text0*2) ;установить указатель Z на начало буфера text0
ldi r31,high(text0*2)
ldi r24,80 ;установить счетчик программируемых ячеек DDRAM
ddram:
lpm ;извлечь из flash-памяти байт данных
mov r25,r0
rcall idat_2313 ;записать его в DDRAM
rcall del
ld r1,z+ ;увеличить на 1 указатель Z адреса flash-памяти
dec r24 ;если еще не все ячейки запрограммированы
brne ddram ;вернуться назад

ret
;
;Задержка вывода для удобства восприятия человеком
ddelay:
ldi r19,100 ;
dd: rcall delay
dec r19
brne dd
ret
;
;Во flash - памяти после программы размещаем постоянные данные
.org $200
rus_buf: .DB $0e,$11,$01,$0f,$01,$11,$0e,$00 ;Начертание для буквы Э (код-0)
.DB $04,$0e,$15,$15,$0e,$04,$04,$00 ;Начертание для буквы Ф (код-1)

text0: .DB "Hello " ;Пустая строка
.DB "World "

text1: .DB "Rammstein " ;I love my AVR
.DB "Forever "

text2: .DB "My fucking" ;I love my LCD
.DB "My fucking"

text3: .DB "My fucking" ;I love "ЭФО"
.DB "My fucking"

icom_2313:
swap r25 ;подготовить старшую тетраду для передачи
mov r26,r25
andi r26,0b11101111 ;очистка бита 4 порта D (сигнал RS=0)
ori r26,0b11100000 ;установка бита 5 порта D ( сигнал E=1)
out portd,r26

cbi portd, 5 ;стробирующий сброс бита 5 порта D ( сигнал E=0).

swap r25 ;подготовить младшую тетраду для передачи
mov r26,r25
andi r26,0b11101111 ;очистка бита 4 порта D (сигнал RS=0)
ori r26,0b11100000 ;установка бита 5 порта D ( сигнал E=1)
out portd,r26

cbi portd, 5 ;стробирующий сброс бита 5 порта D ( сигнал E=0)
ret
;
idat_2313:
swap r25 ;подготовить старшую тетраду для передачи
mov r26,r25
ori r26,0b11110000 ;установка бита 4 порта D (сигнал RS=1) и
out portd,r26 ;бита 5 порта D ( сигнал E=1)

cbi portd,5 ;стробирующий сброс бита 5 порта D ( сигнал E=0)


swap r25 ;подготовить младшую тетраду для передачи
mov r26,r25
ori r26,0b11110000 ;установка бита 4 порта D (сигнал RS=1) и
out portd,r26 ;бита 5 порта D ( сигнал E=1)

cbi portd,5 ; стробирующий сброс бита 5 порта D ( сигнал E=0)
ret
;
initlcd_2313:
ldi r25,0b00100000 ;4-битный интерфейс, 1-строка, шрифт-5х7 точек
rcall icom_2313
rcall del
ldi r25,0b00001100 ;включить дисплей, выключить курсор
rcall icom_2313
rcall del
ldi r25,0b00100000 ;4-битный интерфейс, 1-строка, шрифт-5х7 точек
rcall icom_2313
rcall del
ldi r25,0b00000001 ;очистить дисплей и установить курсор в
rcall icom_2313 ; начальную позицию
rcall delay
del:
ldi r18,50 ;задержка ~40 мкс при кварце 4 МГц
l4: dec r18 ;
brne l4 ;
ret
;
delay:
ldi r17,9 ;задержка ~1,8 ms при кварце 4 МГц
l: ldi r18,255 ;
l1: dec r18 ;
brne l1 ;
dec r17 ;
brne l ;
ret
ret


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

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

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

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

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