Hi Richard,

Good to hear from you again!
I think it is a good idea to add st7036 to jallib. The reason we did
not before is that it seemed not to be ready.

Could you explain what the relation between lcd_addition and lcd_st7036 is?
At first glance I see different groups of procedures in lcd_addition:

- _lcd_write_command - This seems to be a pretty low-level function
that fits better in lcd_st7036.
- procedures like clear_line, home etc. These seem to be dedicated to
lcd_st7036 (and won't work on other displays without a change). If
this is the case, I think it is better to make them part of lcd_st7036
and maybe someone can extend the other lcd libs also with this
functions.
- procedures like bvalue* and lcd_date. They look like generic
formatting functions, that could be used on any stream. Why do you use
format.jal or print.jal for this? IMHO we should not provide specific
procedures (in this case: print a byte in hex on lcd) while we have a
generic way to do so (and if you need something that could be generic
but is not available, we shoud add it there). But others may have a
different opinion...

Joep

2009/2/15  <[email protected]>:
>
> Author: [email protected]
> Date: Sun Feb 15 13:34:56 2009
> New Revision: 799
>
> Added:
>    trunk/include/external/lcd/lcd_addition.jal
> Modified:
>    trunk/include/external/lcd/lcd_st7036.jal
>
> Log:
> Changed to make compatible with hd44780 lcd so that lcd_st7036.jal can be
> used with print.jal and hd44780_x.jal with lcd_addition.jal.
> both are not yet tested.
> Consider to add lcd_st7036.jal to jallib because it is becoming commen
> (used this mounth in Elektor).
>
> Added: trunk/include/external/lcd/lcd_addition.jal
> ==============================================================================
> --- (empty file)
> +++ trunk/include/external/lcd/lcd_addition.jal Sun Feb 15 13:34:56 2009
> @@ -0,0 +1,630 @@
> +-- ------------------------------------------------------
> +-- Title: Addition procedures for hd44780 and st7036 lcd display's
> +--
> +-- Author: Richard Zengerink,  Copyright (c) 2009, 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: If you include this file after the lcd basic file like
> hd44780_4.jal
> +--              or st7036.jal, all procedures used in thes file works in
> the included
> +--              lcd
> +--
> +-- Sources:
> +--
> +-- Notes:
> +--
> +--
> +--
> +-- delay's necessary for initialisation and some commands
> +-- delay in 10 usec units
> +const LCD_SHORT_DELAY     = 5
> +-- delay in 10 usec units
> +const LCD_LONG_DELAY      = 18
> +
> +
> +
> +-- some constants to control the lcd
> +
> +const LCD_CLEAR_DISPLAY       = 0b_0000_0001
> +const LCD_RETURN_HOME         = 0b_0000_0010
> +
> +const LCD_DISPLAY_ONOFF       = 0b_0000_1000
> +
> +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_ADRESS   = 0b_1000_0000
> +
> +
> +var byte lcd_maxdigit
> +var byte lcd_nodigit
> +
> +
> +-- sends command byte in value to lcd
> +-- for slow commands an extra delay should be added
> +-- (this routine is only used inside this file)
> +procedure _lcd_write_command( byte in value ) is
> +   lcd_rs = LOW                  -- select instruction
> +   _lcd_write( value )                 -- output byte
> +   delay_10us(LCD_SHORT_DELAY )      -- required delay
> +   lcd_rs = HIGH
> +end procedure
> +
> +
> +
> +-- shifts the complete display one position to the left
> +procedure lcd_shift_left(byte in value) is
> +  -- set lcd back to normal operation
> +  if value != 0 then
> +      for value loop
> +          _lcd_write_command( LCD_DISPLAY_SHIFT_LEFT )
> +          delay_10us( LCD_SHORT_DELAY )
> +      end loop
> +  end if
> +end procedure
> +
> +
> +-- shifts the complete display one position to the right
> +procedure lcd_shift_right(byte in value) is
> +  if value != 0 then
> +      for value loop
> +          _lcd_write_command( LCD_DISPLAY_SHIFT_RIGHT )
> +          delay_10us( LCD_SHORT_DELAY )
> +      end loop
> +  end if
> +end procedure
> +
> +
> +-- shifts cursor one position to the left
> +procedure lcd_cursor_shift_left(byte in value) is
> +  if value != 0 then
> +      for value loop
> +          _lcd_write_command( LCD_CURSOR_SHIFT_L_VAL )
> +          delay_10us( LCD_SHORT_DELAY )
> +      end loop
> +  end if
> +end procedure
> +
> +
> +-- shifts cursor one position to the right
> +procedure lcd_cursor_shift_right(byte in value) is
> +  if value != 0 then
> +      for value loop
> +          _lcd_write_command( LCD_CURSOR_SHIFT_R_VAL )
> +          delay_10us( LCD_SHORT_DELAY )
> +      end loop
> +  end if
> +end procedure
> +
> +
> +
> +
> +-- sets or resets cursor blink and puts display on or off
> +procedure lcd_cursor_blink_display(bit in cursor,bit in blink,bit in
> display) is
> +  var byte register
> +
> +  register = LCD_DISPLAY_ONOFF
> +  if display then register = register + 4 end if
> +  if cursor  then register = register + 2 end if
> +  if blink   then register = register + 1 end if
> +  _lcd_write_command( register )
> +end procedure
> +
> +
> +-- cursor returns home(line 1, position 1)
> +procedure lcd_home()  is
> +  _lcd_write_command( LCD_RETURN_HOME )
> +  delay_10us( LCD_LONG_DELAY )
> +end procedure
> +
> +
> +-- clears the line "line" of the lcd
> +procedure lcd_clear_line( byte in line ) is
> +  -- set lcd-cursor at start of line
> +  if lcd_number_of_display_lines == 1 then    ; 1 line display
> +     lcd_pos = 0
> +     _lcd_restore_cursor()
> +     for 80 loop
> +         lcd_write_data( " " )
> +     end loop
> +  elsif lcd_number_of_display_lines == 2 then ; 2 line display
> +     if line == 1 then lcd_pos = 0 end if
> +     if line == 2 then lcd_pos = 0x40 end if
> +     _lcd_restore_cursor()
> +     for 40 loop
> +         lcd_write_data( " " )
> +     end loop
> +
> +  else -- 3 lines
> +     if     line == 1 then lcd_pos = 0        ; 3 line display
> +     elsif line == 2 then lcd_pos = 0x10
> +     else  line == 3 then lcd_pos = 0x20
> +     end if
> +     _lcd_restore_cursor()
> +     for 16 loop
> +         lcd_write_data( " " )
> +     end loop
> +  end if
> +  _lcd_restore_cursor()    ;set cursor at begin of deleted line
> +end procedure
> +
> +
> +-- Displays a progress bar
> +procedure lcd_progress(byte in line, byte in amount, byte in pattern) is
> +  if lcd_number_of_display_lines == 1 then    ; 1 line display
> +     lcd_pos = pos
> +  elsif lcd_number_of_display_lines == 2 then ; 2 line display
> +     if line == 1 then lcd_pos = 0 end if
> +     if line == 2 then lcd_pos = 0x40 end if
> +  else -- 3 lines
> +     if     line == 1 then lcd_pos = 0        ; 3 line display
> +     elsif line == 2 then lcd_pos = 0x10
> +     else  line == 3 then lcd_pos = 0x20
> +     end if
> +  end if
> +  _lcd_restore_cursor()
> +  for amount loop
> +      lcd_write_data( pattern )
> +  end loop
> +
> +  for ( lcd_number_of_display_characters - amount) loop
> +        lcd_write_data( " " )
> +  end loop
> +
> +end procedure
> +
> +
> +-- Displays a value (byte), white or without Decimal Point, on specified
> line
> +-- and position , non leading zero ,with or without left alignment, signed
> +-- or not signed.
> +procedure lcd_bvalue_dp_line_pos_left_sign( byte in value, byte in dp,
> byte in line, byte in poskar, bit in left, bit in sign ) is
> +   var byte digit0 = 0
> +   var byte digit1 = 0
> +   var byte digit2 = 0
> +   var bit negative = false
> +
> +   if sign then
> +      if value >= 128   then
> +         negative = true
> +         value = 128 - (value - 128)
> +      end if
> +   end if
> +
> +   while value >= 100 loop
> +      digit2 = digit2 + 1
> +      value = value - 100
> +   end loop
> +
> +   while value >= 10 loop
> +      digit1 = digit1 + 1
> +      value = value - 10
> +   end loop
> +
> +   digit0 = value
> +
> +   if digit2 == 0 & dp < 2 then
> +      digit2 = 32
> +   else
> +      digit2 = digit2 + 48
> +   end if
> +
> +   if digit1 == 0 & digit2 == 32 & dp < 1 then
> +      digit1 = 32
> +   else
> +      digit1 = digit1 + 48
> +   end if
> +
> +   digit0 = digit0 + 48
> +
> +
> +   lcd_new_line_cursor_position(line, poskar)
> +
> +   var bit decp = false
> +   var byte counter = 0
> +   lcd_nodigit = 0
> +
> +         for 5 loop
> +
> +          if negative then
> +             lcd_write_data("-")
> +             negative = false
> +             lcd_nodigit = lcd_nodigit + 1
> +          end if
> +
> +          if dp > 2 & !decp  then
> +             lcd_write_data(".")
> +             decp = true
> +             lcd_nodigit = lcd_nodigit + 1
> +          else
> +             if counter == 1 then
> +                if !left | digit2 != 32 then
> +                   lcd_write_data(digit2)
> +                   lcd_nodigit = lcd_nodigit + 1
> +                end if
> +             end if
> +             if counter == 2 then
> +                if !left | digit1 != 32 then
> +                   lcd_write_data(digit1)
> +                   lcd_nodigit = lcd_nodigit + 1
> +                end if
> +             end if
> +             if counter == 3 then
> +                if !left | digit0 != 32 then
> +                   lcd_write_data(digit0)
> +                   lcd_nodigit = lcd_nodigit + 1
> +                end if
> +             end if
> +             counter = counter + 1
> +          end if
> +
> +          if dp != 0 then
> +             dp = dp + 1
> +          end if
> +
> +       end loop
> +
> +       if lcd_nodigit > lcd_maxdigit then
> +          lcd_maxdigit = lcd_nodigit
> +       else
> +          while lcd_maxdigit > lcd_nodigit  loop
> +                lcd_write_data(32)
> +                lcd_maxdigit = lcd_maxdigit - 1
> +          end loop
> +       end if
> +
> +end procedure
> +
> +
> +-- Displays a value (word), white or without Decimal Point, on specified
> line
> +-- and position,  non leading zero ,with or without left alignment, signed
> +-- or not signed
> +procedure lcd_wvalue_dp_line_pos_left_sign( word in value, byte in dp,
> byte in line, byte in poskar, bit in left, bit in sign ) is
> +   var byte digit0 = 0   ;l
> +   var byte digit1 = 0   ;10
> +   var byte digit2 = 0   ;100
> +   var byte digit3 = 0   ;1000
> +   var byte digit4 = 0   ;10000
> +   var bit negative = false
> +
> +   if sign then
> +     if value >= 32768   then
> +        negative = true
> +        value = 32768 - (value - 32768)
> +     end if
> +   end if
> +
> +   while value >= 10000 loop
> +        digit4 = digit4 + 1
> +        value = value - 10000
> +   end loop
> +
> +   while value >= 1000 loop
> +        digit3 = digit3 + 1
> +        value = value - 1000
> +   end loop
> +
> +   while value >= 100 loop
> +        digit2 = digit2 + 1
> +        value = value - 100
> +   end loop
> +
> +   while value >= 10 loop
> +        digit1 = digit1 + 1
> +        value = value - 10
> +   end loop
> +
> +   digit0 = value
> +
> +   if digit4 == 0 & dp < 4 then
> +     digit4 = 32
> +   else
> +     digit4 = digit4 + 48
> +   end if
> +
> +   if digit3 == 0 & digit4 == 32 & dp < 3 then
> +     digit3 = 32
> +   else
> +     digit3 = digit3 + 48
> +   end if
> +
> +   if digit2 == 0 & digit3 == 32 & digit4 == 32 & dp < 2 then
> +     digit2 = 32
> +   else
> +     digit2 = digit2 + 48
> +   end if
> +
> +   if digit1 == 0 & digit2 == 32 & digit3 == 32 & digit4 == 32 & dp < 1
> then
> +     digit1 = 32
> +   else
> +     digit1 = digit1 + 48
> +   end if
> +
> +   digit0 = digit0 + 48
> +
> +   lcd_new_line_cursor_position(line, poskar)
> +
> +   var bit decp = false
> +   var byte counter = 0
> +   lcd_nodigit = 0
> +
> +   for 7 loop
> +
> +      if negative then
> +         lcd_write_data("-")
> +         negative = false
> +         lcd_nodigit = lcd_nodigit + 1
> +      end if
> +
> +      if dp > 5 & !decp  then
> +         lcd_write_data(".")
> +         decp = true
> +         lcd_nodigit = lcd_nodigit + 1
> +      else
> +         if counter == 1 then
> +            if !left | digit4 != 32 then
> +               lcd_write_data(digit4)
> +               lcd_nodigit = lcd_nodigit + 1
> +            end if
> +         end if
> +         if counter == 2 then
> +            if !left | digit3 != 32 then
> +               lcd_write_data(digit3)
> +               lcd_nodigit = lcd_nodigit + 1
> +            end if
> +         end if
> +         if counter == 3 then
> +            if !left | digit2 != 32 then
> +              lcd_write_data(digit2)
> +               lcd_nodigit = lcd_nodigit + 1
> +            end if
> +         end if
> +         if counter == 4 then
> +            if !left | digit1 != 32 then
> +               lcd_write_data(digit1)
> +               lcd_nodigit = lcd_nodigit + 1
> +            end if
> +         end if
> +         if counter == 5 then
> +            lcd_write_data(digit0)
> +            lcd_nodigit = lcd_nodigit + 1
> +         end if
> +         counter = counter + 1
> +      end if
> +
> +      if dp != 0 then
> +         dp = dp + 1
> +      end if
> +
> +   end loop
> +
> +   if lcd_nodigit > lcd_maxdigit then
> +      lcd_maxdigit = lcd_nodigit
> +   else
> +      while lcd_maxdigit > lcd_nodigit  loop
> +         lcd_write_data(32)
> +         lcd_maxdigit = lcd_maxdigit - 1
> +      end loop
> +   end if
> +
> +end procedure
> +
> +-- Displays a time (byte),
> +procedure lcd_time( byte in hrs, byte in minut, byte in second, byte in
> seperator ) is
> +   var byte hrs_digit0 = 0   ;l
> +   var byte hrs_digit1 = 0   ;10
> +   var byte minut_digit0 = 0   ;1
> +   var byte minut_digit1 = 0   ;10
> +   var byte second_digit0 = 0   ;1
> +   var byte second_digit1 = 0   ;10
> +
> +   while hrs >= 10 loop
> +      hrs_digit1 = hrs_digit1 + 1
> +      hrs = hrs - 10
> +   end loop
> +   hrs_digit0 = hrs + 48
> +   hrs_digit1 = hrs_digit1 + 48
> +   while minut >= 10 loop
> +      minut_digit1 = minut_digit1 + 1
> +      minut = minut - 10
> +   end loop
> +   minut_digit0 = minut +48
> +   minut_digit1 = minut_digit1 + 48
> +   while second >= 10 loop
> +      second_digit1 = second_digit1 + 1
> +      second = second - 10
> +   end loop
> +   second_digit0 = second + 48
> +   second_digit1 = second_digit1 + 48
> +
> +   lcd_write_data(hrs_digit1  )
> +   lcd_write_data(hrs_digit0)
> +   lcd_write_data(seperator)
> +   lcd_write_data(minut_digit1)
> +   lcd_write_data(minut_digit0)
> +   lcd_write_data(seperator)
> +   lcd_write_data(second_digit1)
> +   lcd_write_data(second_digit0)
> +
> +end procedure
> +
> +
> +-- Displays a date (byte),
> +procedure lcd_date( byte in day, byte in mounth, word in year, byte in
> seperator, bit in day_mounth_notation ) is
> +   var byte day_digit0 = 0   ;l
> +   var byte day_digit1 = 0   ;10
> +   var byte mounth_digit0 = 0   ;1
> +   var byte mounth_digit1 = 0   ;10
> +   var byte year_digit0 = 0   ;1
> +   var byte year_digit1 = 0   ;10
> +   var byte year_digit2 = 0   ;100
> +   var byte year_digit3 = 0   ;1000
> +   var word year_mem = year
> +
> +
> +   while day >= 10 loop
> +         day_digit1 = day_digit1 + 1
> +         day = day - 10
> +   end loop
> +   day_digit0 = day + 48
> +   day_digit1 = day_digit1 + 48
> +   while mounth >= 10 loop
> +         mounth_digit1 = mounth_digit1 + 1
> +         mounth = mounth - 10
> +   end loop
> +   mounth_digit0 = mounth +48
> +   mounth_digit1 = mounth_digit1 + 48
> +
> +   while year >= 1000 loop
> +         year_digit3 = year_digit3 + 1
> +         year = year - 1000
> +   end loop
> +
> +   while year >= 100 loop
> +         year_digit2 = year_digit2 + 1
> +         year = year - 100
> +   end loop
> +
> +   while year >= 10 loop
> +         year_digit1 = year_digit1 + 1
> +         year = year - 10
> +   end loop
> +   year_digit3 = year_digit3 + 48
> +   year_digit2 = year_digit2 + 48
> +   year_digit1 = year_digit1 + 48
> +   year_digit0 = year + 48
> +
> +   if !day_mounth_notation then
> +      lcd_write_data(mounth_digit1)
> +      lcd_write_data(mounth_digit0)
> +      lcd_write_data(seperator)
> +      lcd_write_data(day_digit1  )
> +      lcd_write_data(day_digit0)
> +      lcd_write_data(seperator)
> +   else
> +      lcd_write_data(day_digit1  )
> +      lcd_write_data(day_digit0)
> +      lcd_write_data(seperator)
> +      lcd_write_data(mounth_digit1)
> +      lcd_write_data(mounth_digit0)
> +      lcd_write_data(seperator)
> +   end if
> +
> +   if year_mem > 100 then
> +      lcd_write_data(year_digit3)
> +      lcd_write_data(year_digit2)
> +   else
> +      lcd_write_data("'")
> +   end if
> +
> +   lcd_write_data(year_digit1)
> +   lcd_write_data(year_digit0)
> +
> +end procedure
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a byte value in Hex,
> +--
> -----------------------------------------------------------------------------
> +procedure lcd_bvalue_hex ( byte in value) is
> +  var byte temp
> +   lcd_write_data ("0")
> +   lcd_write_data ("x")
> +   temp = value >> 4
> +   if temp < 10 then
> +      lcd_write_data (temp + 48)
> +   else
> +      lcd_write_data (temp + 55)
> +   end if
> +   value = value & 0b00001111
> +   if value < 10 then
> +      lcd_write_data (value + 48)
> +   else
> +      lcd_write_data (value + 55)
> +   end if
> +
> +end procedure
> +
> +--
> ----------------------------------------------------------------------------
> +
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a word value in Hex,
> +--
> -----------------------------------------------------------------------------
> +procedure lcd_wvalue_hex ( word in value) is
> +  var word temp
> +   lcd_write_data ("0")
> +   lcd_write_data ("x")
> +   temp = value >> 12
> +   if temp < 10 then
> +      lcd_write_data (temp + 48)
> +   else
> +      lcd_write_data (temp + 55)
> +   end if
> +   temp = value >> 8
> +   temp = temp & 0b00001111
> +   if temp < 10 then
> +      lcd_write_data (temp + 48)
> +   else
> +      lcd_write_data (temp + 55)
> +   end if
> +   temp = value >> 4
> +   temp = temp & 0b00001111
> +   if temp < 10 then
> +      lcd_write_data (temp + 48)
> +   else
> +      lcd_write_data (temp + 55)
> +   end if
> +   value = value & 0b0000000000001111
> +   if value < 10 then
> +      lcd_write_data (value + 48)
> +   else
> +      lcd_write_data (value + 55)
> +   end if
> +
> +end procedure
> +
> +--
> ----------------------------------------------------------------------------
> +
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a byte value in binairy,
> +--
> -----------------------------------------------------------------------------
> +procedure lcd_bvalue_bin ( byte in value) is
> +   var bit bit7 at value : 7
> +   lcd_write_data ("0")
> +   lcd_write_data ("b")
> +   for 8 loop
> +       if bit7 then
> +          lcd_write_data ("1")
> +       else
> +          lcd_write_data ("0")
> +       end if
> +       value = value << 1
> +   end loop
> +
> +end procedure
> +
> +--
> ----------------------------------------------------------------------------
> +
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a string
> +--
> -----------------------------------------------------------------------------
> +
> +procedure lcd_string( byte in string[]) is
> +   var word length = count(string)
> +   var byte counter
> +
> +   for length using counter loop
> +      lcd_write_data (string[counter])
> +   end loop
> +
> +end procedure
> +
> +
> +--
> ----------------------------------------------------------------------------
> +
>
> Modified: trunk/include/external/lcd/lcd_st7036.jal
> ==============================================================================
> --- trunk/include/external/lcd/lcd_st7036.jal   (original)
> +++ trunk/include/external/lcd/lcd_st7036.jal   Sun Feb 15 13:34:56 2009
> @@ -8,164 +8,99 @@
>  -- This file is part of jallib (http://jallib.googlecode.com)
>  -- Released under the ZLIB license
> (http://www.opensource.org/licenses/zlib-license.html)
>  --
> --- Description: Library for the control of ST7036 LCD's in spi, 4 line en
> 8 line mode
> +-- Description: Library for the control of ST7036 LCD's in spi mode
> +--
> +-- in your MAIN file you first need to assign the pins of the PIC how
> +-- they are connected to the lcd
> +-- then assign the number of rows (lines) and off course the number of
> characters
> +-- after this you need to include the lcd_st7036.jal file
> +-- see below a complete example.
> +--
> +--
> +-- var volatile bit lcd_data  is pin_d0
> +-- var volatile bit lcd_data_dir  is pin_d0_direction
> +-- var volatile bit lcd_clock  is pin_d1
> +-- var volatile bit lcd_rs is pin_d2   -- data/command select
> +-- var volatile bit lcd_csb  is pin_d3
> +--
> +--
> +-- const lcd_number_of_display_lines      = 2  ; 1,2,3
> +-- const lcd_number_of_display_characters = 16 ;
> +--
> +--
> +-- include lcd_st7036
> +--
> +--
> +--
>  --
>  -- Sources:
>  --
>  -- Notes:
>  --
> +-- this type can be attached to your microcontroller serial with only 4
> lines in total
>  --
> --- ------------------------------------------------------
> ---
> +-- example type name: EA DOG-M
> http://www.lcd-module.com/products/dog.html
>  --
> --- this type can be attached to your microcontroller parallel 4 or 8 line
> --- whiche makes a total of 7 to 11 lines or serial with only 4 lines in
> total
>  --
> --- example type name: EA DOG-M order at WWW.CONRAD.nl  order nr:181874
> +-- A pseudo byte variable 'lcd' is declared as alternative for
> lcd_writechar(<byte>)
> +-- copied from lcd_HD44780_4.jal and lcd_HD44780_8.jal from Rob Hamerling
> to make
> +-- this librarie compatible
> +-- So also here you an use "lcd = <byte>" in stead
> of "lcd_writechar(<byte>)"
>  --
> +-- And you may also use 'lcd' as destination in functions of other
> +-- libraries, like print().
>
> --- delay's necessary for initialisation and some commands
> --- delay in 10 usec units
> -const LCD_SHORT_DELAY     = 5
> --- delay in 10 usec units
> -const LCD_LONG_DELAY      = 18
> -
> -
> -
> --- some constants to control the lcd
> -
> -const LCD_CLEAR_DISPLAY       = 0b_0000_0001
> -const LCD_RETURN_HOME         = 0b_0000_0010
> -
> -const LCD_DISPLAY_ONOFF       = 0b_0000_1000
> -
> -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_ADRESS   = 0b_1000_0000
> -
> -
> -var byte lcd_maxdigit
> -var byte lcd_nodigit
> -
> -var volatile byte lcd_pos = 0
> -
> +include delay                    --  include standard delay lib
>
> --- generate clockpuls
> --- (this routine is only used inside this file)
> -procedure _lcd_clock()  is
> -     -- generate clockpuls
> -   if lcd_hardware == 4 | lcd_hardware == 8 then
> -      lcd_enable = high   -- enable high
> -      delay_10us(4)
> -      lcd_enable = low    -- enable  high --> low = clock data
> -   end if
> -
> -   if lcd_hardware == 1 then
> -      lcd_clk = high
> -      delay_10us( 4 )
> -      lcd_clk = low
> -   end if
> -end procedure
> -
> --- sends low nibble from value to the lcd
> --- can be used for both commands and data
> --- (requires no wait cycli inbetween upper and lower nibble)
> --- (this routine is only used inside this file)
> -procedure _lcd_write_low_nibble( byte in value ) is
> -  var bit bit0 at value : 0
> -  var bit bit1 at value : 1
> -  var bit bit2 at value : 2
> -  var bit bit3 at value : 3
> -
> -  -- setup databits
> -  lcd_d4 = bit0
> -  lcd_d5 = bit1
> -  lcd_d6 = bit2
> -  lcd_d7 = bit3
> -
> -  -- generate clockpuls
> -  _lcd_clock()
> -end procedure
> -
> -
> --- sends byte from value to register of the lcd
> +--
> +--
> +-- sends byte from value to the lcd
>  -- (this procedure is only used inside this file)
>  procedure _lcd_write( byte in value ) is
>     pragma inline
> -   lcd_rw = low                   -- select write mode
> -   lcd_csb = low
> -   if lcd_hardware == 4 then
> -      _lcd_write_low_nibble( value >> 4 ) -- output high nibble
> -      _lcd_write_low_nibble( value )      -- output low nibble
> -   end if
> -   if lcd_hardware == 8 then
> -       var bit bit0 at value : 0
> -       var bit bit1 at value : 1
> -       var bit bit2 at value : 2
> -       var bit bit3 at value : 3
> -       var bit bit4 at value : 4
> -       var bit bit5 at value : 5
> -       var bit bit6 at value : 6
> -       var bit bit7 at value : 7
> -
> -        -- setup databits
> -       lcd_d0 = bit0
> -       lcd_d1 = bit1
> -       lcd_d2 = bit2
> -       lcd_d3 = bit3
> -       lcd_d4 = bit4
> -       lcd_d5 = bit5
> -       lcd_d6 = bit6
> -       lcd_d7 = bit7
> -
> -       _lcd_clock()
> -   end if
> -
> -   if lcd_hardware == 1 then
> +   lcd_csb = LOW
>        for 8 loop
>            var bit bit7 at value : 7
>            lcd_data = bit7
> -          _lcd_clock()
> +          lcd_clk = HIGH
> +          delay_10us( 4 )
> +          lcd_clk = LOW
>            value = value << 1
>        end loop
> -
> -   end if
> -   lcd_csb = high
> +    lcd_csb = HIGH
>  end procedure
> -
> -
> +--
> +--
>  -- sends data byte in value to lcd
> -procedure lcd_write_data( byte in value ) is
> -   lcd_rs = high                   -- select instruction
> +procedure lcd_writechar( byte in value ) is
>     _lcd_write( value )                 -- output byte
> -   delay_10us( LCD_SHORT_DELAY )      -- required delay
> +   delay_10us( 5 )      -- required delay
>  end procedure
> -
> -
> --- sends command byte in value to lcd
> --- for slow commands an extra delay should be added
> --- (this routine is only used inside this file)
> -procedure _lcd_write_command( byte in value ) is
> -   lcd_rs = low                   -- select instruction
> -   _lcd_write( value )                 -- output byte
> -   delay_10us(LCD_SHORT_DELAY )      -- required delay
> +--
> +--
> +-- ----------------------------------------------------------
> +-- Pseudo variable 'lcd' as alternative for lcd_writechar(<byte>)
> +-- copy from lcd_hd44780_x lib to make it compatible
> +-- ----------------------------------------------------------
> +procedure  lcd'put(byte in value) is
> +   lcd_writechar(value)
>  end procedure
> -
> -
> --- sets the cursor of the lcd to the position in the shadow register
> --- (this routine is only used inside this file)
> -procedure _lcd_restore_cursor() is
> -  _lcd_write_command( LCD_SET_DDRAM_ADRESS | lcd_pos )
> +--
> +--
> +-- clears the lcd
> +procedure lcd_clearscreen()  is
> +   lcd_rs = LOW                   -- select instruction
> +   lcd_writechar(0b0000_0001)
> +   delay_10us( 18 )
> +   lcd_rs = HIGH
>  end procedure
>
>
>  -- sets the cursor of the lcd on "pos" position in line "line" in the
> shadow register
> -procedure lcd_new_line_cursor_position(byte in line, byte in pos) is
> -  pos = pos -1
> -  if lcd_number_of_display_lines == 1 then
> +-- starting with line 0 position 0
> +procedure lcd_setcursor(byte in line, byte in pos) is
> + var volatile byte lcd_pos
> + if lcd_number_of_display_lines == 1 then
>       lcd_pos = pos
>
>    elsif lcd_number_of_display_lines == 2 then
> @@ -175,666 +110,64 @@
>             lcd_pos = pos + 0x40
>          end if
>    else -- 3 lines
> -        if    line == 1 then lcd_pos = pos
> -        elsif line == 2 then lcd_pos = pos + 0x10
> -        else  line == 3 then lcd_pos = pos + 0x20
> +        if    line == 0 then lcd_pos = pos
> +        elsif line == 1 then lcd_pos = pos + 0x10
> +        else  line == 2 then lcd_pos = pos + 0x20
>          end if
>    end if
> -
> -  _lcd_restore_cursor()
> -end procedure
> -
> -
> --- shifts the complete display one position to the left
> -procedure lcd_shift_left(byte in value) is
> -  -- set lcd back to normal operation
> -  if value != 0 then
> -      for value loop
> -          _lcd_write_command( LCD_DISPLAY_SHIFT_LEFT )
> -          delay_10us( LCD_SHORT_DELAY )
> -      end loop
> -  end if
> -end procedure
> -
> -
> --- shifts the complete display one position to the right
> -procedure lcd_shift_right(byte in value) is
> -  if value != 0 then
> -      for value loop
> -          _lcd_write_command( LCD_DISPLAY_SHIFT_RIGHT )
> -          delay_10us( LCD_SHORT_DELAY )
> -      end loop
> -  end if
> -end procedure
> -
> -
> --- shifts cursor one position to the left
> -procedure lcd_cursor_shift_left(byte in value) is
> -  if value != 0 then
> -      for value loop
> -          _lcd_write_command( LCD_CURSOR_SHIFT_L_VAL )
> -          delay_10us( LCD_SHORT_DELAY )
> -      end loop
> -  end if
> -end procedure
> -
> -
> --- shifts cursor one position to the right
> -procedure lcd_cursor_shift_right(byte in value) is
> -  if value != 0 then
> -      for value loop
> -          _lcd_write_command( LCD_CURSOR_SHIFT_R_VAL )
> -          delay_10us( LCD_SHORT_DELAY )
> -      end loop
> -  end if
> -end procedure
> -
> -
> --- clears the lcd
> -procedure lcd_clear()  is
> -  _lcd_write_command( LCD_CLEAR_DISPLAY )
> -  delay_10us( LCD_LONG_DELAY )
> +   lcd_rs = LOW
> +   lcd_writechar(0b_1000_0000 | lcd_pos)
> +   lcd_rs = HIGH
>  end procedure
>
>
> --- sets or resets cursor blink and puts display on or off
> -procedure lcd_cursor_blink_display(bit in cursor,bit in blink,bit in
> display) is
> -  var byte register
> -
> -  register = LCD_DISPLAY_ONOFF
> -  if display then register = register + 4 end if
> -  if cursor  then register = register + 2 end if
> -  if blink   then register = register + 1 end if
> -  _lcd_write_command( register )
> -end procedure
> -
> -
> --- cursor returns home(line 1, position 1)
> -procedure lcd_home()  is
> -  _lcd_write_command( LCD_RETURN_HOME )
> -  delay_10us( LCD_LONG_DELAY )
> -end procedure
> -
> -
> --- clears the line "line" of the lcd
> -procedure lcd_clear_line( byte in line ) is
> -  -- set lcd-cursor at start of line
> -  if lcd_number_of_display_lines == 1 then    ; 1 line display
> -     lcd_pos = 0
> -     _lcd_restore_cursor()
> -     for 80 loop
> -         lcd_write_data( " " )
> -     end loop
> -  elsif lcd_number_of_display_lines == 2 then ; 2 line display
> -     if line == 1 then lcd_pos = 0 end if
> -     if line == 2 then lcd_pos = 0x40 end if
> -     _lcd_restore_cursor()
> -     for 40 loop
> -         lcd_write_data( " " )
> -     end loop
> -
> -  else -- 3 lines
> -     if     line == 1 then lcd_pos = 0        ; 3 line display
> -     elsif line == 2 then lcd_pos = 0x10
> -     else  line == 3 then lcd_pos = 0x20
> -     end if
> -     _lcd_restore_cursor()
> -     for 16 loop
> -         lcd_write_data( " " )
> -     end loop
> -  end if
> -  _lcd_restore_cursor()    ;set cursor at begin of deleted line
> -end procedure
> -
> -
> --- Displays a progress bar
> -procedure lcd_progress(byte in line, byte in amount, byte in pattern) is
> -  if lcd_number_of_display_lines == 1 then    ; 1 line display
> -     lcd_pos = pos
> -  elsif lcd_number_of_display_lines == 2 then ; 2 line display
> -     if line == 1 then lcd_pos = 0 end if
> -     if line == 2 then lcd_pos = 0x40 end if
> -  else -- 3 lines
> -     if     line == 1 then lcd_pos = 0        ; 3 line display
> -     elsif line == 2 then lcd_pos = 0x10
> -     else  line == 3 then lcd_pos = 0x20
> -     end if
> -  end if
> -  _lcd_restore_cursor()
> -  for amount loop
> -      lcd_write_data( pattern )
> -  end loop
> -
> -  for ( lcd_number_of_display_characters - amount) loop
> -        lcd_write_data( " " )
> -  end loop
> -
> -end procedure
> -
> -
> --- Displays a value (byte), white or without Decimal Point, on specified
> line
> --- and position , non leading zero ,with or without left alignment, signed
> --- or not signed.
> -procedure lcd_bvalue_dp_line_pos_left_sign( byte in value, byte in dp,
> byte in line, byte in poskar, bit in left, bit in sign ) is
> -   var byte digit0 = 0
> -   var byte digit1 = 0
> -   var byte digit2 = 0
> -   var bit negative = false
> -
> -   if sign then
> -      if value >= 128   then
> -         negative = true
> -         value = 128 - (value - 128)
> -      end if
> -   end if
> -
> -   while value >= 100 loop
> -      digit2 = digit2 + 1
> -      value = value - 100
> -   end loop
> -
> -   while value >= 10 loop
> -      digit1 = digit1 + 1
> -      value = value - 10
> -   end loop
> -
> -   digit0 = value
> -
> -   if digit2 == 0 & dp < 2 then
> -      digit2 = 32
> -   else
> -      digit2 = digit2 + 48
> -   end if
> -
> -   if digit1 == 0 & digit2 == 32 & dp < 1 then
> -      digit1 = 32
> -   else
> -      digit1 = digit1 + 48
> -   end if
> -
> -   digit0 = digit0 + 48
> -
> -
> -   lcd_new_line_cursor_position(line, poskar)
> -
> -   var bit decp = false
> -   var byte counter = 0
> -   lcd_nodigit = 0
> -
> -         for 5 loop
> -
> -          if negative then
> -             lcd_write_data("-")
> -             negative = false
> -             lcd_nodigit = lcd_nodigit + 1
> -          end if
> -
> -          if dp > 2 & !decp  then
> -             lcd_write_data(".")
> -             decp = true
> -             lcd_nodigit = lcd_nodigit + 1
> -          else
> -             if counter == 1 then
> -                if !left | digit2 != 32 then
> -                   lcd_write_data(digit2)
> -                   lcd_nodigit = lcd_nodigit + 1
> -                end if
> -             end if
> -             if counter == 2 then
> -                if !left | digit1 != 32 then
> -                   lcd_write_data(digit1)
> -                   lcd_nodigit = lcd_nodigit + 1
> -                end if
> -             end if
> -             if counter == 3 then
> -                if !left | digit0 != 32 then
> -                   lcd_write_data(digit0)
> -                   lcd_nodigit = lcd_nodigit + 1
> -                end if
> -             end if
> -             counter = counter + 1
> -          end if
> -
> -          if dp != 0 then
> -             dp = dp + 1
> -          end if
> -
> -       end loop
> -
> -       if lcd_nodigit > lcd_maxdigit then
> -          lcd_maxdigit = lcd_nodigit
> -       else
> -          while lcd_maxdigit > lcd_nodigit  loop
> -                lcd_write_data(32)
> -                lcd_maxdigit = lcd_maxdigit - 1
> -          end loop
> -       end if
> -
> -end procedure
> -
> -
> --- Displays a value (word), white or without Decimal Point, on specified
> line
> --- and position,  non leading zero ,with or without left alignment, signed
> --- or not signed
> -procedure lcd_wvalue_dp_line_pos_left_sign( word in value, byte in dp,
> byte in line, byte in poskar, bit in left, bit in sign ) is
> -   var byte digit0 = 0   ;l
> -   var byte digit1 = 0   ;10
> -   var byte digit2 = 0   ;100
> -   var byte digit3 = 0   ;1000
> -   var byte digit4 = 0   ;10000
> -   var bit negative = false
> -
> -   if sign then
> -     if value >= 32768   then
> -        negative = true
> -        value = 32768 - (value - 32768)
> -     end if
> -   end if
> -
> -   while value >= 10000 loop
> -        digit4 = digit4 + 1
> -        value = value - 10000
> -   end loop
> -
> -   while value >= 1000 loop
> -        digit3 = digit3 + 1
> -        value = value - 1000
> -   end loop
> -
> -   while value >= 100 loop
> -        digit2 = digit2 + 1
> -        value = value - 100
> -   end loop
> -
> -   while value >= 10 loop
> -        digit1 = digit1 + 1
> -        value = value - 10
> -   end loop
> -
> -   digit0 = value
> -
> -   if digit4 == 0 & dp < 4 then
> -     digit4 = 32
> -   else
> -     digit4 = digit4 + 48
> -   end if
> -
> -   if digit3 == 0 & digit4 == 32 & dp < 3 then
> -     digit3 = 32
> -   else
> -     digit3 = digit3 + 48
> -   end if
> -
> -   if digit2 == 0 & digit3 == 32 & digit4 == 32 & dp < 2 then
> -     digit2 = 32
> -   else
> -     digit2 = digit2 + 48
> -   end if
> -
> -   if digit1 == 0 & digit2 == 32 & digit3 == 32 & digit4 == 32 & dp < 1
> then
> -     digit1 = 32
> -   else
> -     digit1 = digit1 + 48
> -   end if
> -
> -   digit0 = digit0 + 48
> -
> -   lcd_new_line_cursor_position(line, poskar)
> -
> -   var bit decp = false
> -   var byte counter = 0
> -   lcd_nodigit = 0
> -
> -   for 7 loop
> -
> -      if negative then
> -         lcd_write_data("-")
> -         negative = false
> -         lcd_nodigit = lcd_nodigit + 1
> -      end if
> -
> -      if dp > 5 & !decp  then
> -         lcd_write_data(".")
> -         decp = true
> -         lcd_nodigit = lcd_nodigit + 1
> -      else
> -         if counter == 1 then
> -            if !left | digit4 != 32 then
> -               lcd_write_data(digit4)
> -               lcd_nodigit = lcd_nodigit + 1
> -            end if
> -         end if
> -         if counter == 2 then
> -            if !left | digit3 != 32 then
> -               lcd_write_data(digit3)
> -               lcd_nodigit = lcd_nodigit + 1
> -            end if
> -         end if
> -         if counter == 3 then
> -            if !left | digit2 != 32 then
> -              lcd_write_data(digit2)
> -               lcd_nodigit = lcd_nodigit + 1
> -            end if
> -         end if
> -         if counter == 4 then
> -            if !left | digit1 != 32 then
> -               lcd_write_data(digit1)
> -               lcd_nodigit = lcd_nodigit + 1
> -            end if
> -         end if
> -         if counter == 5 then
> -            lcd_write_data(digit0)
> -            lcd_nodigit = lcd_nodigit + 1
> -         end if
> -         counter = counter + 1
> -      end if
> -
> -      if dp != 0 then
> -         dp = dp + 1
> -      end if
> -
> -   end loop
> -
> -   if lcd_nodigit > lcd_maxdigit then
> -      lcd_maxdigit = lcd_nodigit
> -   else
> -      while lcd_maxdigit > lcd_nodigit  loop
> -         lcd_write_data(32)
> -         lcd_maxdigit = lcd_maxdigit - 1
> -      end loop
> -   end if
> -
> -end procedure
> -
> --- Displays a time (byte),
> -procedure lcd_time( byte in hrs, byte in minut, byte in second, byte in
> seperator ) is
> -   var byte hrs_digit0 = 0   ;l
> -   var byte hrs_digit1 = 0   ;10
> -   var byte minut_digit0 = 0   ;1
> -   var byte minut_digit1 = 0   ;10
> -   var byte second_digit0 = 0   ;1
> -   var byte second_digit1 = 0   ;10
> -
> -   while hrs >= 10 loop
> -      hrs_digit1 = hrs_digit1 + 1
> -      hrs = hrs - 10
> -   end loop
> -   hrs_digit0 = hrs + 48
> -   hrs_digit1 = hrs_digit1 + 48
> -   while minut >= 10 loop
> -      minut_digit1 = minut_digit1 + 1
> -      minut = minut - 10
> -   end loop
> -   minut_digit0 = minut +48
> -   minut_digit1 = minut_digit1 + 48
> -   while second >= 10 loop
> -      second_digit1 = second_digit1 + 1
> -      second = second - 10
> -   end loop
> -   second_digit0 = second + 48
> -   second_digit1 = second_digit1 + 48
> -
> -   lcd_write_data(hrs_digit1  )
> -   lcd_write_data(hrs_digit0)
> -   lcd_write_data(seperator)
> -   lcd_write_data(minut_digit1)
> -   lcd_write_data(minut_digit0)
> -   lcd_write_data(seperator)
> -   lcd_write_data(second_digit1)
> -   lcd_write_data(second_digit0)
> -
> -end procedure
> -
> -
> --- Displays a date (byte),
> -procedure lcd_date( byte in day, byte in mounth, word in year, byte in
> seperator, bit in day_mounth_notation ) is
> -   var byte day_digit0 = 0   ;l
> -   var byte day_digit1 = 0   ;10
> -   var byte mounth_digit0 = 0   ;1
> -   var byte mounth_digit1 = 0   ;10
> -   var byte year_digit0 = 0   ;1
> -   var byte year_digit1 = 0   ;10
> -   var byte year_digit2 = 0   ;100
> -   var byte year_digit3 = 0   ;1000
> -   var word year_mem = year
> -
> -
> -   while day >= 10 loop
> -         day_digit1 = day_digit1 + 1
> -         day = day - 10
> -   end loop
> -   day_digit0 = day + 48
> -   day_digit1 = day_digit1 + 48
> -   while mounth >= 10 loop
> -         mounth_digit1 = mounth_digit1 + 1
> -         mounth = mounth - 10
> -   end loop
> -   mounth_digit0 = mounth +48
> -   mounth_digit1 = mounth_digit1 + 48
> -
> -   while year >= 1000 loop
> -         year_digit3 = year_digit3 + 1
> -         year = year - 1000
> -   end loop
> -
> -   while year >= 100 loop
> -         year_digit2 = year_digit2 + 1
> -         year = year - 100
> -   end loop
> -
> -   while year >= 10 loop
> -         year_digit1 = year_digit1 + 1
> -         year = year - 10
> -   end loop
> -   year_digit3 = year_digit3 + 48
> -   year_digit2 = year_digit2 + 48
> -   year_digit1 = year_digit1 + 48
> -   year_digit0 = year + 48
> -
> -   if !day_mounth_notation then
> -      lcd_write_data(mounth_digit1)
> -      lcd_write_data(mounth_digit0)
> -      lcd_write_data(seperator)
> -      lcd_write_data(day_digit1  )
> -      lcd_write_data(day_digit0)
> -      lcd_write_data(seperator)
> -   else
> -      lcd_write_data(day_digit1  )
> -      lcd_write_data(day_digit0)
> -      lcd_write_data(seperator)
> -      lcd_write_data(mounth_digit1)
> -      lcd_write_data(mounth_digit0)
> -      lcd_write_data(seperator)
> -   end if
> -
> -   if year_mem > 100 then
> -      lcd_write_data(year_digit3)
> -      lcd_write_data(year_digit2)
> -   else
> -      lcd_write_data("'")
> -   end if
> -
> -   lcd_write_data(year_digit1)
> -   lcd_write_data(year_digit0)
> -
> -end procedure
> -
> -
> --- Displays a byte value in Hex,
> -procedure lcd_bvalue_hex( byte in value) is
> -   var byte temp
> -   lcd_write_data("0")
> -   lcd_write_data("x")
> -   temp = value >> 4
> -   if temp < 10 then
> -      lcd_write_data(temp + 48)
> -   else
> -      lcd_write_data(temp + 55)
> -   end if
> -   value = value & 0b00001111
> -   if value < 10 then
> -      lcd_write_data(value + 48)
> -   else
> -      lcd_write_data(value + 55)
> -   end if
> -
> -end procedure
> -
> -
> --- Displays a word value in Hex,
> -procedure lcd_wvalue_hex( word in value) is
> -   var byte temp
> -   lcd_write_data("0")
> -   lcd_write_data("x")
> -   temp = value >> 12
> -   if temp < 10 then
> -      lcd_write_data(temp + 48)
> -   else
> -      lcd_write_data(temp + 55)
> -   end if
> -   temp = value >> 8
> -   temp = temp & 0b00001111
> -   if temp < 10 then
> -      lcd_write_data(temp + 48)
> -   else
> -      lcd_write_data(temp + 55)
> -   end if
> -   temp = value >> 4
> -   temp = temp & 0b00001111
> -   if temp < 10 then
> -      lcd_write_data(temp + 48)
> -   else
> -      lcd_write_data(temp + 55)
> -   end if
> -   value = value & 0b0000000000001111
> -   if value < 10 then
> -      lcd_write_data(value + 48)
> -   else
> -      lcd_write_data(value + 55)
> -   end if
> -
> -end procedure
> -
> -
> --- Initialise display
> +-- Initialize display in 1, 2 or 3 line, display on, no cursor shown an
> cursor
> +-- moves to right
>  -- (this routine is only used inside this file)
>  procedure lcd_init() is
>     pragma inline
> -   lcd_enable = low
> -   delay_1ms( 45 )                  --
> -   lcd_rw = low                      -- select command
> -
> -   if lcd_hardware == 4  then
> -      _lcd_write_low_nibble( 0b_0000_0011 ) --
> -      delay_1ms( 2)                       --
> -      _lcd_write_low_nibble( 0b_0000_0011 ) --
> -      delay_1ms( 2 )                      --
> -      _lcd_write_low_nibble( 0b_0000_0011 ) --
> -      delay_10us( 4 )
> -
> -      _lcd_write_low_nibble( 0b_0000_0010 )--
> -      delay_10us( 4 )
> -
> -      if lcd_number_of_display_lines == 1 then
> -         _lcd_write_low_nibble( 0b_0000_0010 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0001 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0001 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0100 )--
> -      end if
> -
> -      if lcd_number_of_display_lines == 2 then
> -         _lcd_write_low_nibble( 0b_0000_0010 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_1001 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0001 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0100 )--
> -      end if
> -
> -      if lcd_number_of_display_lines == 3 then
> -         _lcd_write_low_nibble( 0b_0000_0010 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_1001 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0001 )--
> -         delay_10us( 4 )
> -         _lcd_write_low_nibble( 0b_0000_0101 )--
> -      end if
> -
> -      _lcd_write_low_nibble( 0b_0000_0111 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_1000 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0101 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_1110 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0110 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_1010 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0000 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_1100 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0000 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0001 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0000 )--
> -      delay_10us( 4 )
> -      _lcd_write_low_nibble( 0b_0000_0110 )--
> -      delay_1ms( 4 )
> -
> -   end if
> -
> -   if lcd_hardware == 1 | lcd_hardware == 8 then
> -      if lcd_number_of_display_lines == 1 then
> -         _lcd_write_command( 0b_0011_0000 ) -- function set lcd port
> -         delay_10us( 3 )                       -- extra delay
> -         _lcd_write_command( 0b_0011_0001 ) -- function set lcd port
> -         delay_10us( 3 )                      -- extra delay
> -         _lcd_write_command( 0b_0001_0100 ) -- BIAS
> -         delay_10us( 3 )                      -- extra delay
> -      end if
> -
> -      if lcd_number_of_display_lines == 2 then
> -         _lcd_write_command( 0b_0011_1000 ) -- function set lcd port
> -         delay_10us( 3 )                       -- extra delay
> -         _lcd_write_command( 0b_0011_1001 ) -- function set lcd port
> -         delay_10us( 3 )                      -- extra delay
> -         _lcd_write_command( 0b_0001_0100 ) -- BIAS
> -         delay_10us( 3 )                      -- extra delay
> -      end if
> -
> -      if lcd_number_of_display_lines == 3 then
> -         _lcd_write_command( 0b_0011_1000 ) -- function set lcd port
> -         delay_10us( 3 )                       -- extra delay
> -         _lcd_write_command( 0b_0011_1001 ) -- function set lcd port
> -         delay_10us( 3 )                      -- extra delay
> -         _lcd_write_command( 0b_0001_0101 ) -- BIAS
> -         delay_10us( 3 )                      -- extra delay
> -      end if
> -
> -      _lcd_write_command( 0b_0111_0000 ) -- contrast set
> -      delay_10us( 3)                    -- extra delay
> -      _lcd_write_command( 0b_0101_1110 ) -- power/ICON/contrast control
> -      delay_10us( 3 )
> -      _lcd_write_command( 0b_0110_1010 ) -- follower control
> -      delay_1ms( 210 )
> -      _lcd_write_command( 0b_0011_1000 ) -- function set lcd port
> +   delay_1ms( 45 )                   --  delay for 45mS
> +   if lcd_number_of_display_lines == 1 then
> +      _lcd_write_command( 0b_0011_0000 ) -- function set lcd port
> +      delay_10us( 3 )                       -- extra delay
> +      _lcd_write_command( 0b_0011_0001 ) -- function set lcd port
>        delay_10us( 3 )                      -- extra delay
> -      _lcd_write_command( 0b_0000_1100 )-- display on/off control
> -         delay_10us( 3 )
> -      _lcd_write_command( 0b_0000_0001 )-- clear display
> -         delay_10us( 40 )
> -      _lcd_write_command( 0b_0000_0110 )-- entry mode set, cursor moves to
> right
> -         delay_10us( 40 )
> -   end if
> +      _lcd_write_command( 0b_0001_0100 ) -- BIAS
> +      delay_10us( 3 )                      -- extra delay
> +    end if
> +
> +    if lcd_number_of_display_lines == 2 then
> +       _lcd_write_command( 0b_0011_1000 ) -- function set lcd port
> +       delay_10us( 3 )                       -- extra delay
> +       _lcd_write_command( 0b_0011_1001 ) -- function set lcd port
> +       delay_10us( 3 )                      -- extra delay
> +       _lcd_write_command( 0b_0001_0100 ) -- BIAS
> +       delay_10us( 3 )                      -- extra delay
> +    end if
> +
> +    if lcd_number_of_display_lines == 3 then
> +       _lcd_write_command( 0b_0011_1000 ) -- function set lcd port
> +       delay_10us( 3 )                       -- extra delay
> +       _lcd_write_command( 0b_0011_1001 ) -- function set lcd port
> +       delay_10us( 3 )                      -- extra delay
> +       _lcd_write_command( 0b_0001_0101 ) -- BIAS
> +       delay_10us( 3 )                      -- extra delay
> +    end if
> +
> +    _lcd_write_command( 0b_0111_0000 ) -- contrast set
> +    delay_10us( 3)                    -- extra delay
> +    _lcd_write_command( 0b_0101_1110 ) -- power/ICON/contrast control
> +    delay_10us( 3 )
> +    _lcd_write_command( 0b_0110_1010 ) -- follower control
> +    delay_1ms( 210 )
> +    _lcd_write_command( 0b_0011_1000 ) -- function set lcd port
> +    delay_10us( 3 )                      -- extra delay
> +    _lcd_write_command( 0b_0000_1100 )-- display on/off control
> +       delay_10us( 3 )
> +    _lcd_write_command( 0b_0000_0001 )-- clear display
> +       delay_10us( 40 )
> +    _lcd_write_command( 0b_0000_0110 )-- entry mode set, cursor moves to
> right
> +       delay_10us( 40 )
>
>  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
-~----------~----~----~----~------~----~------~--~---

Reply via email to