ME Labs, Inc. 719-520-5323 |
ME Labs, Inc. | 1-719-520-5323 | Example Program - LCD_BIT_BANG.pbpPICBASIC PRO program to manually operate (without LCDOUT) an LCD in 4-bit mode with the PIC16F887 and LAB-X1.' Name : LCD_BIT_BANG.pbp ' Compiler : PICBASIC PRO Compiler 2.60 ' Assembler : PM or MPASM ' Target PIC : 40-pin 16F887 ' Hardware : LAB-X1 Experimenter Board ' Oscillator : 4MHz external crystal ' Keywords : LOOKUP, LCD BIT-BANG, LCD INITIALIZATION ' Description : PICBASIC PRO program to manually operate (without LCDOUT) ' an LCD in 4-bit mode with the PIC16F887 and LAB-X1. ' ' Alias LCD connections - any output pin can be used LCD_DB4 Var PORTD.4 ' LCD data bit 4 LCD_DB5 Var PORTD.5 ' LCD data bit 5 LCD_DB6 Var PORTD.6 ' LCD data bit 6 LCD_DB7 Var PORTD.7 ' LCD data bit 7 LCD_RS Var PORTE.0 ' LCD register select LCD_E Var PORTE.1 ' LCD enable LCD_RW Var PORTE.2 ' LCD read/write c Var Byte ' Variable to store character to send to the LCD i Var Byte ' Loop counter ANSEL = %00000000 ' Make AN0-AN7 digital ANSELH= %00000000 ' Make AN8-AN13 digital Pause 500 ' Wait for the LCD to power up Gosub lcdinit ' Initialize the LCD mainloop: Gosub lcdclr ' Clear the LCD screen For i = 0 to 4 ' Send string to the LCD one letter at a time Lookup i, ["Hello"], c ' Get letter from string to variable c Gosub lcddata ' Send data in c to the LCD Next i Pause 500 ' Wait .5 second Gosub lcdclr ' Clear the LCD screen c = $c0 ' Move to second line of display gosub lcdcom ' Send command in c to the LCD For i = 0 to 4 ' Send string to the LCD one letter at a time Lookup i, ["World"], c ' Get letter from string to variable c Gosub lcddata ' Send data in c to the LCD Next i Pause 500 ' Wait .5 second Goto mainloop ' Do it forever ' Subroutine to write the lower nibble to the LCD lcdlower: LCD_E = 1 ' Enabled LCD_DB4 = c.0 ' Write bit 0 to the LCD LCD_DB5 = c.1 ' Write bit 1 to the LCD LCD_DB6 = c.2 ' Write bit 2 to the LCD LCD_DB7 = c.3 ' Write bit 3 to the LCD Pauseus 1 ' Enable for at least 1us LCD_E = 0 ' Not enabled Return ' Subroutine to write the upper nibble to the LCD lcdupper: LCD_E = 1 ' Enabled LCD_DB4 = c.4 ' Write bit 4 to the LCD LCD_DB5 = c.5 ' Write bit 5 to the LCD LCD_DB6 = c.6 ' Write bit 6 to the LCD LCD_DB7 = c.7 ' Write bit 7 to the LCD Pauseus 1 ' Enable for at least 1us LCD_E = 0 ' Not enabled Return ' Subroutine to clear the LCD screen lcdclr: c = 1 ' Set c to clear command and fall through to lcdcom ' Subroutine to send a command to the LCD lcdcom: LCD_RS = 0 ' Set RS to command Gosub lcdupper ' Write upper nibble to the LCD Gosub lcdlower ' Write lower nibble to the LCD Pause 2 ' Wait command delay time, 2ms Return ' Subroutine to send data to the LCD lcddata: LCD_RS = 1 ' Set RS to data Gosub lcdupper ' Write upper nibble to the LCD Gosub lcdlower ' Write lower nibble to the LCD Pauseus 50 ' Wait data delay time, 50us Return ' Subroutine to initialize the LCD lcdinit: Low LCD_E ' Set all LCD I/O lines to output low Low LCD_RS Low LCD_RW Low LCD_DB4 Low LCD_DB5 Low LCD_DB6 Low LCD_DB7 Pauseus 15100 ' Wait at least 15ms c = $33 ' Initialize the LCD Gosub lcdupper ' Send to upper nibble only Pauseus 4200 ' Wait at least 4.1ms c = $33 ' Send it again Gosub lcdupper ' Send to upper nibble only Pauseus 100 ' Wait at least 100us c = $22 ' Put the LCD into 4 bit mode Gosub lcdupper ' Send to upper nibble only c = $28 ' 4 bit mode, 2 lines, 5x7 font Gosub lcdcom ' Send command in c to the LCD c = $0c ' LCD display on, no cursor, no blink Gosub lcdcom ' Send command in c to the LCD c = $01 ' Clear screen Gosub lcdcom ' Send command in c to the LCD c = $06 ' LCD entry mode set, increment, no shift Goto lcdcom ' Send command in c to the LCD and return End Download the program file. |
Copyright 2022 ME Labs, Inc. PO Box 8250 Asheville NC 28814 (719) 520-5323 (719) 520-1867 fax email: support@melabs.com |
|