Author: [email protected]
Date: Sat Mar 7 12:16:30 2009
New Revision: 837
Added:
trunk/include/external/lcd/lcd_dog_m_4.jal
trunk/include/external/lcd/lcd_dog_m_8.jal
trunk/include/external/lcd/lcd_dog_m_spi.jal
Removed:
trunk/include/external/lcd/lcd_st7036.jal
Log:
Include lcd dog-m, before named st7036, for spi, nibble and 8 bit.
i am also working on one file for dog-m including spi, nibble and 8bit in
one.
I would love to modify and cleanup lcd_hd44780_common and please let we
rename to lcd_common instead of lcd_hd44780_common so that we can use it
for maybe other (non hd448780) lcd's in the futher.
Added: trunk/include/external/lcd/lcd_dog_m_4.jal
==============================================================================
--- (empty file)
+++ trunk/include/external/lcd/lcd_dog_m_4.jal Sat Mar 7 12:16:30 2009
@@ -0,0 +1,194 @@
+-- ------------------------------------------------------
+-- Title: control for DOG-M (ST7036 based) LCD's
+--
+-- Author: Richard Zengerink, Copyright (c) 2008, all rights reserved
+-- Adapted-by:
+--
+-- Compiler: =2.4
+--
+-- This file is part of jallib (http://jallib.googlecode.com)
+-- Released under the ZLIB license
(http://www.opensource.org/licenses/zlib-license.html)
+--
+--
+--
+-- Description:
+-- Simple interface for DOG-M (st7036) alphanumeric LCD screens.
+-- Screens can range from 1x8 (1 lines, 8 chars), 2x16 and 3x16.
+-- Uses 4 bit wide datapath + 2 handshake lines (total 6 PIC pins).
+-- Expects: - 2 pins for handshake: 'lcd_rs' and 'lcd_en'
+-- - 1 port nibble for data: 'lcd_dataport'
+-- *
+-- Directions for use of this library in application programs
+-- (in this sequence):
+-- 1. Declare the following constants:
+-- const byte LCD_ROWS = 2 -- 1, 2 or 3 lines
+-- const byte LCD_CHARS = 16 -- 8, 16 chars per
line
+-- and variables (aliases):
+-- var byte lcd_dataport is portA_low -- 4 data pins
+-- var bit lcd_en is pin_A4 -- trigger
+-- var bit lcd_rs is pin_A5 -- cmd/data select
+-- 2. Include this library.
+-- and somewhere before actually using the lcd:
+-- 3. Set the chosen LCD dataport and handshake pins to output:
+-- portA_low_direction = all_output
+-- pin_A4_direction = output
+-- pin_A5_direction = output
+-- 4. Call lcd_init() to initialize the lcd controller.
+-- Above is an example for a 2x16 LCD:
+-- Bits 0..3 of portA are used for data, pins 4 and 5 of portA are
+-- used for handshake. Any other available nibble and handshake pins
+-- could be used (provided these are configurable for output).
+--
+-- Available functions for application programs:
+--
+--
+-- _lcd_writenibble(byte)
+
+
+
+-- _lcd_write(<byte>) sends byte from value to
+-- register of the lcd and
+-- shift cursor position 1
right
+--
+-- _lcd_write_data(<byte>) write data to lcd using
+-- _lcd_write(<byte>) lcd_rs
high
+--
+-- _lcd_write_data(<byte>) write command to lcd using
+-- _lcd_write(<byte>) lcd_rs
low
+--
+-- lcd_init() initialize the LCD
controller
+--
+--
+-- Dependencies: delay.jal
+--
+--
-----------------------------------------------------------------------------
+
+--
+-- Notes:
+--
+-- this type can be attached to your microcontroller serial with only 3 or
+-- 4 lines in total
+-- example type name: EA DOG-M
http://www.lcd-module.com/products/dog.html
+--
+
+include delay -- include standard delay lib
+--
+--
+--
+--
-----------------------------------------------------------------------------
+-- some constants to control the lcd
+--
-----------------------------------------------------------------------------
+const lcd_clear_display = 0b_0000_0001 -- long delay
+const lcd_return_home = 0b_0000_0010 -- long delay
+const lcd_display_onoff = 0b_0000_1000 -- short delay
+
+const lcd_cursor_shift_r_val = 0b_0001_0100
+const lcd_cursor_shift_l_val = 0b_0001_0000
+const lcd_display_shift_right = 0b_0001_1100
+const lcd_display_shift_left = 0b_0001_1000
+const lcd_set_ddram_address = 0b_1000_0000
+const lcd_set_cgram_address = 0b_0100_0000
+--
-----------------------------------------------------------------------------
+
+--
-----------------------------------------------------------------------------
+-- delay's necessary for initialisation and some commands
+--
-----------------------------------------------------------------------------
+const lcd_normal_delay = 3 -- delay in 10 usec units = 30uS
+const lcd_long_delay = 120 -- delay in 10 usec units = 1,2mS
+--
-----------------------------------------------------------------------------
+--
+--
+--
+
+-- ----------------------------------------------------------
+-- Send byte to the LCD as 2 nibbles (most significant nibble first)
+-- and automatically set the cursor one position right.
+-- ----------------------------------------------------------
+procedure _lcd_write(byte in value) is
+
+ lcd_dataport = (value >> 4)
+
+ lcd_en = high -- trigger on
+ asm nop -- delay (> 400 ns)
+ lcd_en = low -- trigger off
+
+ lcd_dataport = value -- replace low nibble
+ lcd_en = high -- trigger on
+ asm nop -- delay (> 400 ns)
+ lcd_en = low -- trigger off
+
+ delay_10uS(lcd_normal_delay) -- required normal
delay
+
+end procedure
+
+
+
+--
----------------------------------------------------------------------------
+-- sends data byte in value to LCD
+-- for slow commands an extra delay should be added --
+--
----------------------------------------------------------------------------
+procedure _lcd_write_data(byte in value) is
+ lcd_rs = high --
select instruction
+ _lcd_write( value ) -- output byte
+end procedure
+---------------------------------------------------------------------------
+
+
+--
----------------------------------------------------------------------------
+-- sends command byte in value to LCD
+-- for slow commands an extra delay should be added
+--
+--
----------------------------------------------------------------------------
+procedure _lcd_write_command(byte in value) is ;
+ pragma inline
+ lcd_rs = low -- select instruction
+ _lcd_write( value ) -- output byte
+
+ if value < 4 then -- "clear display' and
'return home'
+ delay_10uS( lcd_long_delay ) -- require extra delay
+ end if
+
+end procedure
+--
----------------------------------------------------------------------------
+
+
+
+-- now we defined the interface, add the API
+include lcd_hd44780_common
+
+
+--
----------------------------------------------------------------------------
+-- Initialize display in 1 ans 2 or 3 line, display on, no cursor shown an
cursor
+-- moves to the right.
+--
----------------------------------------------------------------------------
+procedure lcd_init() is
+ pragma inline
+ delay_1ms( 45 ) -- powerup delay for 45mS
+ if LCD_ROWS == 1 then
+ _lcd_write_command( 0b_0010_0000 ) -- function 4bit
N=0,5x7dots
+ _lcd_write_command( 0b_0010_0001 ) -- function 4bit
N=0,5x7dots
IS1=1
+ _lcd_write_command( 0b_0001_0100 ) -- BIAS 1 and 2 line
setting
+ end if
+ if LCD_ROWS == 2 then
+ _lcd_write_command( 0b_0010_1000 ) -- function 4bit
N=1,5x7dots
+ _lcd_write_command( 0b_0010_1001 ) -- function 4bit
N=1,5x7dots
IS1=1
+ _lcd_write_command( 0b_0001_0100 ) -- BIAS 1 and 2 line
setting
+ end if
+ if LCD_ROWS == 3 then
+ _lcd_write_command( 0b_0010_1000 ) -- function 4bit
N=1,5x7dots
+ _lcd_write_command( 0b_0010_1001 ) -- function 4bit
N=1,5x7dots
IS1=1
+ _lcd_write_command( 0b_0001_0101 ) -- BIAS 3 line setting
+ end if
+
+ _lcd_write_command( 0b_0111_0000 ) -- contrast set
+ _lcd_write_command( 0b_0101_1110 ) -- power/ICON/contrast
control
+ _lcd_write_command( 0b_0110_1010 ) -- follower control
+ delay_1ms( 210 ) -- extra delay to let display
settle
+
+ -- init the API
+ _hd44780_init()
+
+end procedure
+
+
+
Added: trunk/include/external/lcd/lcd_dog_m_8.jal
==============================================================================
--- (empty file)
+++ trunk/include/external/lcd/lcd_dog_m_8.jal Sat Mar 7 12:16:30 2009
@@ -0,0 +1,180 @@
+-- ------------------------------------------------------
+-- Title: control for DOG-M (ST7036 based) LCD's
+--
+-- Author: Richard Zengerink, Copyright (c) 2008, all rights reserved
+-- Adapted-by:
+--
+-- Compiler: =2.4
+--
+-- This file is part of jallib (http://jallib.googlecode.com)
+-- Released under the ZLIB license
(http://www.opensource.org/licenses/zlib-license.html)
+--
+--
+--
+-- Description:
+-- Simple interface for DOG-M (st7036) alphanumeric LCD screens.
+-- Screens can range from 1x8 (1 lines, 8 chars), 2x16 and 3x16.
+-- Uses 8 bit wide datapath + 2 handshake lines (total 10 PIC pins).
+-- Expects: - 2 pins for handshake: 'lcd_rs' and 'lcd_en'
+-- - 1 port for data: 'lcd_dataport'
+-- *
+-- Directions for use of this library in application programs
+-- (in this sequence):
+-- 1. Declare the following constants:
+-- const byte LCD_ROWS = 2 -- 1, 2 or 3 lines
+-- const byte LCD_CHARS = 16 -- 8, 16 chars per
line
+-- and variables (aliases):
+-- var byte lcd_dataport is portA -- 8 data pins
+-- var bit lcd_en is pin_b0 -- trigger
+-- var bit lcd_rs is pin_b1 -- cmd/data select
+-- 2. Include this library.
+-- and somewhere before actually using the lcd:
+-- 3. Set the chosen LCD dataport and handshake pins to output:
+-- portA_direction = all_output
+-- pin_b0_direction = output
+-- pin_b0_direction = output
+-- 4. Call lcd_init() to initialize the lcd controller.
+-- Above is an example for a 2x16 LCD:
+-- portA are is used for data, pins 0 and 1 of portB are
+-- used for handshake. Any other available port and handshake pins
+-- could be used (provided these are configurable for output).
+--
+-- Available functions for application programs:
+--
+--
+-- _lcd_write(<byte>) sends byte from value to
+-- register of the lcd and
+-- shift cursor position 1
right
+--
+-- _lcd_write_data(<byte>) write data to lcd using
+-- _lcd_write(<byte>) lcd_rs
high
+--
+-- _lcd_write_command(<byte>) write command to lcd using
+-- _lcd_write(<byte>) lcd_rs
low
+--
+-- lcd_init() initialize the LCD
controller
+--
+--
+-- Dependencies: delay.jal
+--
+--
-----------------------------------------------------------------------------
+
+--
+-- Notes:
+--
+-- this type can be attached to your microcontroller serial with only 3 or
+-- 4 lines in total
+-- example type name: EA DOG-M
http://www.lcd-module.com/products/dog.html
+--
+
+include delay -- include standard delay lib
+--
+--
+--
+--
-----------------------------------------------------------------------------
+-- some constants to control the lcd
+--
-----------------------------------------------------------------------------
+const lcd_clear_display = 0b_0000_0001 -- long delay
+const lcd_return_home = 0b_0000_0010 -- long delay
+const lcd_display_onoff = 0b_0000_1000 -- short delay
+
+const lcd_cursor_shift_r_val = 0b_0001_0100
+const lcd_cursor_shift_l_val = 0b_0001_0000
+const lcd_display_shift_right = 0b_0001_1100
+const lcd_display_shift_left = 0b_0001_1000
+const lcd_set_ddram_address = 0b_1000_0000
+const lcd_set_cgram_address = 0b_0100_0000
+--
-----------------------------------------------------------------------------
+
+--
-----------------------------------------------------------------------------
+-- delay's necessary for initialisation and some commands
+--
-----------------------------------------------------------------------------
+const lcd_normal_delay = 3 -- delay in 10 usec units = 30uS
+const lcd_long_delay = 120 -- delay in 10 usec units = 1,2mS
+--
-----------------------------------------------------------------------------
+--
+--
+-- ----------------------------------------------------------
+-- Send byte to the LCD and automatically set the cursor
+-- one position right.
+-- ----------------------------------------------------------
+procedure _lcd_write(byte in value) is
+ lcd_dataport = value -- replace low nibble
+ lcd_en = high -- trigger on
+ asm nop -- delay (> 400 ns)
+ lcd_en = low -- trigger off
+ delay_10uS(lcd_normal_delay) -- required normal delay
+end procedure
+
+
+
+--
----------------------------------------------------------------------------
+-- sends data byte in value to LCD
+-- for slow commands an extra delay should be added --
+--
----------------------------------------------------------------------------
+procedure _lcd_write_data(byte in value) is
+ lcd_rs = high --
select instruction
+ _lcd_write( value ) -- output byte
+end procedure
+---------------------------------------------------------------------------
+
+
+--
----------------------------------------------------------------------------
+-- sends command byte in value to LCD
+-- for slow commands an extra delay should be added
+--
+--
----------------------------------------------------------------------------
+procedure _lcd_write_command(byte in value) is ;
+ pragma inline
+ lcd_rs = low -- select instruction
+ _lcd_write( value ) -- output byte
+
+ if value < 4 then -- "clear display' and
'return home'
+ delay_10uS( lcd_long_delay ) -- require extra delay
+ end if
+
+end procedure
+--
----------------------------------------------------------------------------
+
+
+
+-- now we defined the interface, add the API
+include lcd_hd44780_common
+
+
+--
----------------------------------------------------------------------------
+-- Initialize display in 1 ans 2 or 3 line, display on, no cursor shown an
cursor
+-- moves to the right.
+--
----------------------------------------------------------------------------
+procedure lcd_init() is
+ pragma inline
+ delay_1ms( 45 ) -- powerup delay for 45mS
+ if LCD_ROWS == 1 then
+ _lcd_write_command( 0b_0011_0000 ) -- function 8bit
N=0,5x7dots
+ _lcd_write_command( 0b_0011_0001 ) -- function 8bit
N=0,5x7dots
IS1=1
+ _lcd_write_command( 0b_0001_0100 ) -- BIAS 1 and 2 line
setting
+ end if
+ if LCD_ROWS == 2 then
+ _lcd_write_command( 0b_0011_1000 ) -- function 8bit
N=1,5x7dots
+ _lcd_write_command( 0b_0011_1001 ) -- function 8bit
N=1,5x7dots
IS1=1
+ _lcd_write_command( 0b_0001_0100 ) -- BIAS 1 and 2 line
setting
+ end if
+ if LCD_ROWS == 3 then
+ _lcd_write_command( 0b_0011_1000 ) -- function 8bit
N=1,5x7dots
+ _lcd_write_command( 0b_0011_1001 ) -- function 8bit
N=1,5x7dots
IS1=1
+ _lcd_write_command( 0b_0001_0101 ) -- BIAS 3 line setting
+ end if
+
+
+ _lcd_write_command( 0b_0111_0000 ) -- contrast set
+ _lcd_write_command( 0b_0101_1110 ) -- power/ICON/contrast
control
+ _lcd_write_command( 0b_0110_1010 ) -- follower control
+ delay_1ms( 210 ) -- extra delay to let display
settle
+
+ -- init the API
+ _hd44780_init()
+
+end procedure
+
+
+
Added: trunk/include/external/lcd/lcd_dog_m_spi.jal
==============================================================================
--- (empty file)
+++ trunk/include/external/lcd/lcd_dog_m_spi.jal Sat Mar 7 12:16:30 2009
@@ -0,0 +1,187 @@
+-- ------------------------------------------------------
+-- Title: control for DOG-M (ST7036 based) LCD's
+--
+-- Author: Richard Zengerink, Copyright (c) 2008, all rights reserved
+-- Adapted-by:
+--
+-- Compiler: =2.4
+--
+-- This file is part of jallib (http://jallib.googlecode.com)
+-- Released under the ZLIB license
(http://www.opensource.org/licenses/zlib-license.html)
+--
+--
+--
+-- Description:
+-- Simple interface for DOG-M (st7036) alphanumeric LCD screens.
+-- Screens can range from 1x8 (1 lines, 8 chars), 2x16 and 3x16.
+-- Uses spi interface SI (data line), CLK (clock) RS (register select)
and
+-- if necesery CSB (chip select) (total 4 PIC pins max.).
+-- Expects: - 1 pin for data: 'lcd_data'
+-- - 1 pin for clock: 'lcd_clk'
+-- - 1 pin for register/data select: 'lcd_rs'
+-- - 1 pin for Chip Select 'lcd_csb' (if necesery, or CSB to
gnd on lcd)
+-- - 1 var bit named not_connected to assign to lcd_csb if
this pin
+-- is connected to ground.
+-- Directions for use of this library in application programs
+-- (in this sequence):
+-- 1. Declare the following constants:
+-- const byte LCD_ROWS = 2 -- 1, 2 or 3 lines
+-- const byte LCD_CHARS = 16 -- 8, or 16 chars per
line
+-- and variables (aliases):
+-- var bit not_connected
+-- var bit lcd_data is pin_A0 -- 1 data pin
+-- var bit lcd_clk is pin_A1 -- 1 data pin
+-- var bit lcd_rs is pin_A2 -- 1 data pin
+-- var bit lcd_csb is pin_A3 -- 1 data pin
+-- or if csb is connected to gnd:
+-- var bit lcd_csb is not_connected
+
+-- 2. Include this library.
+-- and somewhere before actually using the lcd:
+-- 3. Set the chosen LCD data and control pins to output:
+-- portA_low_direction = all_output (in above case this is OK)
+-- OR assign each pin seperatly (when not every pin is on the same
port):
+-- pin_A0_direction = output (each pin separately
assigned)
+-- pin_A1_direction = output
+-- pin_b0_direction = output
+-- pin_b1_direction = output
+-- 4. Call lcd_init() to initialize the lcd controller.
+-- Above is an example for a 2x16 LCD:
+--
+-- Available functions for application programs:
+--
+--
+-- _lcd_write(<byte>) ends byte from value to
+-- register of the lcd and
+-- shift cursor position 1
right
+--
+-- _lcd_write_data(<byte>) write data to lcd using
+-- _lcd_write(<byte>) lcd_rs
high
+--
+-- _lcd_write_data(<byte>) write command to lcd using
+-- _lcd_write(<byte>) lcd_rs
low
+--
+-- lcd_init() initialize the LCD
controller
+--
+--
+-- Dependencies: delay.jal
+--
+--
-----------------------------------------------------------------------------
+
+--
+-- Notes:
+--
+-- this type can be attached to your microcontroller serial with only 3 or
+-- 4 lines in total
+-- example type name: EA DOG-M
http://www.lcd-module.com/products/dog.html
+--
+--
+include delay -- include standard delay lib
+--
+--
+--
+--
-----------------------------------------------------------------------------
+-- some constants to control the lcd
+--
-----------------------------------------------------------------------------
+const lcd_clear_display = 0b_0000_0001 -- long delay
+const lcd_return_home = 0b_0000_0010 -- long delay
+const lcd_display_onoff = 0b_0000_1000 -- short delay
+
+const lcd_cursor_shift_r_val = 0b_0001_0100
+const lcd_cursor_shift_l_val = 0b_0001_0000
+const lcd_display_shift_right = 0b_0001_1100
+const lcd_display_shift_left = 0b_0001_1000
+const lcd_set_ddram_address = 0b_1000_0000
+const lcd_set_cgram_address = 0b_0100_0000
+--
-----------------------------------------------------------------------------
+
+--
-----------------------------------------------------------------------------
+-- delay's necessary for initialisation and some commands
+--
-----------------------------------------------------------------------------
+const lcd_normal_delay = 3 -- delay in 10 usec units = 30uS
+const lcd_long_delay = 120 -- delay in 10 usec units = 1,2mS
+--
-----------------------------------------------------------------------------
+--
+--
+--
----------------------------------------------------------------------------
+-- sends byte from value to register of the lcd
+-- (this procedure is only used inside this file)
+--
----------------------------------------------------------------------------
+procedure _lcd_write(byte in value) is
+ pragma inline
+ lcd_csb = low -- select lcd (wake him up)
+ for 8 loop -- loop for sending serial
information
+ var bit bit7 at value : 7
+ lcd_data = bit7
+ lcd_clk = high -- clock the data
+ asm nop -- delay (> 400 ns depending on
your xtal)
+ lcd_clk = low
+ value = value << 1 -- shift data to MSB
+ end loop
+ delay_10uS(lcd_normal_delay) -- required normal delay
+ lcd_csb = low -- unselect lcd (let him sleep)
+end procedure
+
+
+
+--
----------------------------------------------------------------------------
+-- sends data byte in value to LCD
+-- for slow commands an extra delay should be added --
+--
----------------------------------------------------------------------------
+procedure _lcd_write_data(byte in value) is
+ lcd_rs = high --
select instruction
+ _lcd_write( value ) -- output byte
+end procedure
+---------------------------------------------------------------------------
+
+
+--
----------------------------------------------------------------------------
+-- sends command byte in value to LCD
+-- for slow commands an extra delay should be added
+--
+--
----------------------------------------------------------------------------
+procedure _lcd_write_command(byte in value) is ;
+ pragma inline
+ lcd_rs = low -- select instruction
+ _lcd_write( value ) -- output byte
+
+ if value < 4 then -- "clear display' and
'return home'
+ delay_10uS( lcd_long_delay ) -- require extra delay
+ end if
+
+end procedure
+--
----------------------------------------------------------------------------
+
+
+
+-- now we defined the interface, add the API
+include lcd_hd44780_common
+
+
+--
----------------------------------------------------------------------------
+-- Initialize display in 1 ans 2 or 3 line, display on, no cursor shown an
cursor
+-- moves to the right.
+--
----------------------------------------------------------------------------
+procedure lcd_init() is
+ pragma inline
+ delay_1ms( 45 ) -- powerup delay for 45mS
+ _lcd_write_command( 0b_0011_0000 ) -- function 8bit
N=1,5x7dots
+ _lcd_write_command( 0b_0011_0001 ) -- function 8bit
N=1,5x7dots IS1=1
+ if LCD_ROWS == 3 then
+ _lcd_write_command( 0b_0001_0101 ) -- BIAS 3 line setting
+ else
+ _lcd_write_command( 0b_0001_0100 ) -- BIAS 1 and 2 line
setting
+ end if
+
+ _lcd_write_command( 0b_0111_0000 ) -- contrast set
+ _lcd_write_command( 0b_0101_1110 ) -- power/ICON/contrast
control
+ _lcd_write_command( 0b_0110_1010 ) -- follower control
+ delay_1ms( 210 ) -- extra delay to let display
settle
+
+ -- init the API
+ _hd44780_init()
+
+end procedure
+
+
+
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"jallib" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/jallib?hl=en
-~----------~----~----~----~------~----~------~--~---