-- Title: seven_segment.jal - translation routine for 7 segment display -- Author: Wouter van Ooijen (c) 1998, all rights reserved. -- Adapted-by: Joep Suijs, Vasile Surducan 25.08.2009 -- Compiler: >=2.2 -- -- This file is part of jallib (http://jallib.googlecode.com) -- Released under the ZLIB license (http://www.opensource.org/licenses/zlib-license.html) -- -- Sources: -- -- Description: Translation routine for 7 segment display. -- -- -- The seven segment display needs to be connected to a single port. -- Define the pin layout of the seven segment display like: -- _a_ -- / / -- f b -- / / -- _g_ -- / / -- e c -- / / -- _d_ -- -- -- constant for the segments gfe dcba -- const byte seven_segment_a = 0b_0000_0001 -- const byte seven_segment_b = 0b_0000_0010 -- const byte seven_segment_c = 0b_0000_0100 -- const byte seven_segment_d = 0b_0000_1000 -- const byte seven_segment_e = 0b_0001_0000 -- const byte seven_segment_f = 0b_0010_0000 -- const byte seven_segment_g = 0b_0100_0000 -- const byte seven_segment_dp = 0b_1000_0000 -- -- -- character set: -- -- -- value 0 is character "0" -- value 1 is character "1" -- value 2 is character "2" -- value 3 is character "3" -- value 4 is character "4" -- value 5 is character "5" -- value 6 is character "6" -- value 7 is character "7" -- value 8 is character "8" -- value 9 is character "9" -- value 10 is character "A" -- value 11 is character "b" -- value 12 is character "C" -- value 13 is character "d" -- value 14 is character "E" -- value 15 is character "F" -- value 16 is character "S" -- value 17 is character "c" -- value 18 is character "r" -- value 19 is character "H" -- value 20 is character "i" -- value 21 is character "L" -- value 22 is character "o" -- value 23 is character "P" -- value 24 is character "U" -- value 26 is character "u" -- value 27 is character "space" -- value 28 is character "J" -- value 29 is character "n" -- value 30 is character "h" -- value 31 is character "celsius degree" -- value 32 is character "_" -- value 33 is character "=" -- value 34 is character "-" -- value 35 is character "segment dp" (DOT) -- -- -- Use: -- -- -- const bit seven_segment_common_anode = true ; omit this line if you use a common cathode display. -- -- -- portd_direction = all_output -- portd = seven_from_digit(1) -- display '1' -- -- -- -- Notes: -- if (defined(seven_segment_common_anode) == false) then const bit seven_segment_common_anode = false -- default is common_cathode end if if (seven_segment_common_anode == true) then const _seven_common_mask = 0xff else const _seven_common_mask = 0x00 end if if (defined(seven_segment_a) == false) then -- Default segment setup gfe dcba const byte seven_segment_a = 0b_0000_0001 const byte seven_segment_b = 0b_0000_0010 const byte seven_segment_c = 0b_0000_0100 const byte seven_segment_d = 0b_0000_1000 const byte seven_segment_e = 0b_0001_0000 const byte seven_segment_f = 0b_0010_0000 const byte seven_segment_g = 0b_0100_0000 const byte seven_segment_dp = 0b_1000_0000 end if const byte seven_value_space[] = { -- value 0 is character "0" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_c + seven_segment_d + seven_segment_e + seven_segment_f ), -- value 1 is character "1" _seven_common_mask ^ ( seven_segment_b + seven_segment_c ), -- value 2 is character "2" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_d + seven_segment_e + seven_segment_g ), -- value 3 is character "3" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_c + seven_segment_d + seven_segment_g ), -- value 4 is character "4" _seven_common_mask ^ ( seven_segment_b + seven_segment_c + seven_segment_f + seven_segment_g ), -- value 5 is character "5" _seven_common_mask ^ ( seven_segment_a + seven_segment_c + seven_segment_d + seven_segment_f + seven_segment_g ), -- value 6 is character "6" _seven_common_mask ^ ( seven_segment_a + seven_segment_c + seven_segment_d + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 7 is character "7" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_c ), -- value 8 is character "8" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_c + seven_segment_d + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 9 is character "9" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_c + seven_segment_d + seven_segment_f + seven_segment_g ), -- value 10 is character "A" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_c + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 11 is character "b" _seven_common_mask ^ ( seven_segment_c + seven_segment_d + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 12 is character "C" _seven_common_mask ^ ( seven_segment_a + seven_segment_d + seven_segment_e + seven_segment_f ), -- value 13 is character "d" _seven_common_mask ^ ( seven_segment_b + seven_segment_c + seven_segment_d + seven_segment_e + seven_segment_g ), -- value 14 is character "E" _seven_common_mask ^ ( seven_segment_a + seven_segment_d + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 15 is character "F" _seven_common_mask ^ ( seven_segment_a + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 16 is character "S" _seven_common_mask ^ ( seven_segment_a + seven_segment_f + seven_segment_g + seven_segment_c + seven_segment_d ), -- value 17 is character "c" _seven_common_mask ^ ( seven_segment_g + seven_segment_e + seven_segment_d ), -- value 18 is character "r" _seven_common_mask ^ ( seven_segment_g + seven_segment_e ), -- value 19 is character "H" _seven_common_mask ^ ( seven_segment_f + seven_segment_e + seven_segment_g + seven_segment_b + seven_segment_c ), -- value 20 is character "i" _seven_common_mask ^ ( seven_segment_c ), -- value 21 is character "L" _seven_common_mask ^ ( seven_segment_f + seven_segment_e + seven_segment_d ), -- value 22 is character "o" _seven_common_mask ^ ( seven_segment_g + seven_segment_c + seven_segment_d + seven_segment_e ), -- value 23 is character "P" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_g + seven_segment_f + seven_segment_e ), -- value 24 is character "U" _seven_common_mask ^ ( seven_segment_f + seven_segment_e + seven_segment_d + seven_segment_c + seven_segment_b ), -- value 25 is character ??? <-- this is an omission _seven_common_mask ^ ( seven_segment_f + seven_segment_e + seven_segment_d + seven_segment_c + seven_segment_b ), -- value 26 is character "u" _seven_common_mask ^ ( seven_segment_e + seven_segment_d + seven_segment_c ), -- value 27 is character "space" _seven_common_mask ^ ( 0 ), -- value 28 is character "J" _seven_common_mask ^ ( seven_segment_b + seven_segment_c + seven_segment_d ), -- value 29 is character "n" _seven_common_mask ^ ( seven_segment_c + seven_segment_e + seven_segment_g ), -- value 30 is character "h" _seven_common_mask ^ ( seven_segment_c + seven_segment_e + seven_segment_f + seven_segment_g ), -- value 31 is character "celsius degree" _seven_common_mask ^ ( seven_segment_a + seven_segment_b + seven_segment_g + seven_segment_f ), -- value 32 is character "_" _seven_common_mask ^ ( seven_segment_d ), -- value 33 is character "=" _seven_common_mask ^ ( seven_segment_d + seven_segment_g ), -- value 34 is character "-" _seven_common_mask ^ ( seven_segment_g ), -- value 35 is character "." (segment DOT) _seven_common_mask ^ ( seven_segment_dp ) } -- return seven segment value corresponding to lower nibble of x function seven_from_digit( byte in x ) return byte is return seven_value_space[x] end function