test4

Dependencies:   mbed BufferedSerial LS7366LIB2 FastPWM

7_segment.h

Committer:
lsh3146
Date:
2020-12-08
Revision:
4:bf278ddb8504
Parent:
0:7cff999a7f5c

File content as of revision 4:bf278ddb8504:

#ifndef _7_SEGMENT_H_
#define _7_SEGMENT_H_

#include "MCP23S17.h"

#define SEG_DELAY_TIME  (int)3
#define SEG_OE_PERIOD   (int)1500 // 1.5 ms

#define SEG_PGAIN 0
#define SEG_INPUT 0


//FastPWM OE_pin(PB_11, -1);
//PwmOut OE_pin(PB_11);
//DigitalOut output_enable_pin(PB_11);
bool OE_state = false;

uint8_t menual_step = 0;
uint32_t menual_delay = 0;

const bool num_data[10][8] =    {
                                    {1,0,0,0,0,0,0,1},
                                    {1,1,1,1,0,0,1,1},
                                    {0,1,0,0,1,0,0,1},
                                    {0,1,1,0,0,0,0,1},
                                    {0,0,1,1,0,0,1,1},
                                    {0,0,1,0,0,1,0,1},
                                    {0,0,0,0,0,1,0,1},
                                    {1,0,1,1,0,0,0,1},
                                    {0,0,0,0,0,0,0,1},
                                    {0,0,1,1,0,0,0,1},
                                };
                                
const bool menual_data[70][8] =    {                                
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1}, 
                                            {1, 1, 1, 0, 0, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 1, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 1, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 1, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 1, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 1, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 1, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 1, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 1, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 1, 1},
                                                                            
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                            {1, 0, 0, 0, 1, 1, 0, 1},
                                            {1, 1, 1, 0, 0, 0, 1, 1},
                                            {1, 1, 1, 0, 1, 1, 0, 1},
                                         };
                                
int Gobal_GPIOA = 0x00;

void Segment_Init();
void Segment_PWM_Control();
void pgain_Latch_pin(bool logic);
void pgain_Clock_pin(bool logic);
void pgain_data_pin(bool logic);
void input_Latch_pin(bool logic);
void input_Clock_pin(bool logic);
void input_data_pin(bool logic);
void Pgain_segment(int num1,int num2,int num3,int delay_time_us);
void Input_segment(int num1,int num2,int delay_time_us);

void Menual_Segment();

void Segment_Init()
{
    Pgain_segment(0, 0, 0, SEG_DELAY_TIME);
    Input_segment(0, 0, SEG_DELAY_TIME);
    //output_enable_pin = 1;
//    OE_pin.period(0.015);
//    OE_pin.write(0.5f);
}
/*
void Segment_PWM_Control()
{
    output_enable_pin = OE_state;
    OE_state = !OE_state;
}
*/
void pgain_Latch_pin(bool logic) //GPA2
{
    if(logic)
        Gobal_GPIOA |= (1<<2);//LED를 켠다.
    else
        Gobal_GPIOA &= ~(1<<2);//LED를 끈다.
        
    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
}

void pgain_Clock_pin(bool logic) //GPA3
{
    if(logic)
        Gobal_GPIOA |= (1<<3);//LED를 켠다.
    else
        Gobal_GPIOA &= ~(1<<3);//LED를 끈다.
        
    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
}

void pgain_data_pin(bool logic) //GPA0
{
    if(logic)
        Gobal_GPIOA |= (1<<0);//LED를 켠다.
    else
        Gobal_GPIOA &= ~(1<<0);//LED를 끈다.
        
    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
}

void input_Latch_pin(bool logic) //GPA6
{
    if(logic)
        Gobal_GPIOA |= (1<<6);//LED를 켠다.
    else
        Gobal_GPIOA &= ~(1<<6);//LED를 끈다.
        
    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
}

void input_Clock_pin(bool logic) //GPA7
{
    if(logic)
        Gobal_GPIOA |= (1<<7);//LED를 켠다.
    else
        Gobal_GPIOA &= ~(1<<7);//LED를 끈다.
        
    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
}

void input_data_pin(bool logic) //GPA4
{
    if(logic)
        Gobal_GPIOA |= (1<<4);//LED를 켠다.
    else
        Gobal_GPIOA &= ~(1<<4);//LED를 끈다.
        
    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
}

void Pgain_segment(int num1,int num2,int num3,int delay_time_us)
{
    pgain_Latch_pin(0);
    wait_us(delay_time_us);
    
    if(num1>9)
        num1=9;
    if(num1<0)
        num1=0;
        
    if(num2>9)
        num2=9;
    if(num2<0)
        num2=0;
        
    if(num3>9)
        num3=9;
    if(num3<0)
        num3=0;
        
        
    for(int i=0;i<8;i++)
            {
                pgain_Clock_pin(1);
                wait_us(delay_time_us);
                pgain_data_pin(num_data[num3][i]);
                wait_us(delay_time_us);
                pgain_Clock_pin(0);
                wait_us(delay_time_us);
            }
    for(int i=0;i<8;i++)
            {
                pgain_Clock_pin(1);
                wait_us(delay_time_us);
                pgain_data_pin(num_data[num2][i]);
                wait_us(delay_time_us);
                pgain_Clock_pin(0);
                wait_us(delay_time_us);
            }
    for(int i=0;i<8;i++)
            {
                pgain_Clock_pin(1);
                wait_us(delay_time_us);
                pgain_data_pin(num_data[num1][i]);
                wait_us(delay_time_us);
                pgain_Clock_pin(0);
                wait_us(delay_time_us);
            }
    wait_us(delay_time_us);
    pgain_Latch_pin(1);
}

void Input_segment(int num1,int num2,int delay_time_us)
{
    input_Latch_pin(0);
    wait_us(delay_time_us);
    
    if(num1>9)
        num1=9;
    if(num1<0)
        num1=0;
        
    if(num2>9)
        num2=9;
    if(num2<0)
        num2=0;
        
    for(int i=0;i<8;i++)
            {
                input_Clock_pin(1);
                wait_us(delay_time_us);
                input_data_pin(num_data[num2][i]);
                wait_us(delay_time_us);
                input_Clock_pin(0);
                wait_us(delay_time_us);
            }
    for(int i=0;i<8;i++)
            {
                input_Clock_pin(1);
                wait_us(delay_time_us);
                input_data_pin(num_data[num1][i]);
                wait_us(delay_time_us);
                input_Clock_pin(0);
                wait_us(delay_time_us);
            }
    wait_us(delay_time_us);
    input_Latch_pin(1);
}

void Menual_Segment()
{
    menual_delay++;
    
    if(menual_delay > 333)
    {
        pgain_Latch_pin(0);
        wait_us(SEG_DELAY_TIME);
            
        for(int i=0;i<8;i++)
                {
                    pgain_Clock_pin(1);
                    wait_us(SEG_DELAY_TIME);
                    pgain_data_pin(menual_data[menual_step][i]);
                    wait_us(SEG_DELAY_TIME);
                    pgain_Clock_pin(0);
                    wait_us(SEG_DELAY_TIME);
                }
        for(int i=0;i<8;i++)
                {
                    pgain_Clock_pin(1);
                    wait_us(SEG_DELAY_TIME);
                    pgain_data_pin(menual_data[menual_step + 1][i]);
                    wait_us(SEG_DELAY_TIME);
                    pgain_Clock_pin(0);
                    wait_us(SEG_DELAY_TIME);
                }
        for(int i=0;i<8;i++)
                {
                    pgain_Clock_pin(1);
                    wait_us(SEG_DELAY_TIME);
                    pgain_data_pin(menual_data[menual_step + 2][i]);
                    wait_us(SEG_DELAY_TIME);
                    pgain_Clock_pin(0);
                    wait_us(SEG_DELAY_TIME);
                }
        wait_us(SEG_DELAY_TIME);
        pgain_Latch_pin(1);
        
        
        input_Latch_pin(0);
        wait_us(SEG_DELAY_TIME);
        
        for(int i=0;i<8;i++)
                {
                    input_Clock_pin(1);
                    wait_us(SEG_DELAY_TIME);                
                    input_data_pin(menual_data[menual_step + 3][i]);
                    wait_us(SEG_DELAY_TIME);
                    input_Clock_pin(0);
                    wait_us(SEG_DELAY_TIME);
                }
                    
        for(int i=0;i<8;i++)
                {
                    input_Clock_pin(1);
                    wait_us(SEG_DELAY_TIME);                
                    input_data_pin(menual_data[menual_step + 4][i]);
                    wait_us(SEG_DELAY_TIME);
                    input_Clock_pin(0);
                    wait_us(SEG_DELAY_TIME);
                }
                
        wait_us(SEG_DELAY_TIME);
        input_Latch_pin(1);
        
        menual_step += 5;
        
        if(menual_step > 65) menual_step = 0;
        menual_delay = 0;
    }
}

#endif