LoginSignup
0
0

More than 3 years have passed since last update.

STM32G031のArduinoでの液晶,AQM0802Aで表示(STM32G031J6M6)(i2c)

Last updated at Posted at 2021-02-05

AQM0802Aとは、秋月で売っているi2cの液晶である。
なにがすごいのかと言うと信号線2本でマイコンと接続できる。
8文字2行のキャラクター液晶である。

1.SCLとSDAを接続、プルアップも忘れずに
2.電源の接続
3.下記のソースコードを書き込む
4.コンパイル実行で表示されたら終了
5.おわり

おまけ
古いスイッチサイエンスのソースを使っています。

x PA11,PA12は、いつも間違えるので各自確認のこと

STM32G031を使用した。液晶時計ができました。
STM32G031のArduinoでの時計,DS1307で時刻表示( AQM0802A i2c)(STM32G031J6M6)
https://qiita.com/caa45040/items/fee158b4d04a5139bae0

LPC1114のMbedでの時計,DS1307で時刻表示( AQM0802A i2c)(ハードはichigojam)
https://qiita.com/caa45040/items/5f0e7f0f3ebcae613ec2



#include <Wire.h>

#define vddPin 16    // ArduinoA2
#define gndPin 17    // ArduinoA3
//#define sdaPin 18    // ArduinoA4
//#define sclPin 19    // ArduinoA5

#define sdaPin PA12    // ArduinoA4
#define sclPin PA11    // ArduinoA5


#define I2Cadr 0x3e  // 固定
byte contrast = 35;  // コントラスト(0~63)

void setup() {
  pinMode(gndPin, OUTPUT);
  digitalWrite(gndPin, LOW);
  pinMode(vddPin, OUTPUT);
  digitalWrite(vddPin, HIGH);
  delay(500);
  //Wire.begin();
  Wire.begin(sdaPin,sclPin);
  lcd_cmd(0b00111000); // function set
  lcd_cmd(0b00111001); // function set
  lcd_cmd(0b00000100); // EntryModeSet
  lcd_cmd(0b00010100); // interval osc
  lcd_cmd(0b01110000 | (contrast & 0xF)); // contrast Low
  lcd_cmd(0b01011100 | ((contrast >> 4) & 0x3)); // contast High/icon/power
  lcd_cmd(0b01101100); // follower control
  delay(200);
  lcd_cmd(0b00111000); // function set
  lcd_cmd(0b00001100); // Display On
  lcd_cmd(0b00000001); // Clear Display
  delay(2);
}

void loop() {
  lcd_setCursor(0, 0);
  lcd_printStr("SWITCH");
  lcd_setCursor(0, 1);
  lcd_printStr("SCIENCE");
  delay(100);
}

// コマンド RSを0
void lcd_cmd(byte x) {
  Wire.beginTransmission(I2Cadr);
  Wire.write(0b00000000); // CO = 0,RS = 0
  Wire.write(x);
  Wire.endTransmission();
}

// データ RSを1
void lcd_contdata(byte x) {
  Wire.write(0b11000000); // CO = 1, RS = 1
  Wire.write(x);
}

//ラストのデータは、COは、0
void lcd_lastdata(byte x) {
  Wire.write(0b01000000); // CO = 0, RS = 1
  Wire.write(x);
}

// 文字の表示
void lcd_printStr(const char *s) {
  Wire.beginTransmission(I2Cadr);
  while (*s) {
    if (*(s + 1)) {
      lcd_contdata(*s);
    } else {
      lcd_lastdata(*s);
    }
    s++;
  }
  Wire.endTransmission();
}

// 表示位置の指定
void lcd_setCursor(byte x, byte y) {
  lcd_cmd(0x80 | (y * 0x40 + x));
}


i2c_8x2_031_1.jpg

i2c_g031_p_1.jpg

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