; Picaxe Forum member - Anobium
;
; http://www.picaxeforum.co.uk/showthread.php?t=10014
; initial version svn 1.02
;
; Set the number of GoSubs to 256
;
#picaxe 18x
' Display pin 1 Vcc+ 3.2v
symbol SCLK = 0 'Display pin 2 to PICAXE out 0 (junction 6)
symbol SDA = 1 'Display pin 3 to PICAXE out 5 (junction 7)
symbol DC = 2 'Display pin 4 to PICAXE out 2 (junction 8)
symbol CS = 3 'Display pin 5 to PICAXE out 3 (junction 9)
' Display pin 6 gnd
' Display pin 7 Cap to Gnd 4.7uf electrolic
symbol RES = 4 'Display pin 8 to PICAXE out 6 (junction 10)
SYMBOL value = b0
SYMBOL width = b1
SYMBOL pointer = b2
SYMBOL X = b3
SYMBOL Y = b4
SYMBOL blinkstatus = b7
SYMBOL eeprom_addr = b5
SYMBOL GraphicData = b6
SYMBOL Loop1 = b10
SYMBOL loop3 = b12
SYMBOL SDA_PIN = outpin1 'outpin1 ************
Main:
SETFREQ m8
GOSUB InitLCD
; This is the only section that is required to be changed
; X = n is the x position on screen
; Y = n is the y position on screen
; Change the following line to match the length of our display string, FOR pointer = 0 TO N
; N equals the length of the string
; LookUp pointer,("Textstring"),value
; Textstring is the string to be dislayed
;
;
; *****************************************************************
; Display @ 0,0 Line 1
X=0
Y=0
GOSUB GotoXY
FOR pointer = 0 TO 14
LookUp pointer,("INIT COMPLETED"),value
GOSUB ValueToLCD
NEXT
; Line 2, no change to X, display on line 2
Y=1
GOSUB GotoXY
FOR pointer = 0 TO 14
LookUp pointer,("AWAITING SWITCH"),value
GOSUB ValueToLCD
NEXT
; Clear line 1
Y=0
GOSUB GotoXY
FOR pointer = 0 TO 20
LookUp pointer,(" "),value
GOSUB ValueToLCD
NEXT
; Some delay code
pause 5000
; Clear line
Y=1
GOSUB GotoXY
FOR pointer = 0 TO 22
LookUp pointer,(" "),value
GOSUB ValueToLCD
NEXT
huntingline:
; Display message
Y=0
X=0
GOSUB GotoXY
FOR pointer = 0 TO 14
LookUp pointer,("HUNTING LINE "),value
GOSUB ValueToLCD
NEXT
Y=1
X=0
GOSUB GotoXY
FOR pointer = 0 TO 19
LookUp pointer,("(((((((((())))))))))"),value
GOSUB ValueToLCD
NEXT
;Main body
; Removed code
; end of main body
blinky:
for pointer = 0 to 10
gosub blink
pause 1000
sertxd (#pointer, 13, 10)
next
gosub BlinkStar
goto huntingline
fin:
SETFREQ m4
STOP
END
Blink:
GOSUB GoToHome
low SDA
high DC
low CS
X=79
Y=5
GOSUB GotoXY
inc b7
low SCLK
if b7 = 1 then
value = 0
else
value = 255
b7 = 0
end if
GOSUB DataToLCD
GOSUB DataToLCD
GOSUB DataToLCD
GOSUB DataToLCD
GOSUB DataToLCD
high SCLK
Return
BlinkStar:
X=79
Y=5
GOSUB GotoXY
FOR pointer = 0 TO 1
LookUp pointer,("*"),value
GOSUB ValueToLCD
NEXT
Return
; version 1.01
;=====================================================================
; SUBROUTINES - Do not change. Refer to author
;---------------------------------------------------------------------
InitLCD:
LOW SCLK
LOW SDA
LOW DC
LOW CS
LOW RES
PAUSE 50
HIGH RES
HIGH CS
Value=$21 ; $21 ==> H=1 and function set = chip active, horiz addressing & extended instruction set
GOSUB CommandToLCD ; transmit To serial LCD module
Value=$08 ; Set HV multiplier = x 2. For $09 = x3 set Vop at ~$C6 otherwise gives black screen
GOSUB CommandToLCD ; transmit To serial LCD module
Value=$F0 ; set Vop with (PRS = 0 Vlcd = 2.94V TO 6.75V) If HV multiplier = $08 then use ~$C6
; $E0=5.28V, $F0=6.3V, $FF = 6.72V NOTE max allowed is 9V
GOSUB CommandToLCD ; transmit To serial LCD module
Value=$16 ; set bias: $16 ==> n=1 FOR mux rate 1:18 or 1:16 NOTE: n = 2 and n=5 DO NOT work
GOSUB CommandToLCD ; transmit To serial LCD module
Value=$06 ; set temperature coefficient = 2
GOSUB CommandToLCD ; transmit To serial LCD module
Value=$20 ; $20 ==> H=0 and function set = FOR basic instruction set
GOSUB CommandToLCD ; transmit To serial LCD module
Value=$0C ; display config = display non-inverted
GOSUB CommandToLCD ; transmit To serial LCD module
GOSUB GoToHome
GOSUB ClearFast
GOSUB GoToHome
GOSUB Normal
RETURN
;----------------------------------------------------
Invert:
Value = 13 ; invert the display light chars on dark background
GOSUB CommandToLCD
RETURN
;----------------------------------------------------
Normal:
Value = 12
GOSUB CommandToLCD
RETURN
;----------------------------------------------------
Blank:
Value = 8
GOSUB CommandToLCD
RETURN
;----------------------------------------------------
Allon:
Value = 9
GOSUB CommandToLCD
RETURN
;----------------------------------------------------
GoToHome:
X = 0
Y = 0
GotoXY:
Value = X + 128 ; 128 part = X address command
GOSUB CommandToLCD
Value = Y + 64 ; 64 part = Y address command
GOSUB CommandToLCD
RETURN
;----------------------------------------------------
CommandToLCD:
low DC 'Command mode
DataMode1:
low CS
SDA_PIN = bit7
PulsOut SCLK,1
SDA_PIN = bit6
PulsOut SCLK,1
SDA_PIN = bit5
PulsOut SCLK,1
SDA_PIN = bit4
PulsOut SCLK,1
SDA_PIN = bit3
PulsOut SCLK,1
SDA_PIN = bit2
PulsOut SCLK,1
SDA_PIN = bit1
PulsOut SCLK,1
SDA_PIN = bit0
PulsOut SCLK,1
high CS
Return
DataToLCD:
high DC 'Data mode
DataMode2:
low CS
SDA_PIN = bit7
PulsOut SCLK,1
SDA_PIN = bit6
PulsOut SCLK,1
SDA_PIN = bit5
PulsOut SCLK,1
SDA_PIN = bit4
PulsOut SCLK,1
SDA_PIN = bit3
PulsOut SCLK,1
SDA_PIN = bit2
PulsOut SCLK,1
SDA_PIN = bit1
PulsOut SCLK,1
SDA_PIN = bit0
PulsOut SCLK,1
high CS
return
;
;----------------------------------------------------
ValueToLCD:
eeprom_addr=0
IF Value>32 and Value <58 then
eeprom_addr=Value-33
eeprom_addr=eeprom_addr*5+130
ELSEIF Value>64 and Value <91 then
eeprom_addr=Value-65
eeprom_addr=eeprom_addr*5
ELSEIF Value=32 then
Value = 0
GOSUB DataToLCD
GOSUB DataToLCD
GOSUB DataToLCD
GOSUB DataToLCD
ENDIF
IF Value=0 then
RETURN
ENDIF
width = 4
read eeprom_addr, Value
IF value = 0 then ; found a narrow character
width = 2
inc eeprom_addr
ENDIF
FOR Loop1 = 0 TO width
read eeprom_addr, Value
inc eeprom_addr
GOSUB DataToLCD
NEXT Loop1
value = 0
GOSUB DataToLCD ; put a 1 bit space after each character for clarity
BaleOut: RETURN
;----------------------------------------------------
;----------------------------------------------------
ClearFast:
Gosub Blank
low SDA
high DC
low CS
For Loop1 = 1 To 48
For loop3 = 1 To 84
low SCLK
high SCLK
Next loop3
Next Loop1
high CS
Gosub Normal
Return
;----------------------------------------------------
eeprom 0,(0x7E, 0x11, 0x11, 0x11, 0x7E) ;A
eeprom (0x7F, 0x49, 0x49, 0x49, 0x36) ; B
eeprom (0x3E, 0x41, 0x41, 0x41, 0x22) ; C
eeprom (0x7F, 0x41, 0x41, 0x22, 0x1C) ; D
eeprom (0x7F, 0x49, 0x49, 0x49, 0x41) ; E
eeprom (0x7F, 0x09, 0x09, 0x09, 0x01) ; F
eeprom (0x3E, 0x41, 0x49, 0x49, 0x7A) ; G
eeprom (0x7F, 0x08, 0x08, 0x08, 0x7F) ; H
eeprom (0x00, 0x41, 0x7F, 0x41, 0x00) ; I
eeprom (0x20, 0x40, 0x41, 0x3F, 0x01) ; J
eeprom (0x7F, 0x08, 0x14, 0x22, 0x41) ; K
eeprom (0x7F, 0x40, 0x40, 0x40, 0x40) ; L
eeprom (0x7F, 0x02, 0x0C, 0x02, 0x7F) ; M
eeprom (0x7F, 0x04, 0x08, 0x10, 0x7F) ; N
eeprom (0x3E, 0x41, 0x41, 0x41, 0x3E) ; O
eeprom (0x7F, 0x09, 0x09, 0x09, 0x06) ; P
eeprom (0x3E, 0x41, 0x51, 0x21, 0x5E) ; Q
eeprom (0x7F, 0x09, 0x19, 0x29, 0x46) ; R
<snip>