Код: Выделить всё
;****************************************************
; Инициализация LCD
;****************************************************
;команды sbi, cbi - установка/сброс бита
;a0 pd6
;r/w pd5
;e pd4
;db4 pd0
;db5 pd1
;db6 pd2
;db7 pd3
INIT_LCD16S2D:
ldi Temp,0
ldi Temp1,0
ldi Temp2,18
Init_next0:
ldi Temp3,0b00010000
out PortD,Temp3
rcall Delay40mks
ldi ZL,Low(LCD_INIT_DATA*2)
ldi ZH,High(LCD_INIT_DATA*2)
add ZL,Temp
adc ZH,Temp1
lpm
mov Temp3,r0
out PortD, Temp3
inc Temp
rcall Delay40mks
cbi PortD, 4
rcall Delay40mks
dec Temp2
brne Init_next0
ret
LCD_INIT_DATA:
; are3210 are3210
.db 0b00010011 ; 30h Установка разрядности
.db 0b00010011 ; 30h Установка разрядности
.db 0b00010011 ; 30h Установка разрядности
.db 0b00010010 ; 20h Установка разрядности
.db 0b00010010 ; 28h (2Ah) Установка разрядности
.db 0b00011000 ;
.db 0b00010000 ; 0Ch Выглючение дисплея
.db 0b00011000 ;
.db 0b00010000 ; 01h Очистка, курсор влево
.db 0b00010001 ;
.db 0b00010000 ; 06h Установка направления и разрешения сдвига
.db 0b00010110 ;
.db 0b00010000 ; 0Fh Включить индикатор и мигающий курсор
.db 0b00011111 ;
.db 0b00011100 ; Курсор влево
.db 0b00000000 ;
.db 0b01001100 ; Вывод символа
.db 0b01000010 ;
;****************************************************
; Пауза
;****************************************************
Delay40mks:
push Temp
push Temp1
; push Temp2
ldi Temp,0
ldi Temp1,0
; ldi Temp2,1
Loop:
dec Temp
brne Loop
dec Temp1
brne Loop
; dec Temp2
; brne Loop
; pop Temp2
pop Temp1
pop Temp
ret

