LoginSignup
0
0

16x16の(カラー)スプライトであそぶ(液晶)(Arduino UNO)(ATM0177B5)(ST7735)

Last updated at Posted at 2024-07-05

x 過去ログをみよ

メイン処理


  for (int y = 0; y < 160; y++) {
    for (int x = 0; x < 128; x++) {

いろいろ

    }//for x
  }//for y



      //スプライト1の表示
      a = 0;
      if ( (x + 1) > ux1 && x < (ux1 + 16) && (y + 1) > uy1 && y < (uy1 + 16) ) {
        //相対座標からキャラクターパターンを求める
        a = pgm_read_word_near( Sprite1 + ((y - uy1) * 16) + (x - ux1) );
      }//ux1,uy1
      if (a) { // a != 0
        b = a;
      }//end if


o_coq195.jpg

o_coq194.jpg




//ssd1306_Sound_Sprite_c16x16_UNO_1


//インクルド
#include <Arduino.h>


//定義
//GPIO
#define GPIO_RESET_P  2 //RESET=1
#define GPIO_RS_P    17 //RS=0 (A3)
#define GPIO_WR_P     3 //WR=1
#define GPIO_RD_P    16 //RD=1 (A2)

//8bitのGPIOの設定
int DBx[8] = {4, 15, 5, 14, 6, 9, 7, 8};

// GPIO A4 I2Cで使用済み
// GPIO A5 I2Cで使用済み

#define GPIO1(s) digitalWrite(GPIO_RESET_P , s)  //RESET
#define GPIO2(s) digitalWrite(GPIO_RS_P    , s)  //A0
#define GPIO3(s) digitalWrite(GPIO_WR_P    , s)  //WR
#define GPIO4(s) digitalWrite(GPIO_RD_P    , s)  //RD

//全体のカラー
int s_color = 0xFFFF; //ハイホワイト


//パラレルポートにデータをセットする。
void GPIO_8BIT(int s)
{

  //8bitのGPIOのセット
  for (int ee = 0; ee < 8; ee++) {
    digitalWrite(DBx[ee], (s >> ee) & 0x01); //DB7
  }//for ee

} //GPIO_8BIT

//コマンドの書き込み
void LCD_Write_CMD(int a)
{
  GPIO2(0); //A0=0;
  GPIO_8BIT(a);//P1=a; data
  GPIO3(0);//WRB=0;
  GPIO3(1);//WRB=1;
} //LCD_Write_CMD


//データ書き込み
void LCD_Write_Data(int a)
{
  GPIO2(1);//A0=1;
  GPIO_8BIT(a);//P1=a; data
  GPIO3(0);//WRB=0;
  GPIO3(1);//WRB=1;
} //LCD_Write_Data


//液晶の初期化処理
void ATM0177B5_ST7735S_Init(void)
{

  //----------  ST7735S Reset Sequence  --------//

  GPIO1(1);//LCD_RESET=1;

  delay(1); //Delay 1ms

  GPIO1(0);//LCD_RESET=0;

  delay(1); //Delay 1ms

  GPIO1(1);//LCD_RESET=1;

  delay(120); //Delay 120ms

  //----------  ST7735S Reset Sequence  --------//


  LCD_Write_CMD(0x01);//SOFTWARE RESET
  delay(50);

  LCD_Write_CMD(0x11);//SLEEP OUT
  delay(200);

  LCD_Write_CMD(0x29);//display on
  delay(100);

  LCD_Write_CMD(0x3a);//Interface pixel format
  LCD_Write_Data(0x05);//16bit mode
  delay(100);

  LCD_Write_CMD(0x36);//RGB-RGR format
  LCD_Write_Data(0x08);//RGB mode
  delay(100);

  //画面の書き込み開始
  //LCD_Write_CMD(0x2C); //memory write
  //GPIO2(1);//A0=1;
  //delay(2);

} //ATM0177B5_ST7735S_Init


//全体のカラーの変更
void set_color(int color) {

  s_color = color;

}//set_color


void Dot(int x, int y, int co) {

  GPIO_8BIT( (co >> 8) & 0xff );

  GPIO3(0);//WRB=0;
  GPIO3(1);//WRB=1;

  GPIO_8BIT( co & 0xff );

  GPIO3(0);//WRB=0;
  GPIO3(1);//WRB=1;

}


//スプライトの定義
const int Sprite1[] PROGMEM = {

  //  1      2      3      4     5      6      7       8      1      2      3     4      5      6      7      8

  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0x7BEF, 0xF800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xF800, 0xF800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000,
  0x7BEF, 0x7BEF, 0x7BEF, 0x0000, 0x7BEF, 0x0000, 0x7BEF, 0x0000, 0x7BEF, 0x0000, 0x7BEF, 0x0000, 0x0000, 0x7BEF, 0x7BEF, 0x7BEF,
  0x0000, 0x0000, 0xE71C, 0xD69A, 0x0000, 0xD69A, 0xD69A, 0xD69A, 0xC618, 0xC618, 0xC618, 0x0000, 0xC618, 0xC618, 0xC618, 0x0000,
  0x0000, 0x0000, 0x0000, 0x738E, 0x738E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x738E, 0x738E, 0xC618, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0xE71C, 0xE71C, 0xD69A, 0xD69A, 0x738E, 0x738E, 0x738E, 0x738E, 0x738E, 0xC618, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x738E, 0x738E, 0x738E, 0x738E, 0x738E, 0x738E, 0xC618, 0xC618, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,

  //  1      2      3      4     5      6      7       8      1      2      3     4      5      6      7      8

  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001C, 0x001C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001C, 0x001C, 0x001C, 0x4208, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x001C, 0x001C, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001C, 0x001C, 0x4208, 0x4208, 0x4208, 0xFFFF, 0xFFFF, 0x4208, 0x4208, 0x001C, 0x001C, 0x0000, 0x0000,
  0x0000, 0x0000, 0x001C, 0x001C, 0x001C, 0x4208, 0x4208, 0x4208, 0xFFFF, 0x4208, 0x4208, 0x4208, 0x001C, 0x001C, 0x0000, 0x0000,
  0x0000, 0x0000, 0x001C, 0x001C, 0x001C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFE0, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x001C, 0x0000, 0x0000,
  0x0000, 0xFFFF, 0x001C, 0x001C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFE0, 0xFFE0, 0xFFE0, 0xFFFF, 0xFFFF, 0x001C, 0x001C, 0xFFFF, 0x0000,
  0xFFFF, 0xFFFF, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0xFFE0, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0xFFFF, 0xFFFF,
  0xFFFF, 0xFFFF, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x0000, 0xFFFF,
  0x0000, 0x0000, 0x001C, 0x001C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x001C, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001C, 0xFFE0, 0xFFE0, 0xFFE0, 0x001F, 0x001F, 0xFFE0, 0xFFE0, 0xFFE0, 0x001C, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x001C, 0xFFE0, 0xFFE0, 0xFFE0, 0x001F, 0x001F, 0xFFE0, 0xFFE0, 0xFFE0, 0x001C, 0x0000, 0x0000, 0x0000,

};

int ux1 = 16; int uy1 = 16;
int ux2 = 0; int uy2 = 0;

//パターンRAMの内容を液晶に転送
void Sound_Oscilloscope(int L1) {


  //画面の書き込み開始
  LCD_Write_CMD(0x2C); //memory write
  GPIO2(1);//A0=1;
  delay(2);

  int a;
  int b;
  for (int y = 0; y < 160; y++) {
    for (int x = 0; x < 128; x++) {
      b = 0;


      //スプライト2の表示
      a = 0;
      if ( (x + 1) > ux2 && x < (ux2 + 16) && (y + 1) > uy2 && y < (uy2 + 16) ) {
        //相対座標からキャラクターパターンを求める
        a = pgm_read_word_near( Sprite1 + ((y - uy2) * 16) + (x - ux2) + (16 * 16) );
      }//ux1,uy1
      if (a) { // a != 0
        b = a;
      }//end if



      //スプライト1の表示
      a = 0;
      if ( (x + 1) > ux1 && x < (ux1 + 16) && (y + 1) > uy1 && y < (uy1 + 16) ) {
        //相対座標からキャラクターパターンを求める
        a = pgm_read_word_near( Sprite1 + ((y - uy1) * 16) + (x - ux1) );
      }//ux1,uy1
      if (a) { // a != 0
        b = a;
      }//end if



      //ドットのポイントをうつ
      Dot(x, y, b);

    }//for x
  }//for y


}//Sound_Oscilloscope


//初期化
void setup() {

  //ポートのモード設定
  //アウトプットモード
  pinMode(GPIO_RESET_P, OUTPUT); //REST
  pinMode(GPIO_RS_P,    OUTPUT); //RS
  pinMode(GPIO_WR_P,    OUTPUT); //WR
  pinMode(GPIO_RD_P,    OUTPUT); //RD

  //8bit分OUTPUTにする
  for (int ee = 0; ee < 8; ee++) {
    pinMode(DBx[ee], OUTPUT);
  }//for ee

  //ポートの初期化
  GPIO4(1);//RD=1
  GPIO3(0);//WR=0
  GPIO2(0);//RS=0
  GPIO1(1);//RESET=1

  delay(500); //0.5秒待つ

  //液晶の初期化処理
  ATM0177B5_ST7735S_Init();

} //setup


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

  static int L1 = 0;

  L1 = L1 + ( random(16) - 8 );

  //L1 = 64;

  if ( L1 < 0 ) {
    L1 = 0;
  } else if ( L1 > 127 ) {
    L1 = 127;
  }

  Sound_Oscilloscope(L1); //画面の再表示

  //delay(1000); //1秒待つ debug

} //loop


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