Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Как да се инициализира диспеля като 16x1
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10853
Страница 1 от 1

Автор:  kostov [ Нед Дек 02, 2012 8:23 pm ]
Заглавие:  Как да се инициализира диспеля като 16x1

Какво трябва да се промени в инициализиращата подпрограма, за да работи 16х1 дисплеят в 16х1 режим. Програмата в микроконтролера PIC16F628A работи като за 16х1 дисплей, но дясната половина на изображението не се изобразява.
Код:
;
; *****************************************************************************
; *                                                                           *
; * Purpose:  Power on initialization of Liquid Crystal Display.  The LCD     *
; *           controller chip must be equivalent to an Hitachi 44780.  The    *
; *           LCD is assumed to be a 8x1 or a 16x1 display.                   *
; *                                                                           *
; *   Input:  None                                                            *
; *                                                                           *
; *  Output:  None                                                            *
; *                                                                           *
; *****************************************************************************
;

init_LCD
        call    wait_64ms         ; Wait for LCD to power up
        movlw   CMD_RESET_LCD     ; LCD init instruction (First)
        movwf   PORTB             ; Send to LCD via RB3..RB0
        bsf     PORTB,LCD_e       ; Set the LCD E line high,
        call    wait_64ms         ;   wait a "long" time,
        bcf     PORTB,LCD_e       ;   and then Clear E
        movlw   CMD_RESET_LCD     ; LCD init instruction (Second)
        movwf   PORTB             ; Send to LCD via RB3..RB0
        bsf     PORTB,LCD_e       ; Set E high,
        call    wait_32ms         ;   wait a while,
        bcf     PORTB,LCD_e       ;   and then Clear E
        movlw   CMD_RESET_LCD     ; LCD init instruction (Third)
        movwf   PORTB             ; Send to LCD via RB3..RB0
        bsf     PORTB,LCD_e       ; Set E high,
        call    wait_32ms         ;   wait a while,
        bcf     PORTB,LCD_e       ;   and then Clear E
        movlw   PICEL_IFC1        ; Set the LCD for 4-bit mode I/O
        movwf   PORTB             ; Send to LCD via RB3..RB0
        bsf     PORTB,LCD_e       ; Set E high,
        call    wait_16ms         ;   wait a while,
        bcf     PORTB,LCD_e       ;   and then Clear E
        movlw   PICEL_IFC2        ; Set operational characteristics of LCD
        call    cmnd2LCD          ; Send command in w to LCD
        movlw   PICEL_DISPLAY_OFF ; Display off, cursor and blink off
        call    cmnd2LCD          ; Send command to LCD
        movlw   CMD_CLEAR_LCD     ; Clear and reset cursor
        call    cmnd2LCD          ; Send command in w to LCD
        movlw   PICEL_CURSOR_RT   ; Set cursor to move right, no display shift
        call    cmnd2LCD          ; Send command in w to LCD

        movlw   PICEL_DISPLAY_ON  ; Display on, cursor on, blink off
        call    cmnd2LCD          ; Send command to LCD
        return                    ; Done!

Автор:  ji4ka [ Нед Дек 02, 2012 9:16 pm ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

Втората половина на дисплея започва на друг адрес , в даташита на дисплея трябва да се види изместването колко беше. Това не касае изнициализацията ,а адресацията на символите в дисплейния РАМ.

Автор:  ike [ Нед Дек 02, 2012 10:15 pm ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

Вторите 8 символа са на адрес 40(втори ред). Диспля трябва да се инициализира, като двуредов 5х8.

Автор:  kostov [ Нед Дек 02, 2012 11:14 pm ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

Ето го целият код, ако някой може да помогне къде и какво трябва да се промени:
Ето и datasheet-а на дисплея: AC161AYA

Прикачени файлове:
Коментар на файл: Сорс код (асемблер)
PEGen2-1f.rar [26.52 KiB]
149 пъти

Автор:  didofen [ Пон Дек 03, 2012 9:53 am ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

като прибавиш старшата единица, указваща адрес за индикация, става 0xC0

Автор:  kostov [ Пон Дек 03, 2012 8:27 pm ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

Понеже не разбирам от програмиране, моля ако може някой да преправи кода с необходимите промени.
Благодаря предварително!

Автор:  ji4ka [ Пон Дек 03, 2012 11:02 pm ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

Цитат:
Function: calibrate
;
; Purpose: This routine is entered at start up if the calibrate
; push button is (PIC-EL PB_1) is pressed at power-on time.
;
; If a 8-character LCD is used,"10000000" is displayed
; If a 16-character LCD is used," 10,000.000 CAL " is displayed

Какво ти се изписва при калибрацията с бутона? Последните 8 квадратчета светят ли? Светят - в смисъл да се виждат черните им точки при засилен контраст.

Автор:  kostov [ Пон Дек 03, 2012 11:28 pm ]
Заглавие:  Re: Как да се инициализира диспеля като 16x1

10,000. като най-лявата позиция е свободна. С контраста не съм пробвал, в момента съм зашил една по-нова версия на сорса и с нея работи нормално. При нея поне лесно се избира типа дисплей - с коментиране и откоментиране на съответен ред. Само функциите са малко по-други.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/