#define SMG_P1 IO_PORTA_12
#define SMG_P2 IO_PORTA_13
#define SMG_P3 IO_PORTA_14
#define SMG_P4 IO_PORTA_15
#define SMG_P5 IO_PORTA_00
#define SMG_P6 IO_PORTA_01
#define SMG_P7 IO_PORTA_02
#define SMG_P8 IO_PORTA_03
#define SMG_P9 IO_PORTA_04
#define SMG_P1_L {gpio_direction_output(SMG_P1,0);}
#define SMG_P1_H {gpio_direction_output(SMG_P1,1);}
#define SMG_P2_L {gpio_direction_output(SMG_P2,0);}
#define SMG_P2_H {gpio_direction_output(SMG_P2,1);}
#define SMG_P3_L {gpio_direction_output(SMG_P3,0);}
#define SMG_P3_H {gpio_direction_output(SMG_P3,1);}
#define SMG_P4_L {gpio_direction_output(SMG_P4,0);}
#define SMG_P4_H {gpio_direction_output(SMG_P4,1);}
#define SMG_P5_L {gpio_direction_output(SMG_P5,0);}
#define SMG_P5_H {gpio_direction_output(SMG_P5,1);}
#define SMG_P6_L {gpio_direction_output(SMG_P6,0);}
#define SMG_P6_H {gpio_direction_output(SMG_P6,1);}
#define SMG_P7_L {gpio_direction_output(SMG_P7,0);}
#define SMG_P7_H {gpio_direction_output(SMG_P7,1);}
#define SMG_P8_L {gpio_direction_output(SMG_P8,0);}
#define SMG_P8_H {gpio_direction_output(SMG_P8,1);}
#define SMG_P9_L {gpio_direction_output(SMG_P9,0);}
#define SMG_P9_H {gpio_direction_output(SMG_P9,1);}
static u32 shumaguan_gpio[9] = {SMG_P1,SMG_P2,SMG_P3,SMG_P4,SMG_P5,SMG_P6,SMG_P7,SMG_P8,SMG_P9};
enum{
A1=0,B1,C1,D1,E1,F1,G1,
A2,B2,C2,D2,E2,F2,G2,
A3,B3,C3,D3,E3,F3,G3,
A4,B4,C4,D4,E4,F4,G4,
DP,
J1,J2,J3,J4,K6,K7,K8,
A5,B5,C5,D5,E5,F5,G5,
A6,B6,C6,D6,E6,F6,G6,
K1,K2, K3,K4,
T1,T2,T3,T4,T5,NG
};
u8 SMG_display_seg_tab[59]={0};
u8 smg1_tab[10][8] =
{
//A
{A1,B1,C1,D1,E1,F1,NG,NG},//0
{B1,C1,NG,NG,NG,NG,NG,NG},//1
{A1,B1,D1,E1,G1,NG,NG,NG},//2
{A1,B1,C1,D1,G1,NG,NG,NG},//3
{F1,G1,B1,C1,NG,NG,NG,NG},//4
{A1,F1,G1,C1,D1,NG,NG,NG},//5
{A1,F1,E1,D1,C1,G1,NG,NG},//6
{A1,B1,C1,NG,NG,NG,NG,NG},//7
{A1,F1,G1,C1,D1,E1,B1,NG},//8
{A1,B1,C1,D1,F1,G1,NG,NG}//9
};
u8 smg2_tab[10][8] =
{
//B
{A2,B2,C2,D2,E2,F2,NG,NG},//0
{B2,C2,NG,NG,NG,NG,NG,NG},//1
{A2,B2,D2,E2,G2,NG,NG,NG},//2
{A2,B2,C2,D2,G2,NG,NG,NG},//3
{F2,G2,B2,C2,NG,NG,NG,NG},//4
{A2,F2,G2,C2,D2,NG,NG,NG},//5
{A2,F2,E2,D2,C2,G2,NG,NG},//6
{A2,B2,C2,NG,NG,NG,NG,NG},//7
{A2,F2,G2,C2,D2,E2,B2,NG},//8
{A2,B2,C2,D2,F2,G2,NG,NG}//9
};
u8 smg3_tab[10][8] =
{
//C
{A3,B3,C3,D3,E3,F3,NG,NG},//0
{B3,C3,NG,NG,NG,NG,NG,NG},//1
{A3,B3,D3,E3,G3,NG,NG,NG},//3
{A3,B3,C3,D3,G3,NG,NG,NG},//3
{F3,G3,B3,C3,NG,NG,NG,NG},//4
{A3,F3,G3,C3,D3,NG,NG,NG},//5
{A3,F3,E3,D3,C3,G3,NG,NG},//6
{A3,B3,C3,NG,NG,NG,NG,NG},//7
{A3,F3,G3,C3,D3,E3,B3,NG},//8
{A3,B3,C3,D3,F3,G3,NG,NG}//9
};
u8 smg4_tab[10][8] =
{
//D
{A4,B4,C4,D4,E4,F4,NG,NG},//0
{B4,C4,NG,NG,NG,NG,NG,NG},//1
{A4,B4,D4,E4,G4,NG,NG,NG},//4
{A4,B4,C4,D4,G4,NG,NG,NG},//4
{F4,G4,B4,C4,NG,NG,NG,NG},//4
{A4,F4,G4,C4,D4,NG,NG,NG},//5
{A4,F4,E4,D4,C4,G4,NG,NG},//6
{A4,B4,C4,NG,NG,NG,NG,NG},//7
{A4,F4,G4,C4,D4,E4,B4,NG},//8
{A4,B4,C4,D4,F4,G4,NG,NG}//9
};
u8 smg5_tab[10][8] =
{
//D
{A5,B5,C5,D5,E5,F5,NG,NG},//0
{B5,C5,NG,NG,NG,NG,NG,NG},//1
{A5,B5,D5,E5,G5,NG,NG,NG},//4
{A5,B5,C5,D5,G5,NG,NG,NG},//4
{F5,G5,B5,C5,NG,NG,NG,NG},//4
{A5,F5,G5,C5,D5,NG,NG,NG},//5
{A5,F5,E5,D5,C5,G5,NG,NG},//6
{A5,B5,C5,NG,NG,NG,NG,NG},//7
{A5,F5,G5,C5,D5,E5,B5,NG},//8
{A5,B5,C5,D5,F5,G5,NG,NG}//9
};
u8 smg6_tab[10][8] =
{
//D
{A6,B6,C6,D6,E6,F6,NG,NG},//0
{B6,C6,NG,NG,NG,NG,NG,NG},//1
{A6,B6,D6,E6,G6,NG,NG,NG},//4
{A6,B6,C6,D6,G6,NG,NG,NG},//4
{F6,G6,B6,C6,NG,NG,NG,NG},//4
{A6,F6,G6,C6,D6,NG,NG,NG},//5
{A6,F6,E6,D6,C6,G6,NG,NG},//6
{A6,B6,C6,NG,NG,NG,NG,NG},//7
{A6,F6,G6,C6,D6,E6,B6,NG},//8
{A6,B6,C6,D6,F6,G6,NG,NG}//9
};
u8 other_tab[3][8]=
{
{J1,J2,J3,J4,K6,K7,K8,NG},
{DP,K1,K2,K3,K4,NG,NG,NG},
{T1,T2,T3,T4,T5,NG,NG,NG},
};
#define CLEAN_ALL_TAB memset(SMG_display_seg_tab,0,sizeof(SMG_display_seg_tab));
static void smg_init()
{
u8 i;
for(i=0;i<9;i++)
{
gpio_set_hd(shumaguan_gpio[i],1);
gpio_set_pull_down(shumaguan_gpio[i], 0);
gpio_set_pull_up(shumaguan_gpio[i], 0);
gpio_set_direction(shumaguan_gpio[i], 1);
}
}
static void smg_clean_all()
{
gpio_set_pull_down(SMG_P1, 0);
gpio_set_pull_up(SMG_P1, 0);
gpio_set_direction(SMG_P1, 1);
gpio_set_hd0(SMG_P1, 1);
gpio_set_pull_down(SMG_P2, 0);
gpio_set_pull_up(SMG_P2, 0);
gpio_set_direction(SMG_P2, 1);
gpio_set_hd0(SMG_P2, 1);
gpio_set_pull_down(SMG_P3, 0);
gpio_set_pull_up(SMG_P3, 0);
gpio_set_direction(SMG_P3, 1);
gpio_set_hd0(SMG_P3, 1);
gpio_set_pull_down(SMG_P4, 0);
gpio_set_pull_up(SMG_P4, 0);
gpio_set_direction(SMG_P4, 1);
gpio_set_hd0(SMG_P4, 1);
gpio_set_pull_down(SMG_P5, 0);
gpio_set_pull_up(SMG_P5, 0);
gpio_set_direction(SMG_P5, 1);
gpio_set_hd0(SMG_P5, 1);
gpio_set_pull_down(SMG_P6, 0);
gpio_set_pull_up(SMG_P6, 0);
gpio_set_direction(SMG_P6, 1);
gpio_set_hd0(SMG_P6, 1);
gpio_set_pull_down(SMG_P7, 0);
gpio_set_pull_up(SMG_P7, 0);
gpio_set_direction(SMG_P7, 1);
gpio_set_hd0(SMG_P7, 1);
gpio_set_pull_down(SMG_P8, 0);
gpio_set_pull_up(SMG_P8, 0);
gpio_set_direction(SMG_P8, 1);
gpio_set_hd0(SMG_P8, 1);
gpio_set_pull_down(SMG_P9, 0);
gpio_set_pull_up(SMG_P9, 0);
gpio_set_direction(SMG_P9, 1);
gpio_set_hd0(SMG_P9, 1);
}
static void shumaguan_device()
{
static u8 Scan_num=1;
smg_clean_all();
switch (Scan_num)
{
case 1:
SMG_P1_L;
if (SMG_display_seg_tab[F1])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[G1])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[C1])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[D1])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[D3])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[K1])
{
SMG_P7_H;
}
Scan_num = 2;
break;
case 2:
SMG_P2_L;
if (SMG_display_seg_tab[A1])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[F2])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[G2])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[C2])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[K3])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[K4])
{
SMG_P7_H;
}
Scan_num = 3;
break;
case 3:
SMG_P3_L;
if (SMG_display_seg_tab[B1])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[A2])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[F3])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[G3])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[E3])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[J1])
{
SMG_P7_H;
}
Scan_num = 4;
break;
case 4:
SMG_P4_L;
if (SMG_display_seg_tab[E1])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[B2])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[A3])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[D4])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[T3])
{
SMG_P7_H;
}
if (SMG_display_seg_tab[T4])
{
SMG_P8_H;
}
if (SMG_display_seg_tab[T5])
{
SMG_P9_H;
}
Scan_num = 5;
break;
case 5:
SMG_P5_L;
if (SMG_display_seg_tab[K2])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[E2])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[B3])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[C3])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[F4])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[DP])
{
SMG_P7_H;
}
Scan_num = 6;
break;
case 6:
SMG_P6_L;
if (SMG_display_seg_tab[J2])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[D2])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[J3])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[E4])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[C4])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[A4])
{
SMG_P7_H;
}
Scan_num = 7;
break;
case 7:
SMG_P7_L;
if (SMG_display_seg_tab[K6])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[K7])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[J4])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[K8])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[G4])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[B4])
{
SMG_P6_H;
}
Scan_num = 8;
break;
case 8:
SMG_P8_L;
if (SMG_display_seg_tab[A5])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[B5])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[C5])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[D5])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[E5])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[F5])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[G5])
{
SMG_P7_H;
}
if (SMG_display_seg_tab[T1])
{
SMG_P9_H;
}
Scan_num = 9;
break;
case 9:
SMG_P9_L;
if (SMG_display_seg_tab[A6])
{
SMG_P1_H;
}
if (SMG_display_seg_tab[B6])
{
SMG_P2_H;
}
if (SMG_display_seg_tab[C6])
{
SMG_P3_H;
}
if (SMG_display_seg_tab[D6])
{
SMG_P4_H;
}
if (SMG_display_seg_tab[E6])
{
SMG_P5_H;
}
if (SMG_display_seg_tab[F6])
{
SMG_P6_H;
}
if (SMG_display_seg_tab[G6])
{
SMG_P7_H;
}
if (SMG_display_seg_tab[T2])
{
SMG_P8_H;
}
Scan_num = 1;
break;
default:
Scan_num = 1;
break;
}
}