STM32L010とS-5851で液晶温度計 (VSCのCubeIDE)(AQM0802A) HAL



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

x PlatformIOと言うらしいが超ムズ(以下省略)(誰かに手伝ってもらいましょう?)

目的
I2Cのテスト

LCD_5851_010_2内をいろいろ適当にコピー


https://os.mbed.com/users/caa45040/code/f303_h_p1/




![o_con72.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/bae3a48b-386f-6d83-1bdc-c18460d5b1f6.jpeg)




![o_con106.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a9eb1913-b44e-69f3-73f0-aaccf1ee84c5.jpeg)





主なソース




```c++


int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */


    const int ADDR       = 0x90; //  address 5851
    //const int ADDR       = 0x72; //  address 751
    const int ADDR_LCD   = 0x7C; //  address

    //液晶の初期化の文字列
    uint8_t INIT_com[]= {
        0x0,0x38,
        0x0,0x39,
        0x0,0x4,
        0x0,0x14,
        0x0,0x70,
        0x0,0x56,
        0x0,0x6C,
        0x0,0x38,
        0x0,0xC,
        0x0,0x1,
        0x40,0x41
    };

    //画面のクリア
    uint8_t INIT_cls[]= {0x0,0x1};


    //液晶の初期化
    HAL_Delay(200); //液晶の安定待ち
    for(int ii=0; ii<11; ii++) {
        HAL_I2C_Master_Transmit(&hi2c1, ADDR_LCD, &INIT_com[ii*2], 2, 3000);
        HAL_Delay(3);
    } //for

    int     tempval;        //温度
    char    data_read[6];   //i2cバッファー
    int     n10;            //10の桁
    uint8_t b[6];           //バッファー

 


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */


        //液晶のクリア
        HAL_I2C_Master_Transmit(&hi2c1, ADDR_LCD, INIT_cls, 2, 3000);
        HAL_Delay(3);

        //温度センサーの初期化
        //set address 0
        HAL_I2C_Master_Transmit(&hi2c1, ADDR, (uint8_t *)"\000", 1, 3000); //addres 0
        HAL_Delay(1);

        //温度の読み込み
        // Read temperature register
        HAL_I2C_Master_Receive(&hi2c1, ADDR, b, 1, 3000);

        //温度の保存
        // Calculate temperature value in Celcius
        tempval =  b[0];

        //tempval = 12; //debug

        //計算
        // Calculation temp
        //10の割り算 0から1028までは、正しい。主に0から999 ((n*205)>>11)
        n10     = (tempval*205)>>11;      //10の桁 tempval/10
        tempval = tempval - ( n10 * 10 ); //1の桁  tempval%10

        //液晶に出力 xなぜか連続送信するとバグる為に個別送信
        // Display result
        data_read[0] = '0' + n10;
        data_read[1] = '0' + tempval;
        data_read[2] = 0;
        for(int ii=0; ii < 2 ; ii++) {
            b[0]='@';
            b[1]=data_read[ii];
            HAL_I2C_Master_Transmit(&hi2c1, ADDR_LCD, b,  2, 3000);
            HAL_Delay(1);
        }//for

        //1秒待つ
        HAL_Delay(1000);


    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}



```