Инициализация взята у кранца, только переписал под асм.
Сначала использовал встроенный SPI, но на нем же висел программатор, когда отлаживал, подумал, что может влияет программатор и переделал на софт. SPI, если есть желание разбираться с моим кодом, велком, а так если есть вопросы, всегда пож-та )))
Кстати, для L2F50 есть команды включения и выключения дисплея, после инициализации делаю так, выключаю, записываю в память картинку, включаю, все сразу показывает, т.е. не показывает момент прорисовки, а так скорость хотелось бы побыстрее, но пока и такого хватает, делать что-то кроме меню для AVR пока нет надобности.
Код
display_init:
cbi PORTA,D_RESET; Вывод RESET в 0
sbi PORTA,D_CS; CS=1 на время сброса
sbi PORTB,D_RS ; RS=1
rcall del10ms ; Задержка 10 мс
sbi PORTA,D_RESET; Вывод RESET в 1
rcall del35ms ; Задержка 35 мс
cbi PORTA,D_CS; CS=0
ldi tmp,$BC ; Посылаем команду $BC - Data Control (data handling in RAM)
rcall lcd_cmd
ldi tmp,$2A
rcall lcd_dat ; 0x2A=565 mode, 0x0A=666mode, 0x3A=444mode
rcall cs_pulse ; Дергаем CS
ldi ZL,low(INIT1*2)
ldi ZH,high(INIT1*2)
lpm
mov tmp,r0
rcall lcd_cmd ; Посылаем команду $CA - Display Control
clr bitcount
START_INIT1:
inc bitcount
adiw ZL,1
lpm
mov tmp,r0
rcall lcd_dat
cpi bitcount,$09 ; 9 байт данных послано
breq STOP_INIT1
jmp START_INIT1
STOP_INIT1:
;
ldi ZL,low(INIT2*2)
ldi ZH,high(INIT2*2)
lpm
mov tmp,r0
rcall lcd_cmd ; Посылаем команду $CB - pulse set for 64 gray scale
clr bitcount
START_INIT2:
inc bitcount
adiw ZL,1
lpm
mov tmp,r0
rcall lcd_dat
ldi tmp,$00
rcall lcd_dat
cpi bitcount,$1D ; 29 байт данных + 29 байт $00 послано
breq STOP_INIT2
jmp START_INIT2
STOP_INIT2:
;
ldi ZL,low(INIT3*2)
ldi ZH,high(INIT3*2)
clr bitcount
START_INIT3:
inc bitcount
lpm
mov tmp,r0
rcall lcd_dat
ldi tmp,$01
rcall lcd_dat
adiw ZL,1
cpi bitcount,$22 ; 34 байта данных + 34 байта $01 послано
breq STOP_INIT3
jmp START_INIT3
STOP_INIT3:
;
ldi ZL,low(INIT4*2)
ldi ZH,high(INIT4*2)
lpm
mov tmp,r0
rcall lcd_cmd ; Посылаем команду $CC - pulse set for 16 gray scale
clr bitcount
START_INIT4:
inc bitcount
adiw ZL,1
lpm
mov tmp,r0
rcall lcd_dat
cpi bitcount,$0F ; 15 байт данных послано
breq STOP_INIT4
jmp START_INIT4
STOP_INIT4:
;
ldi tmp,$CD ; Set for gray scales
rcall lcd_cmd
ldi tmp,$00
rcall lcd_dat
; ldi tmp,$D0 ; Oscillator select
; rcall lcd_cmd
; ldi tmp,$00
; rcall lcd_dat
ldi tmp,$94 ; Display out of sleep (no parameter)
rcall lcd_cmd
; rcall del7ms
ldi tmp,$15 ; Column address setting
rcall lcd_cmd
ldi tmp,$08
rcall lcd_dat
ldi tmp,$01
rcall lcd_dat
ldi tmp,$8B
rcall lcd_dat
ldi tmp,$01
rcall lcd_dat
ldi tmp,$75 ; Page address setting
rcall lcd_cmd
ldi tmp,$00
rcall lcd_dat
ldi tmp,$8F
rcall lcd_dat
ldi tmp,$AA ; Area scroll setting
rcall lcd_cmd
ldi tmp,$00
rcall lcd_dat
ldi tmp,$AF
rcall lcd_dat
ldi tmp,$AF
rcall lcd_dat
ldi tmp,$03
rcall lcd_dat
ldi tmp,$AB ; Scroll start setting
rcall lcd_cmd
ldi tmp,$00
rcall lcd_dat
sbi PORTB,D_RS
ldi tmp,$AF ; Display ON (no parameter)
rcall lcd_cmd
sbi PORTA,D_CS ; CS=1
;ret
;====================== Инициализация закончена ========================================
; Далее очищаем экран или сразу выводим картинку и т.п.
;-------------------------------------------------------
cs_pulse: ; Импульс CS
sbi PORTA,D_CS
cbi PORTA,D_CS
ret
;====================== Подпрограммы ================================================
lcd_write: ; Запись байта данных в дисплей L2F50126
clr tmp2
send_SPI:
inc tmp2
sbi PORTA,D_DATA
rol tmp
brcs send_SPI_1
cbi PORTA,D_DATA
send_SPI_1:
sbi PORTA,D_CLK
cbi PORTA,D_CLK
cpi tmp2,$08
brne send_SPI
ret
;-------------------------------------------------------
lcd_cmd: ; Запись команды в дисплей
cbi PORTB,D_RS ; RS=0 - команда, RS=1 - данные для L2F50126
rcall lcd_write
ldi tmp,$00
rcall lcd_write
sbi PORTB,D_RS
ret
;-------------------------------------------------------
lcd_dat: ; Запись данных в дисплей
rcall lcd_write
ldi tmp,$00
rcall lcd_write
ret
;-------------------------------------------------------
.CSEG
INIT1: .DB 0xCA,0x4C,0x01,0x53,0x00,0x02,0xB4,0xB0,0x02,0x00
INIT2: .DB 0xCB,0x11,0x27,0x3C,0x4C,0x5D,0x6C,0x78,0x84,0x90,0x99,0xA2,0xAA,0xB2,0xBA,0xC0,
0xC7,0xCC,0xD2,0xD7,0xDC,0xE0,0xE4,0xE8,0xED,0xF0,0xF4,0xF7,0xFB,0xFE
INIT3: .DB 0x01,0x03,0x06,0x09,0x0B,0x0E,0x10,0x13,0x15,0x17,0x19,0x1C,0x1E,0x20,0x22,0x24,
0x26,0x28,0x2A,0x2C,0x2D,0x2F,0x31,0x33,0x35,0x37,0x39,0x3B,0x3D,0x3F,0x42,0x44,
0
x47,0x5E
INIT4: .DB 0xCC,0x13,0x23,0x2D,0x33,0x38,0x3C,0x40,0x43,0x46,0x48,0x4A,0x4C,0x4E,0x50,0x64