LCD1602/HD44780 на OLED1602/WS0010
- Войдите на сайт для отправки комментариев
Сб, 16/04/2022 - 05:03
Добрый день.
Проект работающий на LCD 1602. Необходимо подправить для работы с OLED 1602.
Решения в интернете есть, для LiquidCrystal, но библиотека в проекте не стандартная (авторская).
Кусок кода
/*
* if we are an lcd, we use a backlight PWM wire
*/
//if (display_type == DISP_TYPE_LCD) {
pinMode(myBacklightPin, OUTPUT); // pwm backlight
//}
}
// our init routine
void
LCDI2C4Bit::init(void)
{
// set a mutex so that the IR isr won't do anything
// while we are doing lcd i/o
lcd_in_use_flag = 1;
dataPlusMask = 0; // clear our mask
// set up the MCP port expander chip (not yet talking to
// the lcd at this point)
SetMCPReg(MCP_REG_IOCON, 0x0C);
delay(50);
SetMCPReg(MCP_REG_IODIR, myInputKeysMask);
delay(50);
SetMCPReg(MCP_REG_GPPU, myInputKeysMask);
delay(50);
SendToLCD(0x03);
delay(5);
SendToLCD(0x03);
delayMicroseconds(100);
SendToLCD(0x03);
delay(5);
SendToLCD(0x02);
WriteLCDByte(0x28);
// display ON, no cursor, no blink
WriteLCDByte(0x0C);
delayMicroseconds(60);
// clear display
command(0x01);
// TODO: try this for vfd's and verify the brightness bits
// actually work
// command(B00101010); // last 2 bits are min brightness
lcd_in_use_flag = 0; // clear that mutex
// (so that the IR isr CAN now do things)
}
void
LCDI2C4Bit::SetInputKeysMask(byte input_keys_mask)
{
myInputKeysMask = input_keys_mask;
}
#ifdef LOCAL_MCP_DRIVER
// write one byte to LCD (via i2c)
void
LCDI2C4Bit::SetMCPReg(byte reg, byte val)
{
i2c_write(lcd_i2c_address, reg, val);
}
// read 1 byte from LCD (via i2c)
byte
LCDI2C4Bit::GetMCPReg(byte reg)
{
byte val = 0;
i2c_read(lcd_i2c_address, reg, &val);
return val;
}
#endif // LOCAL_MCP_DRIVER
// 2 extra lines on the MCP chip that we can map to soft pushbuttons
byte
LCDI2C4Bit::ReadInputKeys(void)
{
byte data;
data = GetMCPReg(MCP_REG_GPIO);
return data;
}
// lower layer routine that does the enable-bit 'wrapping' of
// a 4 bit parallel transaction
void
LCDI2C4Bit::SendToLCD(byte data)
{
data |= dataPlusMask;
SetMCPReg(MCP_REG_OLAT, data);
delayMicroseconds(9);
data ^= 0x80; // 'enable' bit ON on LCD
SetMCPReg(MCP_REG_OLAT, data);
delayMicroseconds(9);
data ^= 0x80; // 'enable' bit OFF on LCD
SetMCPReg(MCP_REG_OLAT, data);
delayMicroseconds(9);
}
// higher layer interface; this takes an 8-bit data and makes 2 calls to
// send to the lcd, 4 bits at a time
void
LCDI2C4Bit::WriteLCDByte(byte bdata)
{
// set a mutex so that the IR isr won't do anything
// while we are doing lcd i/o
lcd_in_use_flag = 1;
SendToLCD(bdata >> 4);
delayMicroseconds(9);
SendToLCD(bdata & 0x0F);
delayMicroseconds(9);
lcd_in_use_flag = 0; // clear that mutex
// (so that the IR isr CAN now do things)
}
// 'write' sends character data, setting RS high (the other routine, 'commands'
// sends non-char data)
void
LCDI2C4Bit::write(byte value)
{
dataPlusMask |= 0x10; // RS is set
WriteLCDByte(value);
dataPlusMask ^= 0x10; // RS is cleared
}
// 'command' leaves RS low when it sends bytes
void
LCDI2C4Bit::command(byte command)
{
// RS - leave low
WriteLCDByte(command);
delayMicroseconds(800);
}
WS0010 - это же винстар? Дисплей будет предоставлен для проверки?
Да, это Winstar. С предоставлением дисплея надо подумать. Вам придётся макет собирать. Минимум
MCP23008 подключать D4-D7 через неё идёт.
Блин, как с телефона хреново писать. С предоставлением *
Интересное развитие событий.
Пишите детали на work.sadman@gmail.com
Не, ну можно и без " предоставления", если ТС готов бесконечно тестировать все новые варианты . Мы с одним клиентом написали друг другу 69 мэйлов, прежде чем железо согласилось работать с моим кодом :)
Давайте email. Попробуем.
И тишина...
А это что?
Писал. Тишина.
О... это меня андроид со своей автокоррекцией подставил.
wrk.sadman@gmail.com
О... это меня андроид со своей автокоррекцией подставил.
wrk.sadman@gmail.com
Инфу я скинул на почту. Всё открывается?
В ящике ничего, в спаме ничего. Прохождение проверил с яндекса...
gmail испортился. он теперь не позволяет вкладывать в письмо архивы zip rar и тому подобное, причем определяет по содержимому, а не по расширению
Странно. Сейчас попробую ещё раз.
gmail испортился. он теперь не позволяет вкладывать в письмо архивы zip rar и тому подобное, причем определяет по содержимому, а не по расширению
Есть такое уже давненько. Но при этом он предупреждает, что заблокировал пересылку. Тайком в ведро не выкидывает.
Отправил
Давайте я вам напишу, что ли...
Попробуйте. crazoff@mail.ru
А я сейчас на обменник скину.
На тестовые письма ответил
gmail испортился. он теперь не позволяет вкладывать в письмо архивы zip rar и тому подобное, причем определяет по содержимому, а не по расширению
Есть такое. Выхожу из положения архивированием с паролем, пароль в тексте письма указываю. Ну или как второй вариант - файлообменник.
Ссылку на обменник указал в письме