Code:
' Code lines to be adapted according to 4 or 8 bits mode are marked " '// "
' LCD circuitry
'23,24,25,26,40 - Vdd (+5V)
'27,37,38 - Vss (GND)
'35 DB0 - PORTC.0
'34 DB1 - PORTC.1
'33 DB3 - PORTC.2
'32 DB4 - PORTC.3
'31 DB4 - PORTC.4
'30 DB5 - PORTC.5
'29 DB6 - PORTC.6
'28 DB7 - PORTC.7
'39 RS - PORTB.5
'36 E - PORTB.4
'-------------------------------------------------------------------------------
' Fuses
@ DEVICE PIC16F690,FCMEN_OFF
@ DEVICE PIC16F690,IESO_OFF
@ DEVICE PIC16F690,BOD_OFF
@ DEVICE PIC16F690,CPD_OFF
@ DEVICE PIC16F690,PROTECT_OFF
@ DEVICE PIC16F690,MCLR_OFF
@ DEVICE PIC16F690,PWRT_OFF
@ DEVICE PIC16F690,WDT_OFF
@ DEVICE PIC16F690,INTRC_OSC_NOCLKOUT
'-------------------------------------------------------------------------------
' Registers 76543210
OPTION_REG = %10000000 'PORT A&B Pull-Ups disabled (look WPUA & WPUB)
ANSEL = %00000000 'Disable analog inputs Channels 0 to 7
ANSELH = %00000000 'Disable analog inputs Channels 8 to 11
ADCON0 = %00000000 'A/D Module is OFF
CM1CON0 = %00000000 'Comparator1 Module is OFF
CM2CON0 = %00000000 'Comparator2 Module is OFF
INTCON = %00000000 'INTerrupts CONtrol
TRISA = %00000000 'Set Input/Output (0 to 5)
PORTA = %00000000 'Ports High/Low (0 to 5)
TRISB = %00000000 'Set Input/Output (4 to 7)
PORTB = %00000000 'Ports High/Low (4 to 7)
TRISC = %00000000 'Set Input/Output (0 to 7)
PORTC = %00000000 'Ports High/Low (0 to 7) - 8 bits
'//PORTC = %00001111 'Ports High/Low (0 to 7) - 4 bits
'-------------------------------------------------------------------------------
' Defines
DEFINE LCD_DREG PORTC 'LCD data port
DEFINE LCD_DBIT 0 'LCD data starting bit 0(8bits)
'//DEFINE LCD_DBIT 4 'LCD data starting bit (4 bits)
DEFINE LCD_RSREG PORTB 'LCD register select port
DEFINE LCD_RSBIT 5 'LCD register select bit
DEFINE LCD_EREG PORTB 'LCD enable port
DEFINE LCD_EBIT 4 'LCD enable bit
DEFINE LCD_BITS 8 'LCD bus size 8 bits
'//DEFINE LCD_BITS 4 'LCD bus size 4 bits
DEFINE LCD_LINES 2 'Number lines on LCD
'-------------------------------------------------------------------------------
' Variables
Contrast var byte
Contrastcommand var byte
'-------------------------------------------------------------------------------
' Init display
' COG Mandatory settings
pause 1000 'Time to settle Vdd (THIS IS VERY IMPORTANT!!!)
lcdout $FE, $39 'Function Set: 8 bits bus mode
'//lcdout $FE, $29 'Function Set: 4 bits bus mode
lcdout $FE, $1C 'Bias set
lcdout $FE, $52 'Power control + Contrast (HiByte)
lcdout $FE, $69 'Follower control
Lcdout $FE, $74 'Contrast (LowByte)
' COG Optional settings
'lcdout $FE, $38 'Function Set: switch back to instruction table 0
'lcdout $FE, $0F 'Display ON/OFF
'Lcdout $FE, $01 'Clear display
'Lcdout $FE, $06 'Entry Mode Set: cursor auto-increment
'lcdout $FE, $0F '%00001111 - Display ON, Cursor ON, Blink ON
'lcdout $FE, $0C '%00001100 - Display ON, Cursor OFF, Blink OFF
'-------------------------------------------------------------------------------
' Program
MAIN:
lcdout $FE, $70
LCDOUT $FE,1,"2 Lines Display",$FE,$C0,"EA DOGM-162L-A"
pause 1500
LCDout $FE,1, "contrast = ", $FE,$C0,"Hello Gerben ;-)"
For contrast = 0 to 15
contrastcommand = $70 + contrast
LCDout $FE, contrastcommand
pause 10
LCDout $FE,$8B, DEC2 contrast
pause 200
Next
pause 1500
goto main:
end
Bookmarks