0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ArduinoUnoと液晶、ACM1602K-NLW-BBWで表示 (ライブラリー化)

Last updated at Posted at 2022-04-03

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

x 74hc164を使用

目的
液晶のテスト

-88

o_con88.jpg

-306

o_con306.jpg

-305

o_con305.jpg

-240

o_con240.jpg

-315

o_con313.jpg

-314

o_con314.jpg

-199

o_con199.jpg

リンクもみてね

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

-o_con297.jpg- イメージ いろいろ間違っているが指摘しないように

o_con297.jpg

-o_con298.jpg- イメージ いろいろ間違っているが指摘しないように

o_con298.jpg

Arduino ファイル分割 で検索するといろいろ出てくる

引用

プログラム



//LCD_NS_UNO_1

#include <Arduino.h>

#include "LCD_UNO_1.h"


//初期化
void setup()
{

  lcd.begin(16, 2);

  lcd.clear();

} //setup


//カウンター
unsigned char LL = 0;


//メインループ
void loop()
{

  //lcd.clear();

  //文字列の表示
  lcd.setCursor(0, 0);
  lcd.print("HELLO WORLD");

  //値の表示
  lcd.setCursor(0, 1);
  lcd.print(  (int)(LL++)  );

  //1秒の待ち
  delay(1000);

} //loop




LCD_UNO_1.hのプログラム




//LCD_UNO_1.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(30);
  DW(en, 0); delay(30);
}//seg1


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


//LCD初期化関数
void lcd_int1()
{
  //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( 0x80 + 0x00 , 0  ); //1ライン目にカーソルを移動

  //debug
  char *str1 = "ON LCD ";
  while ( *str1 != 0 ) {
    seg1( *str1 , 1  );
    str1++;
  }
  delay(500);

  //画面クリア
  //seg1(   0x01  , 0  );
  //delay(5);
}//lcd_int1


//クラスの定義
struct _lcd {
  void begin(int col, int rows);     //メソッドの宣言
  void clear();                      //メソッドの宣言
  void setCursor(int col, int rows); //メソッドの宣言
  int  write(char ch);               //メソッドの宣言
  int  print(char *str1);            //メソッドの宣言
  int  print(int num);               //メソッドの宣言 オーバーロード
};


//ポートをhiにする 初期化
//メソッドの定義
void _lcd::begin(int col, int rows)
{
  lcd_int1();
  //delay(3000);
}//begin


//ポートをhiにする 初期化
//メソッドの定義
void _lcd::clear()
{
  //画面クリア
  seg1(   0x01  , 0  );
  delay(500);
}//clear


//ポートをhiにする 初期化
//メソッドの定義
void _lcd::setCursor(int col, int rows)
{
  int vram = (rows * 0x40) + col;

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


//液晶への一文字出力
//メソッドの定義
int _lcd::write(char ch)
{
  seg1(ch, 1);

  return (0);
}//write


//文字列の表示
//メソッドの定義
int _lcd::print(char *str1)
{
  //文字の中身がゼロか
  while (*str1) {

    //一文字出力
    write(*str1 ++);

  } //while

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


//文字列の表示 オーバーロード
//メソッドの定義
int _lcd::print(int num)
{
  String thisString9 = String( num );
  char *str1 = (char *)thisString9.c_str();

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

    //一文字出力
    write(*str1 ++);

  } //while

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


//実体の作成
_lcd lcd;




0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?