{"id":19856581,"url":"https://github.com/gavinlyonsrepo/erm19264_uc1609_pico","last_synced_at":"2026-04-13T17:30:17.852Z","repository":{"id":98596887,"uuid":"605802068","full_name":"gavinlyonsrepo/ERM19264_UC1609_PICO","owner":"gavinlyonsrepo","description":"RPI PICO C++  SDK Library to Support the ERM19264 LCD driven by the UC1609C / UC1609 controller. ","archived":false,"fork":false,"pushed_at":"2025-02-15T14:37:02.000Z","size":162,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-15T15:32:16.198Z","etag":null,"topics":["cplusplus","display","display-library","erm19264","lcd","lcd-display","library","pico","picosdk","raspberry-pi","raspberry-pi-pico","raspberry-pico","raspberrypipico","rp2040","rpi","rpi-pico","rpipico","sdk","uc1609","uc1609c"],"latest_commit_sha":null,"homepage":"https://gavinlyonsrepo.github.io/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gavinlyonsrepo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-02-23T23:39:04.000Z","updated_at":"2025-02-15T14:37:05.000Z","dependencies_parsed_at":"2023-11-19T16:24:30.443Z","dependency_job_id":"4f0ac77a-753b-45b2-b092-aaa255f32b19","html_url":"https://github.com/gavinlyonsrepo/ERM19264_UC1609_PICO","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinlyonsrepo%2FERM19264_UC1609_PICO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinlyonsrepo%2FERM19264_UC1609_PICO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinlyonsrepo%2FERM19264_UC1609_PICO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinlyonsrepo%2FERM19264_UC1609_PICO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gavinlyonsrepo","download_url":"https://codeload.github.com/gavinlyonsrepo/ERM19264_UC1609_PICO/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240002130,"owners_count":19732164,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cplusplus","display","display-library","erm19264","lcd","lcd-display","library","pico","picosdk","raspberry-pi","raspberry-pi-pico","raspberry-pico","raspberrypipico","rp2040","rpi","rpi-pico","rpipico","sdk","uc1609","uc1609c"],"created_at":"2024-11-12T14:16:01.995Z","updated_at":"2026-04-13T17:30:17.770Z","avatar_url":"https://github.com/gavinlyonsrepo.png","language":"C++","funding_links":["https://www.paypal.com/paypalme/whitelight976"],"categories":[],"sub_categories":[],"readme":"\n[![Website](https://img.shields.io/badge/Website-Link-blue.svg)](https://gavinlyonsrepo.github.io/)  [![Rss](https://img.shields.io/badge/Subscribe-RSS-yellow.svg)](https://gavinlyonsrepo.github.io//feed.xml)  [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/paypalme/whitelight976)\n\n![ ERM19264 ](https://github.com/gavinlyonsrepo/ERM19264_UC1609/blob/main/extras/image/color.jpg)\n\n# ERM19264_UC1609_PICO\n\n## Table of contents\n\n  * [Overview](#overview)\n  * [Hardware](#hardware)\n  * [Software](#software)\n\t* [SPI](#spi)\n\t* [Fonts](#fonts)\n\t* [Bitmaps](#bitmaps)\n\t* [User adjustments](#user-adjustments)\n\t* [File system](#file-system)\n  * [Notes and Issues](#notes-and-issues)\n\n## Overview\n\n* Name : ERM19264_UC1609\n* Title : Library for ERM19264-5 v3 LCD  (UC1609C controller)\n* Description : \n\n1. Raspberry pi PICO RP2040 library.       \n2. Inverse, Scroll, rotate and contrast control. \n3. 10 ASCII fonts included.\n4. Graphics class included.\n5. Sleep mode.\n6. Bitmaps supported.\n7. Hardware SPI options\n8. Polymorphic print class included to print many data types.\n9. Port of my arduino [library](https://github.com/gavinlyonsrepo/ERM19264_UC1609) , More details there. \n\n* Author: Gavin Lyons\n* Developed on\n\t1. Raspberry pi PICO RP2040\n\t2. SDK C++ compiler G++ for arm-none-eabi\n\t3. CMAKE , VScode\n\n\n## Hardware\n\n9 pins , Vcc and GND, anode and cathode for the backlight LED and an SPI interface.\nThe backlight control is left up to user. The CLK and Data lines are fixed to the SPI interface but any GPIO can be used for reset, DC and CS. \n\nThere are 3 different colours in range, Parts used purchased from [ebay](https://www.ebay.ie/itm/2-inch-White-192x64-Graphic-LCD-Display-Module-UC1609-SPI-for-Arduino/293617684779?hash=item445cfa512b:g:10MAAOSwYV9e6xsi)\n \n1. ERM19264SBS-5 V3 LCD Display UC1609C controller ,  white on blue\n2. ERM19264FS-5 V3 LCD Display  UC1609C controller , black on white\n3. ERM19264DNS-5 V3 LCD Display  UC1609C controller white on black\n\nThe library was tested on 1 and 2. \nThis wiring Diagram from the manufacturer showing hardware setup connected to an ~8051 MCU, showing both 3.3 volt and 5 volt systems. \n\n![ ERM19264 ](https://github.com/gavinlyonsrepo/ERM19264_UC1609/blob/main/extras/image/connect.jpg)\n\n## Software\n\n### API Documentation\n\nThe Software is commented mostly for \"doxygen\" and if users uses \"doxygen\" software\nan API document  can be generated. A Doxyfile is in \"doc\" sub folder in repository.\n\n### SPI\n\nHardware SPI. The hardware SPI speed is set at 8MHz you can change this if necessary by changing LCDSPISetup method arguments.\nSpi0 is used in example files but can be changed by passing a different SPI channel.(Spi0 or Spi1) \n\n### Fonts\n\nThere are 10 fonts packaged with library. Fonts can be easily added or removed by user.\nAll the Font data is in the font files.\n\nFont data table: \n\n| num | Font pointer name | character size XxY |  ASCII range | Size in bytes |\n| ------ | ------ | ------ | ------ |  ------ | \n| 1 | pFontDefault | 6x8 |  0 - 0xFE, Full Extended  | 1534 |\n| 2 | pFontWide | 9x8 | 0x20 - 0x5A, NO lowercase letters | 535 |\n| 3 | pFontPico | 4x6 | 0x20 - 0x7E  | 289 | \n| 4 | pFontSinclairS  | 8x8 | 0x20 - 0x7E | 764 |\n| 5 | pFontMega | 16x16 | 0x20 - 0x7E | 3044 |\n| 6 | pFontArialBold  | 16x16 | 0x20 - 0x7E |  3044 |\n| 7 | pFontHallfetica | 16x16 | 0x20 - 0x7E | 3044 |\n| 8 | pFontArialRound| 16x24 | 0x20 - 0x7E | 4564 |\n| 9 | pFontGroTesk | 16x32 | 0x20 - 0x7A |  5828 |\n| 10 | pFontSixteenSeg | 32x48 | 0x2D-0x3A , 0-10  :  .  / - only | 2692 |\n\nFont size in bytes = ((X * (Y/8)) * numberOfCharacters) + (4*ControlByte)\n\n| Font class Function | Notes |\n| ------ | ------ | \n| writeChar| draws single character |\n| writeCharString | draws character array |\n| print | Polymorphic print class which will print out many data types |\n\nThese methods return an error code in event of an error.\n\n**Remove a font**\n\nTo remove an unwanted font from project simply comment out or delete.\n\n1. The Font data in ERM19264_UC1609_font.cpp file\n2. The span to font at bottom of ERM19264_UC1609_font.cpp file\n3. The associated extern declaration in the ERM19264_UC1609_font.hpp file\n\n**Adding a new font**\n\n1. Add the Font data in ERM19264_UC1609_font.cpp file\n2. Add a span to font at bottom of ERM19264_UC1609_font.cpp file\n3. Add an associated extern declaration in the ERM19264_UC1609_font.hpp file\n\nThe new ASCII font must have following font structure.\nFirst 4 bytes are control bytes followed by vertically addressed font data.\n\n```\n// An 4 by 8 character size font starting at \n// ASCII offset 0x30 in ASCII table with 0x02 characters in font. \n// 0 and 1 \nstatic const std::array\u003cuint8_t, 12\u003eFontBinaryExample[] =\n{\n0x04, 0x08, 0x30, 0x02,   // x-size, y-size, offset, total characters\n(data),(data),(data),(data) // font data '0'\n(data),(data),(data),(data) // font data '1'\n}\n```\n\nSome of the fonts packaged with library came from [URL](http://rinkydinkelectronics.com/).\nIf user has picture of a font like so.\n\n![ font ](https://github.com/gavinlyonsrepo/SSD1306_OLED_PICO/blob/main/extra/image/hallfetica_normal.png)\n\nThere is a monochrome font maker there at [URL](http://rinkydinkelectronics.com/t_make_font_file_mono.php)\n\n\n### Bitmaps\n\nThere is a few different ways of displaying bitmaps, \n\n| Num | Method |  Data addressing | Note |\n| ------ | ------  | ------ |  ------ |  \n| 1 | LCDBitmap() |  Vertical |  Writes directly to screen , no buffer used. | \n| 2 | LCDBufferScreen() |  Vertical  | For internal use mostly | \n| 3 | drawBitmap() |  Vertical | default, setDrawBitmapAddr(true) | \n| 4 | drawBitmap() |  Horizontal | setDrawBitmapAddr(false) |\n\nThe drawBitmap method will return an error if : The Bitmap is completely off screen , \nInvalid Bitmap pointer object, bitmap bigger than screen , bitmap bigger/smaller than provided width and height calculation\n( This helps prevents buffer overflow).\nA vertical addressed Bitmap's height must be divisible by 8. eg, for a  bitmap with width=128 and height=64.\nBitmap excepted size = 128 * (64/8) = 1024 bytes.\nA horizontal addressed Bitmap's width must be divisible by 8. eg, for a bitmap with width=88 and height=48.\nBitmap excepted size = (88/8) * 48 = 528 bytes.\n\nBitmaps can be turned to data [here at link]( https://javl.github.io/image2cpp/) \nSee example file \"BITMAP\" for more details.\n\n\n\n### User adjustments\n\nIf the LCD does not initialize correctly.\nTry adjusting the RAM address control setting from 0x02(default) to 0x01.\nSee github issue 4(arduino Source port) for details. Users can adjust setting in the \"begin\" method argument list. This setting changes bits 2-0 in AC register, see diagram below for details.\n\n![ ERM19264 ram image ](https://github.com/gavinlyonsrepo/ERM19264_UC1609/blob/main/extras/image/ram.png)\n\nWhen the user calls LCDinit() to start LCD they can specify a contrast setting from 0x00 to 0xFF.\nDatasheet says 0x49 is default. (VbiasPOT). Lower contrast works better on the blue color version.\n\nIt is also possible for user to change LCD bias, Temperature coefficient, frame rate and power control but this must be done by changing defines in header file. Choose lower frame rate for lower power, and choose higher frame rate to improve LCD contrast and minimize flicker. See Data sheet for range of values here. Defaults where found to be fine during all testing of this library.\n\n| Parameter | default Values |  Define | Register bits |\n| ------ | ------ |  ------ | ------ |\n| LCD bias |  9 | BIAS_RATIO_SET | BR 1:0 |\n| Temp coefficient | -0.00%/ C |  TEMP_COMP_SET | TC 1:0  |\n| Frame rate | 95 fps |  FRAMERATE_SET |  LC 4:3 |\n| Power control | 1.4mA + Internal VLCD (7x charge pump) |  PC_SET | PC 2:0 |\n| V bias Bot(contrast) | 0x49 |  Set by user with LCDinit| PM 7:0 |\n| Ram Address Control | 0x02 |  Set by user with LCDinit  | AC 2:0 |\n\n\n### File system\n\nX = ERM19264_UC1609 in tables below\n\n| Src Files | Description  |\n| ------ | ------ |\n| X.hpp | library header file  |\n| X.cpp |  library  source file  |\n| X_graphics.hpp | graphics header file |\n| X_graphics.cpp |  graphics source file |\n| X_font.hpp |  font header file |\n| X_font.cpp |  font data file |\n| X_print.hpp | used for printing data types |\n| X_print.cpp |  used for printing data types |\n\nThe example files are in example folder.\nTo build the one you want, edit the Cmaketxt file \nadd_executable(${PROJECT_NAME} section, comment in one example file path and one only.\nThe default is the Hello world one.\n\n| Examples files main.cpp  | Description |\n| ------ | ------ | \n| X_HELLO | Hello world , Basic usage |\n| X_TEXT_GRAPHICS | Text + graphics  |\n| X_FUNCTIONS_FPS | FPS test \u0026 misc functions, rotate , scroll,  etc |\n| X_BITMAP | Shows use of bitmaps methods  |\n\n## Notes and Issues\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgavinlyonsrepo%2Ferm19264_uc1609_pico","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgavinlyonsrepo%2Ferm19264_uc1609_pico","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgavinlyonsrepo%2Ferm19264_uc1609_pico/lists"}