[an error occurred while processing this directive]
|
Пошарил по форуму, нашёл пару схожил траблов, но советы не очень помогли. На граблях второй день прыгаю :)
ЖК от Powertip 320x240. Контроллер в сабже. Подключен к mcs-51й борде. CS посажён жёстко на землю. Управляю DATA, RD, WR, RESET. Doff в воздухе, но это не важно, т.к. дисплей активен. Дисплей реагирует только на RESET и нулевым битом D6.
Проблема: дисплей никак не реагирует на инит. На экране скнирующие полосы. Странно: при RD=1, RW=1 шина данных не освобождается (читается 0x01). Ресет я делаю три раза, длительный. Т.к. SEL1=SEL2=0, предполагаю что интерфейс 8080 (т.е. RD/RW а не 6800, в котором R/D,E). Навсякий случай проверил и его. По ДШ кажеться странным, что A0=1 на запись - это команда, а на чтение - данные (вместо флага статуса). Но вообщем я уже порядком вариантов перекрутил - не помогает.
Вообщем любые идеи - вэлкам!
Код процедуры:
==============
LCDInit: setb LCD_RD
setb LCD_WR
setb LCD_A0
mov LCD_DATA,#0FFh
mov B,#6
LCDInit_m1: clr LCD_RESET
mov R1,#0
mov R2,#0
lcd_res: djnz R1,lcd_res
djnz R2,lcd_res
setb LCD_RESET
djnz B,LCDInit_m1
mov A,#040h
call LCDWriteCR
mov A,#030h ;P1: 0_0_IV_1_W/S_M2_M1_M0
call LCDWriteDR
mov A,#087h ;P2: WF_0_0_0_0_FX_FX_FX
call LCDWriteDR
mov A,#007h ;P3: 0_0_0_0_FY_FY_FY_FY
call LCDWriteDR
mov A,#39 ;P4: C/R
call LCDWriteDR
mov A,#46 ;P5: TC/R 66 ???????????????
call LCDWriteDR
mov A,#239 ;P6: L/F
call LCDWriteDR
mov A,#40 ;P7: APL
call LCDWriteDR
mov A,#0 ;P8: APH
call LCDWriteDR
;------------
mov A,#044h ;SCROLL
call LCDWriteCR
mov A,#0
call LCDWriteDR
mov A,#0
call LCDWriteDR
mov A,#239
call LCDWriteDR
mov A,#080h
call LCDWriteDR
mov A,#025h
call LCDWriteDR
mov A,#239
call LCDWriteDR
mov A,#0
call LCDWriteDR
mov A,#04Bh
call LCDWriteDR
mov A,#0
call LCDWriteDR
mov A,#0h
call LCDWriteDR
;------------
mov A,#05Dh ;CSR FORM
call LCDWriteCR
mov A,#07h
call LCDWriteDR
mov A,#87h
call LCDWriteDR
;------------
mov A,#04Ch ;CSDIR
call LCDWriteCR
;-------------
mov A,#05Ah ;HDOT SCR
call LCDWriteCR
mov A,#0
call LCDWriteDR
;------------
mov A,#05Bh ;OVLAY
call LCDWriteCR
mov A,#0Dh
call LCDWriteDR
;------------
mov A,#059h ;0_1_0_1_1_0_0_D
call LCDWriteCR
mov A,#00010100b ;P1: FP5_FP4_FP3_FP2_FP1_FP0_FC1_FC0
call LCDWriteDR
;-------------
mov A,#046h
call LCDWriteCR
mov A,#0
call LCDWriteDR
mov A,#0
call LCDWriteDR
;-------------
mov A,#042h
call LCDWriteCR
mov B,#255
mm1: mov A,B
call LCDWriteDR
djnz B,mm1
ret
;------------------------------------------------------------------------------
;=== Write byte to LCD. Independed form RS state
;IN: A - byte
LCDWrite: mov LCD_DATA,A
setb LCD_RD
clr LCD_WR
setb LCD_WR
; mov LCD_DATA,#0FFh
ret
;=== Read byte from LCD. Independed form RS state
;OUT: A-byte
LCDRead: mov LCD_DATA,#0FFh
setb LCD_WR
clr LCD_RD
mov A,LCD_DATA
setb LCD_RD
ret
LCDWaitBF: clr LCD_A0
setb LCD_RD
mov LCD_DATA,#0FFh
clr LCD_RD
jb LCD_DATA.6,LCDWaitBF
setb LCD_RD
ret
;=== Write byte (ACC) to LCD data register
LCDWriteDR: call LCDWaitBF
clr LCD_A0
call LCDWrite
ret
;=== Write byte (ACC) to LCD command register
LCDWriteCR: call LCDWaitBF
setb LCD_A0
call LCDWrite
ret
;=== Read byte (ACC) from LCD data register
LCDReadDR: call LCDWaitBF
setb LCD_A0
call LCDRead
ret
;=== Read byte (ACC) from LCD command register
LCDReadCR: call LCDWaitBF
clr LCD_A0
call LCDRead
ret
E-mail: info@telesys.ru