STM32L010と秋月シリアル7セグで3分タイマー GPIO


x Mbedのリビジョンは、125
x Mbedでのボード設定は、NUCLEO-L011K4
x 赤色７セグメントＬＥＤシリアルドライバモジュール　完成品
x OSL10564-74HC595-R M-12642 
x 軽量コンパクト化6/22

動機
本当に出来るとは、思いませんでした。

説明
省略します。

すごく簡単なので勝手に何とかして

忙しい人よう

https://os.mbed.com/users/caa45040/code/gpio_7seg_010_2/


軽量コンパクト化

```c++

#include "mbed.h"

//*          *****  *****  
//*         *       *    * 
//*         ******  *    *
//*         *       *    *
//*         *       *    *
//********   *****  *****

#define swclk1  PA_5    //A4
#define swdio1  PA_7    //A6
#define en1     PA_4    //A3

DigitalOut swdclk(swclk1);
DigitalOut swdio(swdio1);
DigitalOut en(en1);

#define s60()   for(ii=0;ii<60;ii++)wait_ms(1000);

char seg[32] = {
   0x00 , //0 @ -> ' '
   0x77 , //1 A  o
   0x7c , //2 B     　combined use "6"
   0x39 , //3 C
   0x5e , //4 D
   0x79 , //5 E  o
   0x71 , //6 F
   0x3d , //7 G
             
   0x76 , //8 H  o
   0x06 , //9 I    　combined use "1"
   0x1e , //10 J
   0x75 , //11 K 
   0x38 , //12 L  o
   0x15 , //13 M
   0x37 , //14 N  o
   0x3f , //15 O  o　combined use "0"
              
   0x73  , //16 P
   0x67  , //17 Q　combined use "9"
   0x50  , //18 R
   0x6d  , //19 S　combined use "5"
   0x78  , //20 T
   0x3e  , //21 U
   0x1c  , //22 V
   0x2a  , //23 W  o
   0x64  , //24 X
               
   0x6e  , //25 Y
   0x5b  , //26 Z　combined use "2"
   0x4f  , //27 [  --> "3"
   0x66  , //28 \  --> "4"
   0x27  , //29 ]  --> "7"
   0x7f  , //26 ^  --> "8"
   0x08    //31 _
};

//             12345678   12345678   12345678   12345678
char b8[8] = {0b10000000,0b01000000,0b00100000,0b00010000,
              0b00001000,0b00000100,0b00000010,0b00000001 };

void seg1(char v)
{
    v=seg[v-64];
    for(int jj=0;jj<8;jj++){
        if( (v & b8[jj]) == 0 ){
                swdio=0; //ビットが0
        } else {
                swdio=1; //ビットが1 
        }//endif
        swdclk=1;swdclk=0; //clk
    }//for
    en=1;
    en=0;       
}//seg1

int main() {
    
    int ii; //ループカウンター
    
    en=0;
    swdclk=0;
        
    //0分
    seg1('O');
    s60();  
    
    //1分
    seg1('I');
    s60();
    
    //2分
    seg1('Z');
    s60();
    
    //3分
    seg1('[');
    
    while(1){} //無限ループ
    
}//main



```


軽量コンパクト化前

```c++

#include "mbed.h"

//*          *****  *****  
//*         *       *    * 
//*         ******  *    *
//*         *       *    *
//*         *       *    *
//********   *****  *****

#define swclk1  PA_5    //A4
#define swdio1  PA_7    //A6
#define en1     PA_4    //A3

DigitalOut swdclk(swclk1);
DigitalOut swdio(swdio1);
DigitalOut en(en1);

char seg[32][8] = {
 { 1,1,1,1,1,1,1,1 }, //0 @ -> ' '
 { 0,0,0,0,0,1,0,1 }, //1 A  o
 { 1,1,0,0,0,0,0,1 }, //2 B     　combined use "6"
 { 0,1,0,1,0,0,1,1 }, //3 C
 { 1,0,1,0,0,0,0,1 }, //4 D
 { 0,1,0,0,0,0,1,1 }, //5 E  o
 { 0,1,0,0,0,1,1,1 }, //6 F
 { 0,1,0,1,0,0,0,1 }, //7 G

 { 1,0,0,0,0,1,0,1 }, //8 H  o
 { 1,0,1,1,1,1,0,1 }, //9 I    　combined use "1"
 { 1,0,1,1,0,0,0,1 }, //10 J
 { 0,1,0,0,0,1,0,1 }, //11 K 
 { 1,1,0,1,0,0,1,1 }, //12 L  o
 { 0,1,1,1,0,1,0,1 }, //13 M
 { 0,0,0,1,0,1,0,1 }, //14 N  o
 { 0,0,0,1,0,0,0,1 }, //15 O  o　combined use "0"

 { 0,0,0,0,0,1,1,1 }, //16 P
 { 0,0,0,0,1,1,0,1 }, //17 Q　combined use "9"
 { 1,1,1,0,0,1,1,1 }, //18 R
 { 0,1,0,0,1,0,0,1 }, //19 S　combined use "5"
 { 1,1,0,0,0,0,1,1 }, //20 T
 { 1,0,0,1,0,0,0,1 }, //21 U
 { 1,1,1,1,0,0,0,1 }, //22 V
 { 1,0,0,1,1,0,1,1 }, //23 W  o
 { 1,1,0,0,1,1,0,1 }, //24 X

 { 1,0,0,0,1,0,0,1 }, //25 Y
 { 0,0,1,0,0,0,1,1 }, //26 Z　combined use "2"
 { 0,0,1,0,1,0,0,1 }, //27 [  --> "3"
 { 1,0,0,0,1,1,0,1 }, //28 \  --> "4"
 { 0,0,0,1,1,1,0,1 }, //29 ]  --> "7"
 { 0,0,0,0,0,0,0,1 }, //26 ^  --> "8"
 { 1,1,1,1,1,0,1,1 }  //31 _
};

int vc;
int ch_chvc(int s)
{
    s = s - 64;
    
    vc =0;
    vc = vc | ((!(seg[s][7])) << 7);
    vc = vc | ((!(seg[s][3])) << 6);
    vc = vc | ((!(seg[s][2])) << 5);
    vc = vc | ((!(seg[s][4])) << 4);
    vc = vc | ((!(seg[s][5])) << 3);
    vc = vc | ((!(seg[s][6])) << 2);
    vc = vc | ((!(seg[s][1])) << 1);
    vc = vc | ((!(seg[s][0])) << 0);
    
    return(vc);
}//ch_chvc

int v;
int rs;
void seg1()
{
    swdio=((v>>7)&1);   swdclk=1;swdclk=0; //7
    swdio=((v>>6)&1);   swdclk=1;swdclk=0; //6
    swdio=((v>>5)&1);   swdclk=1;swdclk=0; //5
    swdio=((v>>4)&1);   swdclk=1;swdclk=0; //4
    swdio=((v>>3)&1);   swdclk=1;swdclk=0; //3
    swdio=((v>>2)&1);   swdclk=1;swdclk=0; //2
    swdio=((v>>1)&1);   swdclk=1;swdclk=0; //1
    swdio=((v>>0)&1);   swdclk=1;swdclk=0; //0
    swdio=rs;   
    en=1; 
    wait_ms(1);      
    en=0;       
}//seg1

int main() {

//d    en=1;          //debug
//d    wait_ms(1000); //debug
//d    
//d    swdio=1;       //debug
//d    wait_ms(1000); //debug
    
    en=0;
    swdio=0;
    for(int i=0;i<16;i++){
        swdclk=1;
        wait_ms(15);
        swdclk=0;
        wait_ms(15);
    }//for

//d    v=0x55;seg1(); //debug
//d    wait_ms(1000); //debug
//d    v=0xaa;seg1(); //debug
//d    wait_ms(1000); //debug

    int ii; //ループカウンター

    //無限ループ
    while(1) {

        //0分
        v=ch_chvc('O');seg1();
    
        for(ii = 0;ii < 60;ii++){
            wait_ms(1000);
        }//for

        //1分
        v=ch_chvc('I');seg1();
        
        for(ii = 0;ii < 60;ii++){
            wait_ms(1000);
        }//for

        //2分
        v=ch_chvc('Z');seg1();

        for(ii = 0;ii < 60;ii++){
            wait_ms(1000);
        }//for

        //3分
        v=ch_chvc('[');seg1();

        
        while(1){} //無限ループ
//d        while(1){           //debug
//d            swdclk=1;       //debug
//d            wait_ms(1000);  //debug
//d            swdclk=0;       //debug
//d            wait_ms(1000);  //debug
//d        }//while            //debug
        
    
    }//while //無限ループ
}//main



```

![serial_raw_temp_010_r1_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/377c31ca-cbb1-5b57-df12-fb2957f50461.jpeg)