首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
PIC16Fxxx的LCD驱动程序(适用于HD44780兼容
来源:本站整理  作者:佚名  2011-05-22 10:01:02



PIC16Fxxx的LCD驱动程序(适用于HD44780兼容的驱动器)

;************************************************
;* LCD.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 LCDs with a HD44780 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

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:66,035.16000 毫秒