#include "my_includes.h"
#include "SEG7.h"

static alt_u8 szMap[] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 88, 94, 123, 113};  // 0,1,2,....9, a, b, c, d, e, f

void SEG7_Clear(void){
    SEG_DISPLAY_L(0x00000000);
    SEG_DISPLAY_R(0x00000000);
}
void SEG7_Full(void){
    SEG_DISPLAY_L(0xFFFFFFFF);
    SEG_DISPLAY_R(0xFFFFFFFF);
}

void SEG7_Hex(alt_u32 Data, alt_u8 point_mask){
    alt_u8 mask = 0x01;
    alt_u32 seg_mask;
    int i;
    
    //
    seg_mask = 0;
    for(i=0;i<8;i++){
        seg_mask >>= 8;
        seg_mask |= (szMap[Data & 0x0F]) << 24;
        Data >>= 4;
        if (point_mask & mask)
            seg_mask |= 0x80 << 24;
        mask <<= 1;  
        if (i == 3){
            SEG_DISPLAY_R(seg_mask);
            seg_mask = 0;
        }else if (i == 7){
            SEG_DISPLAY_L(seg_mask);
            
        }          
    }        
}

void SEG7_Decimal(alt_u32 Data, alt_u8 point_mask){
    alt_u8 mask = 0x01;
    alt_u32 seg_mask;
    int i;
    
    //
    seg_mask = 0;
    for(i=0;i<8;i++){
        seg_mask >>= 8;
        seg_mask |= (szMap[Data%10]) << 24;
        Data /= 10;
        if (point_mask & mask)
            seg_mask |= 0x80 << 24;
        mask <<= 1;   
        if (i == 3){
            SEG_DISPLAY_R(seg_mask);
            seg_mask = 0;
        }else if (i == 7){
            SEG_DISPLAY_L(seg_mask);
            
        }  
    }        
  
} 

