Помогите с устройством на ATmega128
Добавлено: Вт апр 22, 2014 03:11:25
Необходимо разработать устройство для перевода трехзначного числа десятеричной системы счисления в шеснадцатиричную. На Atmega128 c клавиатурой и цифровым дисплеем.
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Что б я знал) Курсач... Можешь помочь?(BOB51 писал(а):А зачем для преобразования трехзначного целого в hex мегу 128ю ставить?
даже при "полной" клаве в 16 кноп???![]()
Такой курсач надо бы самому писать, или в "стол заказов" ( Есть работа http://radiokot.ru/forum/viewforum.php?f=53 ).gerasik писал(а):Что б я знал) Курсач... Можешь помочь?(BOB51 писал(а):А зачем для преобразования трехзначного целого в hex мегу 128ю ставить?
даже при "полной" клаве в 16 кноп???![]()
Вот мне ещё и на ассемблере код программы написать надо, а с чего начать разрабатывать не знаю, да и с ассемблером туговато(BOB51 писал(а): Я работаю токмо на ассемблере и под макет, а мега128 ноне уж слишком дорогое удовольсвие для "просто поиграться".
Боюсь мне не осилить столько литературы за 2-3 недели.(BOB51 писал(а):Сапсем плох однако...![]()
А хоть чего знаеш-то, студенто?![]()
В инете сканов умных книг весьма много сейчас
Токхейм Р.
Основы цифровой электроники: Пер. с англ.-М.:
Мир, 1988.-392 с, ил.
Двухтомник Искусство схемотехники Хоровиц/Хилл, 4-х томник курс цифровой электроники от Й. Янсена, Тищенки - Микроэвм своими руками, ну и по АВРкам - так вообще немеряно...
Могу литературки подкинуть - на Вашу флешку...
Касательно ассемблера - нормальный язык... ну немного "нудотный" и приближен к конкретному железу, но работать вполне сносно.
Увы это всё что в тз сказано( Сам в шокеorinoko писал(а):причём в ТЗ нужна уже нарисованная схема, чтобы знать, что куда подключено, тип применяемых элементов и т.д. А если и этого нет, то это уже, извините, не помощь требуется.
Тут вопрос вот в чём. Перед написанием непосредственно программы нужно иметь перед собой схему. И есть два варианта - либо есть некий студенческий стенд с этой периферией, и тогда нужно знать подключение; либо изделие разрабатывается "с нуля". Для второго варианта есть также три подварианта - схема должна быть спаяна и запущена, либо достаточно, чтобы работало например, в Протеусе, либо просто схема и исходник, а в доказательство работы сказать "мамой клянусь"gerasik писал(а):Увы это всё что в тз сказано( Сам в шокеorinoko писал(а):причём в ТЗ нужна уже нарисованная схема, чтобы знать, что куда подключено, тип применяемых элементов и т.д. А если и этого нет, то это уже, извините, не помощь требуется.
.include "m128def.inc"
.cseg
.org 0000
jmp Init
Init:
ldi R16,0x00 ;Ôîðìèðóåì ñòåê, íà÷èíàÿ ñ ÿ÷åéêè ïàìÿòè 0õ400
out SPL,R16 ;Ìëàäøèé áàéò
ldi R17,0x04
out SPH,R17 ;Ñòàðøèé áàéò
ldi r28,0x00 ;Ðåãèñòð Ó - äëÿ çàïèñè íàæàòîé êëàâèøè â ïàìÿòü
ldi r29,0x02
;Âñïîìîãàòåëüíûå ðåãèñòðû:
clr r20
clr r21
clr r22
clr r23
;Èíèöèàëèçèðóåì äèñïëåé
sbi DDRD,5 ;Óñòàíàâëèâàåì íà âûâîä ëèíèþ R/W
sbi DDRD,7 ;Óñòàíàâëèâàåì íà âûâîä ëèíèþ RS
sbi DDRE,2 ;Óñòàíàâëèâàåì íà âûâîä ëèíèþ E
ldi R16,0b00001111 ;Óñòàíàâëèâàåì íà âûâîä ëèíèè DB7…DB4
sts DDRF,R16
cbi PortD,5 ; R/W = 0 ðåæèì çàïèñè â ÆÊ äèñïëåé (Write)
;Çàäåðæêà
clr r13
clr r14
dec R13
brne PC-1
dec R14
brne PC-3
cbi PortD,7 ;RS = 0 - óñòàíîâêà äèñïëåÿ íà ïðèåì êîìàíä
ldi R16,0b0011 ;Çàãðóæàåì DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 1
sts PortF,R16 ;Îòïðàâëÿåì ýòî íà ÆÊ äèñïëåé
sbi PortE,2 ;Âêëþ÷àåì ðåæèì ïðèåìà
clr r13 ;Î÷èùàåì èñïîëüçóåìûé ðåãèñòð
dec r13 ;Óìåíüøàåì íà åäèíèöó
brne pc-1
cbi PortE,2 ;Âûêëþ÷àåì ðåæèì ïðèåìà
;Çàäåðæêà
dec R13
brne PC-1
dec R14
brne PC-3
ldi R16,0b0011 ;Îòïðàâëÿåì DB7=0,DB6=0,DB5=1.DB4=1
sts PortF,R16
sbi PortE,2 ;Âêëþ÷àåì ïðèåì
;Çàäåðæêà
call delay
cbi PortE,2 ;Âûêëþ÷àåì ïðèåì
call delay
ldi R16,0b0011 ;Îòïðàâëÿåì DB7 = 0,DB6 = 0,DB 5= 1, DB4=1
sts PortF,R16
sbi PortE,2
;Çàäåðæêà
call delay
cbi PortE,2
ldi R16,0b0010 ;Óñòàíîâêà 4-áèòíîãî èíòåðôåéñà:
;DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0
sts PortF,R16 ;Îòïðàâëÿåì
sbi PortE,2 ;Âêëþ÷àåì ïðèåì
;Çàäåðæêà
call delay
cbi PortE,2 ;Âûêëþ÷àåì ïðèåì
ldi R16,0b0010 ;Ïîäòâåðæäåíèå 4-õ áèòíîãî èíòåðôåéñà
;DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Óñòàíîâêà ñèìâîëüíîé ìàòðèöû 5 õ 7 ïèêñåëåé
ldi R16,0b1000 ;N = 1, F = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Ãàøåíèå äèñïëåÿ
ldi R16,0b0000 ;DB7 = 0, DB6 = 0, DB5 = 0, DB4 =0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b1000 ;Îòïðàâëÿåì D = 0, C = 0, B = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Óñòàíîâêà ðåæèìà ââîäà
ldi R16,0b0000
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b0110 ;Îòïðàâëÿåì I/D = 1, S = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Âêëþ÷åíèå èíäèêàòîðà
ldi R16,0b0000
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b1111 ;Îòïðàâëÿåì D = 1, C = 1, B = 1
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Êîíåö èíèöèàëèçàöèè
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
call lcd_1st_line
start: ;Âûâîä èíôîðìàöèè íà äèñïëåé
out portC,R26 ;Îòïðàâêà íîìåðà ðàçðÿäà
ld r20,x ;Çàãðóçêà îáðàçà âûâîäèìîãî ñèìâîëà
out portA,R20 ;Îòïðàâêà îáðàçà íà ïîðò
cbi portC,3 ;Ôîðìèðîâàíèå îòðèöàòåëüíîãî ôðîíòà
sbi portC,3
dec r25 ;Çàäåðæêà
brne pc-1
ldi R20,0xFF ;Ãàøåíèå èíäèêàòîðà
out portA,R20
cbi portC,3
sbi portc,3
in R16,pinC ;Çàãðóçêà èç ïîðòà Ñ èíôîðìàöèè î íàæàòèè êëàâè-øè
;Ìàñêè äëÿ ïðåäîòâðàùåíèÿ óñòàíîâêè ëèøíèõ áèòîâ
andi r16,0b11100000
andi r26,0b00001111
or r16,r26 ;Ñîåäèíåíèå ðåãèñòðà îòïðàâêè è ðåãèñòðà ïðèåìà
mov r17,r16 ;Êîïèðîâàíèå ýòîãî êîäà âî âñïîìîãàòåëüíûé ðå-ãèñòð
;Ïðîâåðêà íàëè÷èÿ ñèãíàëà íàæàòîé êëàâèøè
andi r17,0b11100000
brne signal ;Åñëè ïîëó÷åí íå íîëü - ñèãíàë åñòü, åñëè íîëü - íåò
inc r26 ;Ïåðåõîä íà ñëåäóþùèé ðàçðÿä äèñïëåÿ è ñòîëáöà
;êëàâèàòóðû
andi r26,7 ;Îãðàíè÷åíèå - íå áîëüøå 8
jmp start ;Âîçâðàò íà ñòàðò
/////////////////////ïðîâåðêà ñèãíàëà
signal: ;Åñëè ñèãíàë ñ êëàâèàòóðû åñòü:
cpi r16,0x43 ;Ñðàâíèâàåì ïîëó÷åííûé êîä ñ êîäîì êëàâèøè 0
breq nol ;Åñëè êîä ñîâïàë, ïåðåõîä íà çàïèñü îáðàçà, åñëè íå
;ñîâïàë - ïðîâåðÿåì äàëüøå
cpi r16,0x22
breq odin
cpi r16,0x42
breq dva
cpi r16,0x82
breq tri
cpi r16,0x21
breq chetiri
cpi r16,0x41
breq piati
cpi r16,0x81
breq shesti
cpi r16,0x20
breq sem
cpi r16,0x40
breq vosem
ldi r16,0x80
breq deviati;Åñëè íè îäèí êîä íå ñîâïàë - âîçâðàùåíèå íà ñòàðò
inc r26 ;Ïåðåõîä íà ñëåäóþùèé ðàçðÿä äèñïëåÿ\ñòîëáöà
;êëàâèàòóðû
andi r26,7 ;Îãðàíè÷åíèå - íå áîëüøå 8
jmp start
/////////////////////////öèôðû
nol:
ldi r20,30
jmp lcd_print_symbol
odin:
ldi r20,31
jmp lcd_print_symbol
dva:
ldi r20,32
jmp lcd_print_symbol
tri:
ldi r20,33
jmp lcd_print_symbol
chetiri:
ldi r20,34
jmp lcd_print_symbol
piati:
ldi r20,35
jmp lcd_print_symbol
shesti:
ldi r20,36
jmp lcd_print_symbol
sem:
ldi r20,37
jmp lcd_print_symbol
vosem:
ldi r20,38
jmp lcd_print_symbol
deviati:
ldi r20,39
jmp lcd_print_symbol
aaaa:
ldi r20,41
jmp lcd_print_symbol
bbbb:
ldi r20,42
jmp lcd_print_symbol
cccc:
ldi r20,43
jmp lcd_print_symbol
dddd:
ldi r20,44
jmp lcd_print_symbol
eeee:
ldi r20,45
jmp lcd_print_symbol
ffff:
ldi r20,46
jmp lcd_print_symbol
////////////////////////öèôðû
lcd_print_symbol: ;Çàïèñü ñèìâîëà íà ÆÊ äèñïëåé, êîä êîòîðîãî
;çàïèñàí â R20
sbi PortD,7 ;RS = 1 - óñòàíîâêà äèñïëåÿ íà ïðèåì ñèìâîëîâ
mov r16,r20 ;Êîïèðóåì âûâîäèìûé ñèìâîë â R16
andi r16,0xF0 ;Óäàëÿåì ìëàäøóþ òåòðàäó èç R16
swap r16 ;Ìåíÿåì ìåñòàìè òåòðàäû
sts PortF,R16 ;Îòïðàâëÿåì ýòó òåòðàäó íà äèñïëåé
sbi PortE,2 ;Âêëþ÷àåì ïðèåì
;Çàäåðæêà
clr r13
dec r13
brne pc-1
cbi PortE,2 ;Âûêëþ÷àåì ïðèåì
mov r16,r20 ;Ñíîâà êîïèðóåì â R16
andi r16,0x0F ;Óäàëÿåì ñòàðøóþ òåòðàäó
sts PortF,R16 ;Îòïðàâëÿåì åå íà äèñïëåé
sbi PortE,2 ;Âêëþ÷àåì ïðèåì
;Çàäåðæêà
clr r13
dec r13
brne pc-1
cbi PortE,2 ;Âûêëþ÷àåì ïðèåì
ret ;Âûõîä èç ïîäïðîãðàììû
lcd_1st_line:
;Óñòàíîâêà êóðñîðà â ëåâîì âåðõíåì óãëó 0x80
cbi PortD,7 ;RS = 0 - óñòàíîâêà äèñïëåÿ íà ïðèåì êîìàíä
ldi R16,0x8 ;Îòïðàâëÿåì ñòàðøóþ òåòðàäó êîìàíäû
sts PortF,R16 ;Îòïðàâëÿåì åå
sbi PortE,2 ;Àêòèâèðóåì ïðèåì äèñïëååì
call delay ;Çàäåðæêà
cbi PortE,2 ;Çàêðûâàåì ïðèåì
ldi R16,0x0 ;Çàãðóæàåì ìëàäøóþ òåòðàäó êîìàíäû
sts PortF,R16 ; Îîòïðàâëÿåì
sbi PortE,2 ;Àêòèâèðóåì ïðèåì
call delay ;Îæèäàåì
cbi PortE,2 ;Çàâåðøàåì ïðèåì
sbi PortD,7 ;Óñòàíîâêà äèñïëåÿ íà ïðèåì ñèìâîëîâ
ret
lcd_2nd_line:
;Óñòàíîâêà êóðñîðà â íà÷àëå âòîðîé ñòðîêè 0xC0
cbi PortD,7
ldi R16,0xC
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0x0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
sbi PortD,7
ret
delay: ;Ïîäïðîãðàììà çàäåðæêè
clr r14
dec r14
brne pc-1
ret
Программа состоит из комментариев. А напечатать команды по комментариям сможет уже и обезьяна.что есть пытаюсь
http://www.google.ru/search?q=декомпозиция+задачиперевод трехзначного десятичного числа в шестнадцатиричную систему счисления на Atmega128 с клавиатурой и дислеем lm016l
Спасибо, понял как работает.вот что есть с комментамиnirq писал(а):Препаду налом - дешевле и честнее.
Он тебя учит отмазывает от солдатни, ты его за это наё благодаришь по понятиям.
Совесть...
Программа состоит из комментариев. А напечатать команды по комментариям сможет уже и обезьяна.что есть пытаюсь
Программа должна быть читаемой. А прочитать читаемую программу сможешь уже и сам. А нечитаемая она никому не нужна, даже если случайно заработает.
Чтобы русские буквы скопировать, внимательно:
1. В окне-источнике переключаем клавиатуру на русский язык.
2. Ctrl+C из окна-источника.
3. Ctrl+V в окно-приёмник.
http://www.google.ru/search?q=декомпозиция+задачиперевод трехзначного десятичного числа в шестнадцатиричную систему счисления на Atmega128 с клавиатурой и дислеем lm016l
Спойлер
include "m128def.inc"
.cseg
.org 0000
Init:
ldi R16,0x00 ;Формируем стек, начиная с ячейки памяти 0х400
out SPL,R16 ;Младший байт
ldi R17,0x04
out SPH,R17 ;Старший байт
;Инициализируем дисплей
sbi DDRD,5 ;Устанавливаем на вывод линию R/W
sbi DDRD,7 ;Устанавливаем на вывод линию RS
sbi DDRE,2 ;Устанавливаем на вывод линию E
ldi R16,0b00001111 ;Устанавливаем на вывод линии DB7…DB4
sts DDRF,R16
cbi PortD,5 ; R/W = 0 режим записи в ЖК дисплей (Write)
;Задержка
clr r13
clr r14
dec R13
brne PC-1
dec R14
brne PC-3
cbi PortD,7 ;RS = 0 - установка дисплея на прием команд
ldi R16,0b0011 ;Загружаем DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 1
sts PortF,R16 ;Отправляем это на ЖК дисплей
sbi PortE,2 ;Включаем режим приема
clr r13 ;Очищаем используемый регистр
dec r13 ;Уменьшаем на единицу
brne pc-1
cbi PortE,2 ;Выключаем режим приема
;Задержка
dec R13
brne PC-1
dec R14
brne PC-3
ldi R16,0b0011 ;Отправляем DB7=0,DB6=0,DB5=1.DB4=1
sts PortF,R16
sbi PortE,2 ;Включаем прием
;Задержка
call delay
cbi PortE,2 ;Выключаем прием
call delay
ldi R16,0b0011 ;Отправляем DB7 = 0,DB6 = 0,DB 5= 1, DB4=1
sts PortF,R16
sbi PortE,2
;Задержка
call delay
cbi PortE,2
ldi R16,0b0010 ;Установка 4-битного интерфейса:
;DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0
sts PortF,R16 ;Отправляем
sbi PortE,2 ;Включаем прием
;Задержка
call delay
cbi PortE,2 ;Выключаем прием
ldi R16,0b0010 ;Подтверждение 4-х битного интерфейса
;DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Установка символьной матрицы 5 х 7 пикселей
ldi R16,0b1000 ;N = 1, F = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Гашение дисплея
ldi R16,0b0000 ;DB7 = 0, DB6 = 0, DB5 = 0, DB4 =0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b1000 ;Отправляем D = 0, C = 0, B = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Установка режима ввода
ldi R16,0b0000
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b0110 ;Отправляем I/D = 1, S = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Включение индикатора
ldi R16,0b0000
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b1111 ;Отправляем D = 1, C = 1, B = 1
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;Конец инициализации
;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
.DEF rmp = R16 ;
.EQU pKeyOut = PORTB
.EQU pKeyInp = PINB
.EQU pKeyDdr = DDRB
START:
InitKey:
ldi rmp,0b01110000
out pKeyDdr,rmp
ldi rmp,0b00001111
out pKeyOut,rmp
AnyKey:
ldi rmp,0b00001111 ; PB4..PB6(Col3..Col1)=0, pull-Up ????????? ??????????
; ?? ????? (PB0..PB3, Row4..Row1).
out pKeyOut,rmp ; ????????? ???????? PORTB
in rmp,pKeyInp ; ?????? ????????? ????? (Row4..Row1).
ori rmp,0b11110000 ; ?????????? ??? ?????????????? ???? ? ???. 1
cpi rmp,0b11111111 ; ??? ???? ? ???. 1?
breq NoKey ; ??, ?? ???? ?????? ?? ???? ?? ??????
;
; ????????????? ??????? ??????
;
ReadKey:
ldi ZH,HIGH(2*KeyTable) ; Z ????????? ?? ??????? ????? ??????
ldi ZL,LOW(2*KeyTable)
; ?????? ??????? 1 (Col1)
ldi rmp,0b00111111 ; PB6 = 0
out pKeyOut,rmp
in rmp,pKeyInp ; ?????? ?????
ori rmp,0b11110000 ; ???????????? ??????? ???
cpi rmp,0b11111111 ; ?????? ?????? ? ???? ????????
brne KeyRowFound ; ??????? ??????? ?????? ? ???? ???????
adiw ZL,4 ; ? ???? ??????? ?? ???? ???????, ??????????? Z
; ?? 4 ?????? ??????
; ?????? ??????? 2 (Col2)
ldi rmp,0b01011111 ; PB5 = 0
out pKeyOut,rmp
in rmp,pKeyInp ; ????? ?????? ?????
ori rmp,0b11110000 ; ????? ???????????? ??????? ???
cpi rmp,0b11111111 ; ?????? ?????? ? ???? ????????
brne KeyRowFound ; ??????? ??????? ?????? ? ???? ???????
adiw ZL,4 ; ? ???? ??????? ?? ???? ???????, ??????????? Z
; ?? 4 ?????? ??????
; ?????? ??????? 3 (Col3)
ldi rmp,0b01101111 ; PB4 = 0
out pKeyOut,rmp
in rmp,pKeyInp ; ????????? ?????? ?????
ori rmp,0b11110000 ; ????? ???????????? ??????? ???
cpi rmp,0b11111111 ; ?????? ?????? ? ???? ????????
breq NoKey ; ?????????? ????????????, ??? ?? ?????? ?????? ?? ? ?????
; ?? ????????
KeyRowFound: ; ?????? ???????, ??? ?????? ??????, ??????
; ???? ??????, ? ????? ??????
lsr rmp ; ????? ???. 0 ?????, ??? 0 ??? ???? ??????????
; ? ??????? ????????
brcc KeyFound ; ?????????? ???. 0, ??? ?????? ??? ??????? ???????
adiw ZL,1 ; ??????? ? ????????? ?????? ? ???? ???????
rjmp KeyRowFound ; ????????? ?????
KeyFound: ; ??????? ??????? ??????
lpm r26,z ; ????????? ?? ??????? ??? ?????? ? ??????? R0
rjmp KeyProc ; ?????????? ????????? ??????
NoKey:
rjmp start ; ?? ???? ??????? ??????? ??????
;
; ??????? ????? ?????? ??? ??????????????
;
KeyTable:
.DB 0x0A,0x07,0x04,0x01 ; ?????? ???????, ?????? *, 7, 4 ? 1
.DB 0x00,0x08,0x05,0x02 ; ?????? ???????, ?????? 0, 8, 5 ? 2
.DB 0x0B,0x39,0x06,0x03 ; ?????? ???????, ?????? #, 9, 6 ? 3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////проверка сигнала
KeyProc: ;Если сигнал с клавиатуры есть:
cpi r26,0x00 ;Сравниваем полученный код с кодом клавиши 0
breq nol ;Если код совпал, переход на запись образа, если не совпал - проверяем дальше
cpi r26,0x01
breq odin
cpi r26,0x02
breq dva
cpi r26,0x03
breq tri
cpi r26,0x04
breq chetiri
cpi r26,0x05
breq piati
cpi r26,0x06
breq shesti
cpi r26,0x07
breq sem
cpi r26,0x08
breq vosem
ldi r26,0x39
breq deviati;Если ни один код не совпал - возвращение на старт
ldi r26,0x0A
breq zv
ldi r26,0x0B
breq resh
inc r26 ;Переход на следующий разряд дисплея\столбца
;клавиатуры
andi r26,7 ;Ограничение - не больше 8
/////////////////////////цифры
nol:
ldi r20,48
jmp lcd_print_symbol
odin:
ldi r20,49
jmp lcd_print_symbol
dva:
ldi r20,50
jmp lcd_print_symbol
tri:
ldi r20,51
jmp lcd_print_symbol
chetiri:
ldi r20,52
jmp lcd_print_symbol
piati:
ldi r20,53
jmp lcd_print_symbol
shesti:
ldi r20,54
jmp lcd_print_symbol
sem:
ldi r20,55
jmp lcd_print_symbol
vosem:
ldi r20,56
jmp lcd_print_symbol
deviati:
ldi r20,0x39
jmp lcd_print_symbol
aaaa:
ldi r20,0x41
jmp lcd_print_symbol
bbbb:
ldi r20,0x42
jmp lcd_print_symbol
cccc:
ldi r20,0x43
jmp lcd_print_symbol
dddd:
ldi r20,0x44
jmp lcd_print_symbol
eeee:
ldi r20,0x45
jmp lcd_print_symbol
ffff:
ldi r20,0x46
jmp lcd_print_symbol
zv:
ldi r20,0x2a
jmp lcd_print_symbol
resh:
ldi r20,0x23
jmp lcd_print_symbol
////////////////////////цифры
lcd_print_symbol: ;Запись символа на ЖК дисплей, код которого
;записан в R20
sbi PortD,7 ;RS = 1 - установка дисплея на прием символов
mov r16,r20 ;Копируем выводимый символ в R16
andi r16,0xF0 ;Удаляем младшую тетраду из R16
swap r16 ;Меняем местами тетрады
sts PortF,R16 ;Отправляем эту тетраду на дисплей
sbi PortE,2 ;Включаем прием
;Задержка
clr r13
dec r13
brne pc-1
cbi PortE,2 ;Выключаем прием
mov r16,r20 ;Снова копируем в R16
andi r16,0x0F ;Удаляем старшую тетраду
sts PortF,R16 ;Отправляем ее на дисплей
sbi PortE,2 ;Включаем прием
;Задержка
clr r13
dec r13
brne pc-1
cbi PortE,2 ;Выключаем прием
ret ;Выход из подпрограммы
lcd_1st_line:
;Установка курсора в левом верхнем углу 0x80
cbi PortD,7 ;RS = 0 - установка дисплея на прием команд
ldi R16,0x8 ;Отправляем старшую тетраду команды
sts PortF,R16 ;Отправляем ее
sbi PortE,2 ;Активируем прием дисплеем
call delay ;Задержка
cbi PortE,2 ;Закрываем прием
ldi R16,0x0 ;Загружаем младшую тетраду команды
sts PortF,R16 ; Оотправляем
sbi PortE,2 ;Активируем прием
call delay ;Ожидаем
cbi PortE,2 ;Завершаем прием
sbi PortD,7 ;Установка дисплея на прием символов
ret
lcd_2nd_line:
;Установка курсора в начале второй строки 0xC0
cbi PortD,7
ldi R16,0xC
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0x0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
sbi PortD,7
ret
delay: ;Подпрограмма задержки
clr r14
dec r14
brne pc-1
ret