STM32G031と液晶、ACM1602K-NLW-BBWで3分タイマー(STM32G031J6M6)


x 原因は、わからないが液晶がちらつく場合は、ウェートを調整してね!!


STM32G031J6M6でArduinoを使い16文字2行液晶に3分を
表示するプログラム

74hc164シフトレジスターを使用した。
液晶とのピン数を節約した。信号線10本から
信号線3本に減らした。

1 CLK クロック端子(緑色)
2 RSDATA RS端子とデータの共有端子(黄色)
3 E 読み込み書き込み同期信号(青色)


秋月電子
キャラクター液晶 [ACM1602K-NLW-BBW] 通販コード　P-10185
半固定ボリューム１０ｋΩ [TSR-065-103-R] 通販コード　P-06063

アイテンドウ
8ビットシフトレジスタ [HD74LS164P]　www.aitendo.com/product/12485


-39-

![h_con39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/3bbd801d-24b7-5ce3-4030-b5b9c5cba294.jpeg)

-41-

![h_con41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/cb56fc1b-a674-68bd-d853-b92167559796.jpeg)

-40-

![h_con40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e5f87a19-a679-da62-2979-077337208111.jpeg)

-42-

![h_con42.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/df68adbd-881b-f5e4-d455-03bf3d4b9285.jpeg)

-43-

![h_con43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/25fae9f1-c2c3-0913-3c51-5a4d4b11cb65.jpeg)

-44-

![h_con44.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/faede13a-5439-b2a1-0f2c-59e8212f3710.jpeg)

-45-

![h_con45.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b196b0d9-6ef5-67f5-13c1-d76b64e5c5ee.jpeg)

-38-

![h_con38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/12003aaa-54f2-3c0a-972a-43ffa85971e3.jpeg)

-led sift-

![led_sift_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8a166de9-7019-e3e9-479d-56458d415b65.jpeg)


-190


![o_con190.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8e1f4ddb-0910-b036-d1d2-cb05d9a6e604.jpeg)


-240

![o_con240.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/1ae934df-6b6e-0ca1-ebf2-f5055fa4c5e7.jpeg)


-241

![o_con241.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/92d57892-5090-9284-7d6c-5c5a35cae956.jpeg)


-o_con88-


![o_con88.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7c7dff24-97b3-8a21-1276-6e9207378aab.jpeg)




```c++


#include <Arduino.h>

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

#define DW   digitalWrite

//#define swdclk   PA14 // 8pin
//#define swdio    PA13 // 7pin
//#define swdclk   PA11 // 5pin
//#define swdio    PA12 // 6pin
#define swdclk   PA12 // 6pin
#define swdio    PA11 // 5pin
//#define t_led1   PA12 // 6pin
//#define t_led2   PA11 // 5pin
#define en       PA0  // 4pin
#define in7      PB7  // 1pin

// tx PA14(PB6) 8PIN
// rx PC14(PB7) 1PIN

int kk;
#define oun_min() for(kk=0;kk<60;kk++){delay(1000);}

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

void seg1(int v,int rs)
{
    for(int jj=0;jj<8;jj++){
        if( (v & b8[jj]) == 0 ){
                DW(swdio,0); //ビットが0
        } else {
                DW(swdio,1); //ビットが1
        }//endif
        DW(swdclk,1);
        DW(swdclk,0);
    }//for
    
    DW(swdio,rs);   
    DW(en,1);       delayMicroseconds(40);
    DW(en,0);       
}//seg1

//文字列の表示 nana_seg
int ns_printf(char *str1) {

    //文字の中身がゼロか
    while(*str1){

        //一文字出力
        //ns_putc(*str1 ++);
        seg1( *str1 ++ , 1  );
        //delay(200); //debug

    } //while

    //戻り値
    return(0);
}//ns_printf

void setup() {
  // put your setup code here, to run once:

    delay(3000); //not Delete

    pinMode(swdclk,OUTPUT);
    pinMode(swdio,OUTPUT);
    pinMode(en,OUTPUT);
    pinMode(in7,INPUT_PULLUP);

    DW(en,0);
    DW(swdio,0);
    for(int i=0;i<10;i++){
        DW(swdclk,1);
        delay(15);
        DW(swdclk,0);
        delay(15);
    } //for
}

void loop() {

  int lcd_int[]={
    
    //ファンクションセット1 (0)
    0x30,
    //ファンクションセット2 (1)
    0x30,
    //ファンクションセット3 (2)
    0x30,
    //ファンクションセット 2ラインモード (3)
    0x38,  
    //表示オフ (4)
    0x08,
    //画面クリア (5)
    0x01,
    //エントリーモードセット (6)
    0x06,  
    //表示オン (7)
    0x08+0x04

  };//lcd_init

  for(int ii=0;ii<8;ii++){ 

    seg1( lcd_int[ii] , 0);
    delay(2);

  }//for
  
  //1ライン目にカーソルを移動
  seg1( 0x80+0x00 , 0  );

  char ss1[]="Hello World !";
  
  ns_printf( ss1 );

  delay(500);
  
  //画面クリア
  seg1(   0x01  , 0  ); 
  delay(2);

  ns_printf( "0," );
  oun_min()
  ns_printf( "1," );
  oun_min()
  ns_printf( "2," );
  oun_min()
  ns_printf( "3" );

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

} //loop




```