色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16Fxxx的LCD驅(qū)動(dòng)程序(適用于HD44780兼容

          PIC16Fxxx的LCD驅(qū)動(dòng)程序(適用于HD44780兼容

          作者: 時(shí)間:2011-05-17 來源:網(wǎng)絡(luò) 收藏

          (的驅(qū)動(dòng)器)

          本文引用地址:http://cafeforensic.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 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉