STM32G031と液晶、ACM1602K-NLW-BBWでHello Worldを表示(STM32G031J6M6)


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

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

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

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



#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

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
}


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

void loop() {
  // put your main code here, to run repeatedly:

    //ファンクションセット1
    rs=0;
    v=0x30;seg1();
    delay(5);    
 
    //ファンクションセット2
    rs=0;
    v=0x30;seg1();
    delay(1);   
 
    //ファンクションセット3
    rs=0;
    v=0x30;seg1();   
 
    //ファンクションセット 2ラインモード
    rs=0;
    v=0x38;seg1();   
 
    //表示オフ
    rs=0;
    v=0x08;seg1();   
 
    //画面クリア
    rs=0;
    v=0x01;seg1();
    delay(2);         
 
    //エントリーモードセット
    rs=0;
    v=0x06;seg1();     
 
    //表示オン
    rs=0;
    v=0x08+0x04;seg1(); 
  
    //@文字の表示
    rs=1;
    v='@';seg1();
    delay(500); 
 
    //1ライン目にカーソルを移動
    rs=0;
    v=0x80+0x00;seg1();
 

    int ii;
    char ss1[]="Hello World !";
    ii=0;
    while(ss1[ii]!=0){
        //文字の表示
        rs=1;
        v=ss1[ii];ii++;seg1();
    } //while
 
while(1){} //無限ループ

} //loop