#define RST 12 #define CE 11 #define DC 10 //#define DIN 9 #define DIN 7 #define CLK 8 #include "font.h" void LcdWriteString(char *characters) { while(*characters) LcdWriteCharacter(*characters++); } void LcdWriteCharacter(char character) { for(int i=0; i<5; i++) LcdWriteData(ASCII[character - 0x20][i]); LcdWriteData(0x00); } void LcdWriteData(byte dat) { digitalWrite(DC, HIGH); //DC pin is low for commands digitalWrite(CE, LOW); shiftOut(DIN, CLK, MSBFIRST, dat); //transmit serial data digitalWrite(CE, HIGH); } void LcdXY(int x, int y) { LcdWriteCmd(0x80 | x); // Column. LcdWriteCmd(0x40 | y); // Row. } void LcdWriteCmd(byte cmd) { digitalWrite(DC, LOW); //DC pin is low for commands digitalWrite(CE, LOW); shiftOut(DIN, CLK, MSBFIRST, cmd); //transmit serial data digitalWrite(CE, HIGH); } void setup() { pinMode(RST, OUTPUT); pinMode(CE, OUTPUT); pinMode(DC, OUTPUT); pinMode(DIN, OUTPUT); pinMode(CLK, OUTPUT); digitalWrite(RST, LOW); digitalWrite(RST, HIGH); LcdWriteCmd(0x21); // LCD extended commands LcdWriteCmd(0xb0); // set LCD Vop (contrast) LcdWriteCmd(0x04); // set temp coefficent LcdWriteCmd(0x14); // LCD bias mode 1:40 LcdWriteCmd(0x20); // LCD basic commands LcdWriteCmd(0x0C); // LCD normal video /* for(int i=0; i<504; i++) LcdWriteData(0x00); // clear LCD LcdXY(20,2); LcdWriteString("THE END"); */ char string[8]; for(int i=0; i<504; ++i) { LcdWriteData(0x55); LcdWriteData(0xAA); } for(int i=0; i<252; ++i) { LcdWriteData(0xAA); LcdWriteData(0x55); } uint8_t frame[504]; for(int i=0; i<504; i++) frame[i]=(i%256); long t0=micros(); // for(int i=0; i<504; i++) LcdWriteData(0x00); // clear LCD digitalWrite(DC, HIGH); //DC pin is low for commands digitalWrite(CE, LOW); uint8_t bitD = digitalPinToBitMask(DIN); uint8_t bitC = digitalPinToBitMask(CLK); volatile uint8_t *outD=portOutputRegister(digitalPinToPort(DIN)); volatile uint8_t *outC=portOutputRegister(digitalPinToPort(CLK)); for(int i=0; i<504; i++) { uint8_t val=frame[i]; for(uint8_t j=0; j<8; ++j, val<<=1) { // digitalWrite(DIN, !!(val & (1 << (7 - j)))); uint8_t oldSREG = SREG; cli(); // DIN, now pin 7, is no PWM pin and valid if ((val & 0x80)!=0) *outD |= bitD; else *outD &= ~bitD; // SREG = oldSREG; // digitalWrite(CLK, HIGH); // cli(); // CLK, pin 8, is no PWM pin and valid *outC |= bitC; // SREG = oldSREG; // digitalWrite(CLK, LOW); // cli(); *outC &= ~bitC; SREG = oldSREG; } } digitalWrite(CE, HIGH); long t1=micros(); delay(2000); LcdXY(24,2); LcdWriteString(dtostrf(1000000.0/(t1-t0),7,2,string)); } void loop() { }