...a library wich I used it for x84 to control a 22925/22926, 4 digit multiplexed display driver for LED's. Hardware and one example will be presented soon into my page.
-- -- file : 22925.jal -- author : Surducan Vasile -- date : march 2000 -- purpose : procedures for 4 digit multiplexed display 22925/6/ family -- includes : none -- pins : b0 clock, ( 22926 pin 12 ) -- b1 reset, ( 22926 pin 13 ) -- a4 memory, ( 22926 pin 5 and pin 6 ) must be used to avoid -- flicker in count/egg/clock down display mode -- Jal : 04.18, 04.22, 04.24 -- copyleft : V.Surducan............hi-hi..........copyright :V.Surducan -- email : vasile@l30.itim-cj.ro -- URL : http://www.geocities.com/vsurducan/pic.htm ( for hardware ) -- configure port_b var byte count = 0 var byte seconds = 0 var byte hundred = 0 var byte minutes = 0 var bit clock is pin_b0 var bit reset is pin_b1 var bit memo is pin_a4 pin_b0_direction = output pin_b1_direction = output pin_a4_direction = output -- initialize input levels procedure _22926_init is clock = high reset = low end procedure -- reset will clear all 4 digits procedure _22926_reset is reset = high asm nop reset = low end procedure -- writing ( nr_1 * nr_2 ) counts, up to 255 * 255 procedure _22926_write ( byte in nr_1, byte in nr_2 ) is for nr_1 loop for nr_2 loop clock = high clock = low end loop end loop end procedure -- increment less then n (<255) counts procedure _22926_up ( byte in n ) is -- _22926_init if count < n then count = count + 1 clock = high clock = low end if end procedure -- increment less then (cicle +1)*n counts, example: -- ( 3 + 1 ) * 250 = 1000 counts -- ( 9 + 1 ) * 100 = 10000 counts procedure _22926_full_up ( byte in cycle, byte in n ) is if hundred <= cycle then if count == n then count = 0 hundred = hundred + 1 elsif count < n then count = count + 1 clock = high clock = low end if end if end procedure -- decrement less then 255 counts using a trick: reset and increment -- ( count - 1 ) pulses procedure _22926_down is -- _22926_init if count > 0 then count = count - 1 memo = low _22926_reset for count loop clock = high clock = low end loop memo = high end if end procedure -- decrement in decimal (less then 1000 counts) procedure _22926_full_down ( byte in n )is -- _22926_init if hundred >= 1 then count = count - 1 if count == 0 then count = n hundred = hundred - 1 end if memo = low _22926_reset for count loop clock = high clock = low end loop _22926_write ( hundred, n ) memo = high elsif hundred == 0 then _22926_down end if end procedure -- clock increment procedure (seconds incremented in main program) procedure _22926_clock_up ( byte in minutes_max ) is if minutes < minutes_max then if seconds == 60 then seconds = 0 minutes = minutes + 1 end if -- for a rollover clock_up procedure these lines should be added -- and first if...end if condition should be removed -- if minutes == minutes_max then -- minutes = 0 -- end if memo = low _22926_reset for seconds loop clock = high clock = low end loop _22926_write ( minutes, 100 ) memo = high end if end procedure -- clock decrement procedure, at 0.00 decrement stops -- (seconds must be incremented in main program, -- minutes must be defined before use) procedure _22926_clock_down is if ( minutes > 0 ) | ( seconds < 60 ) then if seconds == 60 then minutes = minutes - 1 seconds = 0 end if memo = low _22926_reset for ( 59 - seconds ) loop clock = high clock = low end loop _22926_write ( minutes, 100 ) memo = high end if end procedure
Questions: