Arduino UNOと液晶、ACM1602K-NLW-BBW(SC1602互換?)でHello Worldを表示


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


がんばってライブラリ化しました。参考にしてください。

https://qiita.com/caa45040/items/07df54303d1ded7048a0


x ACM1602K-NLW-BBWで検索な (ついでに画像検索)
x わかりやすさ、重視(高速化や軽量化を止めて)(置いてけ堀においてきすぎた)
x HD44780コンパチブル
X SC1602のような物　なぜかSC1602の記事が多く売れているみたい
X ACM1602Kは、安い、見やすい、カッコイイ

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

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

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


資料


ArduinoUNOを使い1から4096を文字列に変換


https://qiita.com/caa45040/items/1837fd01959df902c8de



-39

![h_con39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e9c38486-ccf9-ea76-d4c3-4d94dc5aaa51.jpeg)

-88

![o_con88.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/33f75db2-4966-5e26-6ce0-0a503ffb4277.jpeg)

-86

![o_con86.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/318331b8-983a-bac0-fe50-1e12a9faf1c5.jpeg)



![o_con89.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/46176b8e-9e3d-c15d-f2f9-06980fc51bef.jpeg)



![o_con90.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/17e704ec-8af6-26bb-22de-15f95c763b2f.jpeg)



![o_con91.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f1d31862-e279-dec6-f970-777588950298.jpeg)



![o_con92.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/78c31d49-8451-1aa4-757d-2dd82146ca4b.jpeg)



![o_con305.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/1fd75309-a389-7a8e-3da8-528519fd41b3.jpeg)




https://synapse.kyoto/glossary/74hc164/page001.html



http://100year.cocolog-nifty.com/blog/2010/04/arduinolcd3-0bb.html



https://akizukidenshi.com/catalog/g/gP-10185/




コメント付き


```c++


#include <Arduino.h>

#define DW digitalWrite

#define swdclk 4 // 4pin
#define swdio  3 // 3pin
#define en     2 // 2pin

//液晶に一文字送信する
void seg1(int v,int rs)
{
  for(int jj=0;jj<8;jj++){
    if( (v<<jj) & 0x80 ){      
      DW(swdio,1); //ビットが1
    } else {
      DW(swdio,0); //ビットが0
    }//endif
    DW(swdclk,1);
    DW(swdclk,0);
  }//for
  DW(swdio,rs);   
  DW(en,1); delay(1);
  DW(en,0);  
}//seg1

//文字列の表示
int ns_printf(char *str1) {
  //文字の中身がゼロか
  while(*str1){
    //一文字出力
    seg1( *str1 ++ , 1  );
  } //while
  //戻り値
  return(0);
}//ns_printf

//液晶の初期化コード
int lcd_int[]={
  0x30,0x30,0x30,0x38,0x08,0x01,0x06,0x08+0x04
};//lcd_init

//初期化
void setup() {
  //GPIO初期化
  pinMode(swdclk,OUTPUT);
  pinMode(swdio,OUTPUT);
  pinMode(en,OUTPUT);
  DW(en,0);

  //液晶の初期化
  for(int ii=0;ii<8;ii++){ 
    seg1( lcd_int[ii] , 0);delay(2);
  }//for

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

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

  ns_printf("Hello World !"); //表示
}//setup

//無限ループ
void loop() {}




```


コメントなし


```c++



#include<Arduino.h>

#define DW digitalWrite
#define swdclk 4
#define swdio 3
#define en 2

void seg1(int v,int rs)
{
  for (int jj=0;jj<8;jj++){
    if( (v<<jj)&0x80 ){
      DW(swdio,1);
    }else{
      DW(swdio,0);
    }
    DW(swdclk,1);
    DW(swdclk,0);
  }
  DW(swdio,rs);
  DW(en,1);delay(1);
  DW(en,0);
}

int ns_printf(char *str1){
  while (*str1){
    seg1(*str1++,1);
  }
  return(0);
}

int lcd_int[]={
  0x30,0x30,0x30,0x38,0x08,0x01,0x06,0x08+0x04
};

void setup(){
  pinMode(swdclk,OUTPUT);
  pinMode(swdio,OUTPUT);
  pinMode(en,OUTPUT);
  DW(en,0);
  for(int ii=0;ii<8;ii++){
    seg1(lcd_int[ii],0);delay(2);
  }
  seg1(0x80+0x00,0);
  ns_printf("Hello World !");
}

void loop(){}




```


シフトレジスターのテスト(HS164_TEST_UNO1)


```c++



#include <Arduino.h>

#define DW digitalWrite

#define swdclk 4 // 4pin
#define swdio  3 // 3pin
#define en     2 // 2pin

//液晶に一文字送信する
void seg1(int v,int rs)
{
  for(int jj=0;jj<8;jj++){
    if( (v<<jj) & 0x80 ){      
      DW(swdio,1); //ビットが1
    } else {
      DW(swdio,0); //ビットが0
    }//endif
      DW(swdclk,1);
      DW(swdclk,0);
  }//for
  DW(swdio,rs);   
  DW(en,1); delay(1);
  DW(en,0);  
}//seg1


//初期化
void setup() {

  //GPIO初期化
  pinMode(swdclk,OUTPUT);
  pinMode(swdio,OUTPUT);
  pinMode(en,OUTPUT);
  DW(en,0);

}//setup


//無限ループ
void loop() {

  seg1( 0xFF , 1 );
  delay(1000);

  seg1( 0x00 , 1 );
  delay(1000);

}




```