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
//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