• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16Fxxx的LCD驅動程序(適用于HD44780兼容

    PIC16Fxxx的LCD驅動程序(適用于HD44780兼容

    作者: 時間:2011-05-17 來源:網絡 收藏

    (的驅動器)

    本文引用地址:http://www.czjhyjcfj.com/article/150736.htm

    ;************************************************
    ;* .ASM *
    ;************************************************
    ;* Contains subroutines to control an external *
    ;* lcd panel in 4-bit mode. These routines *
    ;* were designed specifically for the panel on *
    ;* the MCU201 workshop demo board, but should *
    ;* work with other s with a type *
    ;* controller. *
    ;* Routines include: *
    ;* - InitLCD to initialize the LCD panel *
    ;* - putcLCD to write a character to LCD *
    ;* - SendCmd to write a command to LCD *
    ;* - clrLCD to clear the LCD display *
    ;* - L1homeLCD to return cursor to line 1 home*
    ;* - L2homeLCD to return cursor to line 2 home*
    ;* - PutHexLCD to write a HEX Code to LCD *
    ;* - Hex2ASCII to convert 4 bits to ASCII Code*
    ;************************************************
    ;
    list p=16f877
    #i nclude p16f877.inc>
    ;
    ; Defines for I/O ports that provide LCD data control
    ; PORTB.0 - PORTB.3 are Data Pins for LCD Module
    ; PORTB.4 is E Control Signal for LCD
    ; PORTB.5 is RS Control Signal for LCD
    ; PORTC.2 is BackLight Control pin for LCD Module
    ;
    global InitLCD
    global putcLCD
    global clrLCD
    global L1homeLCD
    global L2homeLCD
    global SendCmd
    global PutHexLCD
    global Hex2ASCII
    ;
    LCD_DATA equ PORTB
    LCD_CNTL equ PORTB

    ; Defines for I/O pins that provide LCD control
    RS equ 5
    E equ 4

    ; LCD Module commands
    DISP_ON EQU 0x00C ; Display on
    DISP_ON_C EQU 0x00E ; Display on, Cursor on
    DISP_ON_B EQU 0x00F ; Display on, Cursor on, Blink cursor
    DISP_OFF EQU 0x008 ; Display off
    CLR_DISP EQU 0x001 ; Clear the Display
    ENTRY_INC EQU 0x006 ;
    ENTRY_INC_S EQU 0x007 ;
    ENTRY_DEC EQU 0x004 ;
    ENTRY_DEC_S EQU 0x005 ;
    DD_RAM_ADDR EQU 0x080 ; Least Significant 7-bit are for address
    DD_RAM_UL EQU 0x080 ; Upper Left coner of the Display
    ;

    ; Directs linker to provide 4 variables in GPR memory
    UDATA
    Byte RES 1
    Byte1 RES 1
    Count RES 1
    Count1 RES 1
    W_BUFR RES 1
    Hex_Bfr RES 1
    ;
    PROG1 CODE
    ;*******************************************************************
    ;* The LCD Module Subroutines *
    ;* Command sequence for 2 lines of 5x16 characters *
    ;*******************************************************************
    InitLCD
    BANKSEL TRISB
    movlw 0xc0 ; Initialize inputs/outputs for LCD
    movwf TRISB
    BANKSEL LCD_DATA
    clrf LCD_DATA ; Clear LCD data control bits
    ;
    movlw .50 ; Power=On delay 50mS
    Call Delay_MS
    ;
    movlw 0x02 ; Init for 4-bit interface
    call Send_4bit
    movlw .10 ; Delay 10 mS
    Call Delay_MS
    ;
    movlw b'00000011' ; Fully Initial LCD module
    call Send_4bit ; Sent '0011' data 4 time
    movlw .5 ; Delay 5mS
    Call Delay_MS
    movlw b'00000011'
    call Send_4bit
    call Delay_1MS ; Delay 1mS
    movlw b'00000011'
    call Send_4bit
    movlw b'00000010'
    call Send_4bit
    ;
    movlw b'00101000' ; Set 2 lines 5 x 7 dots
    call SendCmd
    movlw DISP_ON ; Turn display on (0x0C)
    call SendCmd
    movlw ENTRY_INC ; Configure cursor movement
    call SendCmd
    movlw DD_RAM_ADDR ; Set writes for display memory
    call SendCmd
    return
    ;
    ;*******************************************************************
    ;*SendChar - Sends character to LCD *
    ;*This routine splits the character into the upper and lower *
    ;*nibbles and sends them to the LCD, upper nibble first. *
    ;*******************************************************************
    putcLCD
    banksel Byte
    movwf Byte ; Save WREG in Byte variable
    call Delay_1MS
    swapf Byte,W ; Write upper nibble first
    andlw 0x0f
    movwf LCD_DATA
    bsf LCD_CNTL, RS ; Set for data
    bsf LCD_CNTL, E ; Clock nibble into LCD
    bcf LCD_CNTL, E
    movf Byte,W ; Write lower nibble last
    andlw 0x0f
    movwf LCD_DATA
    bsf LCD_CNTL, RS ; Set for data
    bsf LCD_CNTL, E ; Clock nibble into LCD
    bcf LCD_CNTL, E
    return


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 方正县| 新和县| 卓尼县| 泸溪县| 山西省| 铁岭县| 印江| 宁化县| 根河市| 普陀区| 获嘉县| 莱州市| 鄂温| 两当县| 郧西县| 灵川县| 新宁县| 太康县| 黑龙江省| 佛冈县| 汨罗市| 北宁市| 汶川县| 宝清县| 福州市| 洪江市| 宝兴县| 乌什县| 图木舒克市| 鄯善县| 乌审旗| 白城市| 十堰市| 高雄县| 揭阳市| 中卫市| 晋中市| 乐至县| 多伦县| 龙江县| 梁山县|