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 и тому подобное, причем определяет по содержимому, а не по расширению
Есть такое. Выхожу из положения архивированием с паролем, пароль в тексте письма указываю. Ну или как второй вариант - файлообменник.
Ссылку на обменник указал в письме