#include #define CLK 6 #define DAT 5 #define WAIT 20 #define sendCommand(X) sendChar(X) uint8_t rwbuff[64]; //uint8_t debug[10]; void setup() { // PIC LCD pinMode(CLK, OUTPUT); pinMode(DAT, OUTPUT); digitalWrite(CLK, HIGH); digitalWrite(DAT, HIGH); Wire.begin(); // プルアップを無効 //pinMode(SDA, INPUT); //pinMode(SCL, INPUT); delay(300); // PICキーパッド&LCD待ち sendCommand(0x90); // 表示クリア sendCommand(0x9a); // ブリンクカーソル } void loop() { int p; // バックアップファイル初期化を指示 rwbuff[0] = 0; sendOneAccount(rwbuff); // バックアップデータ送信1アカウントは64バイトの設定 for(int j=0; j<10; j++) { for(int i=0; i<64; i++) rwbuff[i] = '0' + j + i; sendOneAccount(rwbuff); } sendStr("Send DATA"); delay(3000); sendCommand(0x90); // バックアップデータ受信 while(true) { recvOneAccount(rwbuff); if(rwbuff[0] == 0) break; showData(); } while(true); // テスト終了 } // データ表示 void showData() { int p = 0; for(int j=0; j<64; j++) { sendChar(rwbuff[p]); if((++p % 16) == 0) { delay(500); sendCommand(0x80); } } } // データ書き出し void sendOneAccount(uint8_t* buff) { uint8_t p = 0; for(int j=0; j<2; j++) { Wire.beginTransmission(8); for(int i=0; i<32; i++) Wire.write(buff[p++]); Wire.endTransmission(); } } // データ読み込み void recvOneAccount(uint8_t* buff) { int p = 0; for(int j=0; j<2; j++) { Wire.requestFrom(8, 32); while(Wire.available()) buff[p++] = Wire.read(); } } /// LCD with PIC /// void sendStr(uint8_t* str) { uint8_t* p; p = str; while (*p != 0) { sendChar(*(p++)); } } void sendChar(uint8_t chr) { for (int n = 0; n < 8; n++) { digitalWrite(DAT, (chr >> n) & 1); delayMicroseconds(WAIT); digitalWrite(CLK, LOW); delayMicroseconds(WAIT); digitalWrite(CLK, HIGH); } }