Dual 7segment decoder in ABEL

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

Hi there

I'm using the attached module for a dual 7-segment decoder.
It works fine except one thing: the segment should show "1" if the
BCD-code has got the value of 0, so the display shows numbers starting
from 1 up to 100 instead of 0 up to 99.

I gues the answer is pretty easy but I'm not very familar with ABEL
code.
So in my opinion the solution is to add 1 to the current BCD-value (=
Zahl) and then can very easily go through the truth table.

Can somebody help and tell me, where I have to change my code???


Timo




module  bcd7_2seg  
title 'seven segment display decoder'

" angepasst auf ein Ausgabe a-g und einer Ansteuerung für
" LowerSegment und HigherSegment

" The 5 -bit binary (0 - 64) score is converted into two BCD outputs.
" The integer division '/' and the modulus operator '%' are used to
" extract the individual digits from the two digit score.
" 'Score % 10' will yield the 'units' and
" 'Score / 10' will yield the 'tens'



"          a      
"         ---      
"       f| g |b
"         ---          
"       e| d |c
"         ---

    " Zwischengrössen
    V7..V0 node;

    EN,S5..S0,Clock        pin; "Steuereingänge

        
    a,b,c,d,e,f,g       pin istype 'com'; "7Seg.Ausgänge Einer
    Seg            pin istype 'com';
    
    Zahl=[S5..S0];

    bcd1    =[V3..V0];
    bcd2    =[V7..V4];

        ON,OFF  = 0,1;                  " for common anode LEDs
        L,H,X,Z = 0,1,.X.,.Z.;

   binary          = 0;            "scratch variable
   clear   macro (a) {@const ?a=0};
   inc     macro (a) {@const ?a=?a+1;};


equations    
    when !EN&Clock then     Seg=ON                
    else    when !EN&!Clock then     Seg=OFF;
    


@dcset

truth_table ( Zahl -> [bcd2,bcd1])
        clear(binary);
           @repeat 64 {binary -> [binary/10,binary%10]; inc(binary);}

truth_table ([bcd2,bcd1,Seg] -> [ a ,  b ,  c ,  d,  e ,  f ,  g ])
              [X,0,ON]  -> [ ON,  ON,  ON,  ON,  ON,  ON, OFF];"
              [X,1,ON]  -> [OFF,  ON,  ON, OFF, OFF, OFF, OFF];
              [X,2,ON]  -> [ ON,  ON, OFF,  ON,  ON, OFF,  ON];
              [X,3,ON]  -> [ ON,  ON,  ON,  ON, OFF, OFF,  ON];
              [X,4,ON]  -> [OFF,  ON,  ON, OFF, OFF,  ON,  ON];
              [X,5,ON]  -> [ ON, OFF,  ON,  ON, OFF,  ON,  ON];
              [X,6,ON]  -> [ ON, OFF,  ON,  ON,  ON,  ON,  ON];
              [X,7,ON]  -> [ ON,  ON,  ON, OFF, OFF, OFF, OFF];
              [X,8,ON]  -> [ ON,  ON,  ON,  ON,  ON,  ON,  ON];
              [X,9,ON]  -> [ ON,  ON,  ON,  ON, OFF,  ON,  ON];
              [0,X,OFF]  -> [ OFF,  OFF,  OFF,  OFF,  OFF,  OFF, OFF];
"führende Nullen aus
              [1,X,OFF]  -> [OFF,  ON,  ON, OFF, OFF, OFF, OFF];
              [2,X,OFF]  -> [ ON,  ON, OFF,  ON,  ON, OFF,  ON];
              [3,X,OFF]  -> [ ON,  ON,  ON,  ON, OFF, OFF,  ON];
              [4,X,OFF]  -> [OFF,  ON,  ON, OFF, OFF,  ON,  ON];
              [5,X,OFF]  -> [ ON, OFF,  ON,  ON, OFF,  ON,  ON];
              [6,X,OFF]  -> [ ON, OFF,  ON,  ON,  ON,  ON,  ON];
              [7,X,OFF]  -> [ ON,  ON,  ON, OFF, OFF, OFF, OFF];
              [8,X,OFF]  -> [ ON,  ON,  ON,  ON,  ON,  ON,  ON];
              [9,X,OFF]  -> [ ON,  ON,  ON,  ON, OFF,  ON,  ON];

end

Site Timeline