mirror of
https://github.com/YuzuZensai/MCUFRIEND_kbv.git
synced 2026-01-06 04:32:38 +00:00
start off commit
This commit is contained in:
257
examples/LCD_ID_readreg/LCD_ID_readreg.ino
Normal file
257
examples/LCD_ID_readreg/LCD_ID_readreg.ino
Normal file
@@ -0,0 +1,257 @@
|
||||
// adapted from LCD_ID_Reader from http://misc.ws/lcd_information
|
||||
// controllers either read as 16-bit or as a sequence of 8-bit values
|
||||
|
||||
//-- Arduino UNO or Mega 2560 Plugged as shield
|
||||
#define LCD_RST A4
|
||||
#define LCD_CS A3
|
||||
#define LCD_RS A2
|
||||
#define LCD_WR A1
|
||||
#define LCD_RD A0
|
||||
|
||||
#define LCD_D0 8
|
||||
#define LCD_D1 9
|
||||
#define LCD_D2 2
|
||||
#define LCD_D3 3
|
||||
#define LCD_D4 4
|
||||
#define LCD_D5 5
|
||||
#define LCD_D6 6
|
||||
#define LCD_D7 7
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
while (!Serial) ;
|
||||
Serial.println("Read Registers on MCUFRIEND UNO shield");
|
||||
Serial.println("controllers either read as single 16-bit");
|
||||
Serial.println("e.g. the ID is at readReg(0)");
|
||||
Serial.println("or as a sequence of 8-bit values");
|
||||
Serial.println("in special locations (first is dummy)");
|
||||
Serial.println("");
|
||||
lcdInit();
|
||||
lcdReset(); //ensures that controller is in default state
|
||||
readReg(0x00, 2, "ID: ILI9320, ILI9325, ILI9335, ...");
|
||||
readReg(0x04, 4, "Manufacturer ID");
|
||||
readReg(0x09, 5, "Status Register");
|
||||
readReg(0x61, 2, "RDID1 HX8347-G");
|
||||
readReg(0x62, 2, "RDID2 HX8347-G");
|
||||
readReg(0x63, 2, "RDID3 HX8347-G");
|
||||
readReg(0x64, 2, "RDID1 HX8347-A");
|
||||
readReg(0x65, 2, "RDID2 HX8347-A");
|
||||
readReg(0x66, 2, "RDID3 HX8347-A");
|
||||
readReg(0x67, 2, "RDID Himax HX8347-A");
|
||||
readReg(0x70, 2, "Panel Himax HX8347-A");
|
||||
readReg(0xA1, 5, "RD_DDB SSD1963");
|
||||
readReg(0xB0, 2, "RGB Interface Signal Control");
|
||||
readReg(0xB4, 2, "Inversion Control");
|
||||
readReg(0xB6, 5, "Display Control");
|
||||
readReg(0xB7, 2, "Entry Mode Set");
|
||||
readReg(0xBF, 6, "ILI9481, HX8357-B");
|
||||
readReg(0xC0, 6, "Panel Control");
|
||||
readReg(0xCC, 2, "Panel Control");
|
||||
readReg(0xD0, 3, "Power Control");
|
||||
readReg(0xD2, 5, "NVM Read");
|
||||
readReg(0xD3, 4, "ILI9341, ILI9488");
|
||||
readReg(0xDA, 2, "RDID1");
|
||||
readReg(0xDB, 2, "RDID2");
|
||||
readReg(0xDC, 2, "RDID3");
|
||||
readReg(0xEF, 6, "ILI9327");
|
||||
readReg(0xF2, 12, "Adjust Control 2");
|
||||
readReg(0xF6, 4, "Interface Control");
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// put your main code here, to run repeatedly:
|
||||
|
||||
}
|
||||
|
||||
void printhex(uint8_t val)
|
||||
{
|
||||
if (val < 0x10) Serial.print("0");
|
||||
Serial.print(val, HEX);
|
||||
}
|
||||
|
||||
void readReg(uint16_t reg, uint8_t n, const char *msg)
|
||||
{
|
||||
uint8_t val8;
|
||||
lcdReset();
|
||||
lcdSetWriteDir();
|
||||
/*
|
||||
lcdWriteCommand(0xF6);
|
||||
lcdWriteData(0x01);
|
||||
lcdWriteData(0x01);
|
||||
lcdWriteData(0x03);
|
||||
*/
|
||||
lcdWriteCommand(reg);
|
||||
Serial.print("reg(0x");
|
||||
printhex(reg >> 8);
|
||||
printhex(reg);
|
||||
Serial.print(")");
|
||||
lcdSetReadDir();
|
||||
while (n--) {
|
||||
val8 = lcdReadData8();
|
||||
Serial.print(" ");
|
||||
printhex(val8);
|
||||
}
|
||||
lcdSetWriteDir();
|
||||
Serial.print("\t");
|
||||
Serial.println(msg);
|
||||
}
|
||||
|
||||
void lcdInit()
|
||||
{
|
||||
pinMode(LCD_CS, OUTPUT);
|
||||
digitalWrite(LCD_CS, HIGH);
|
||||
pinMode(LCD_RS, OUTPUT);
|
||||
digitalWrite(LCD_RS, HIGH);
|
||||
pinMode(LCD_WR, OUTPUT);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
pinMode(LCD_RD, OUTPUT);
|
||||
digitalWrite(LCD_RD, HIGH);
|
||||
pinMode(LCD_RST, OUTPUT);
|
||||
digitalWrite(LCD_RST, HIGH);
|
||||
}
|
||||
|
||||
void lcdReset()
|
||||
{
|
||||
digitalWrite(LCD_RST, LOW);
|
||||
delay(2);
|
||||
digitalWrite(LCD_RST, HIGH);
|
||||
delay(10); //allow controller to re-start
|
||||
}
|
||||
|
||||
void lcdWrite8(uint16_t data)
|
||||
{
|
||||
digitalWrite(LCD_D0, data & 1);
|
||||
digitalWrite(LCD_D1, (data & 2) >> 1);
|
||||
digitalWrite(LCD_D2, (data & 4) >> 2);
|
||||
digitalWrite(LCD_D3, (data & 8) >> 3);
|
||||
digitalWrite(LCD_D4, (data & 16) >> 4);
|
||||
digitalWrite(LCD_D5, (data & 32) >> 5);
|
||||
digitalWrite(LCD_D6, (data & 64) >> 6);
|
||||
digitalWrite(LCD_D7, (data & 128) >> 7);
|
||||
}
|
||||
|
||||
uint16_t lcdRead8()
|
||||
{
|
||||
uint16_t result = digitalRead(LCD_D7);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D6);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D5);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D4);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D3);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D2);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D1);
|
||||
result <<= 1;
|
||||
result |= digitalRead(LCD_D0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void lcdSetWriteDir()
|
||||
{
|
||||
pinMode(LCD_D0, OUTPUT);
|
||||
pinMode(LCD_D1, OUTPUT);
|
||||
pinMode(LCD_D2, OUTPUT);
|
||||
pinMode(LCD_D3, OUTPUT);
|
||||
pinMode(LCD_D4, OUTPUT);
|
||||
pinMode(LCD_D5, OUTPUT);
|
||||
pinMode(LCD_D6, OUTPUT);
|
||||
pinMode(LCD_D7, OUTPUT);
|
||||
}
|
||||
|
||||
|
||||
void lcdSetReadDir()
|
||||
{
|
||||
pinMode(LCD_D0, INPUT);
|
||||
pinMode(LCD_D1, INPUT);
|
||||
pinMode(LCD_D2, INPUT);
|
||||
pinMode(LCD_D3, INPUT);
|
||||
pinMode(LCD_D4, INPUT);
|
||||
pinMode(LCD_D5, INPUT);
|
||||
pinMode(LCD_D6, INPUT);
|
||||
pinMode(LCD_D7, INPUT);
|
||||
}
|
||||
|
||||
void lcdWriteData(uint16_t data)
|
||||
{
|
||||
lcdSetWriteDir();
|
||||
digitalWrite(LCD_CS, LOW);
|
||||
digitalWrite(LCD_RS, HIGH);
|
||||
digitalWrite(LCD_RD, HIGH);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
|
||||
lcdWrite8(data >> 8);
|
||||
|
||||
digitalWrite(LCD_WR, LOW);
|
||||
delayMicroseconds(10);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
|
||||
lcdWrite8(data);
|
||||
|
||||
digitalWrite(LCD_WR, LOW);
|
||||
delayMicroseconds(10);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
|
||||
digitalWrite(LCD_CS, HIGH);
|
||||
}
|
||||
|
||||
void lcdWriteCommand(uint16_t command)
|
||||
{
|
||||
lcdSetWriteDir();
|
||||
digitalWrite(LCD_CS, LOW);
|
||||
digitalWrite(LCD_RS, LOW);
|
||||
digitalWrite(LCD_RD, HIGH);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
lcdWrite8(command >> 8);
|
||||
digitalWrite(LCD_WR, LOW);
|
||||
delayMicroseconds(10);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
lcdWrite8(command);
|
||||
digitalWrite(LCD_WR, LOW);
|
||||
delayMicroseconds(10);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
digitalWrite(LCD_CS, HIGH);
|
||||
}
|
||||
|
||||
uint8_t lcdReadData8()
|
||||
{
|
||||
uint8_t result;
|
||||
lcdSetReadDir();
|
||||
digitalWrite(LCD_CS, LOW);
|
||||
digitalWrite(LCD_RS, HIGH);
|
||||
digitalWrite(LCD_RD, HIGH);
|
||||
digitalWrite(LCD_WR, HIGH);
|
||||
|
||||
digitalWrite(LCD_RD, LOW);
|
||||
delayMicroseconds(10);
|
||||
result = lcdRead8();
|
||||
digitalWrite(LCD_RD, HIGH);
|
||||
|
||||
delayMicroseconds(10);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
uint16_t lcdReadData16()
|
||||
{
|
||||
uint16_t result;
|
||||
result = lcdReadData8() << 8;
|
||||
result |= lcdReadData8();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
void lcdWriteRegister(uint16_t addr, uint16_t data)
|
||||
{
|
||||
lcdWriteCommand(addr);
|
||||
lcdWriteData(data);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user