Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; 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
Составить ответ | Вернуться на конференцию
Ответы
- Ответ: - rezident (12.09.2008 21:54:45 77.43.215.91, пустое, ссылка)