<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=12864min_LCD</id>
	<title>12864min LCD - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=12864min_LCD"/>
	<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=12864min_LCD&amp;action=history"/>
	<updated>2026-06-10T01:56:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=12864min_LCD&amp;diff=21095&amp;oldid=prev</id>
		<title>Chao at 08:30, 8 February 2019</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=12864min_LCD&amp;diff=21095&amp;oldid=prev"/>
		<updated>2019-02-08T08:30:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 12864g ==&lt;br /&gt;
12864MIN can display 128 * 64 dot matrix monochrome images, or 16 * 16 dot matrix display Chinese characters 8 * 4-line, or 8 * 16 dot matrix display in English, numbers, symbols 16 * 4 lines. Or 5 * 8 dot matrix display in English, numbers, symbols 21 * 8 lines.&lt;br /&gt;
* Control IC UC 1701x&lt;br /&gt;
=== Specification of LCD ===&lt;br /&gt;
* Rom is the Chinese words internal library, which is not used in this LCD, leave it NC&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Speicification 12864MIN.jpg | with back PCB board&lt;br /&gt;
File:12864min_bare_PCB_LCD.jpg | without back PCB board&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
=== IC Documents ===&lt;br /&gt;
* Module use library u8glib, find more information on this page:https://code.google.com/p/u8glib/&lt;br /&gt;
* [[File:U8glib.zip|U8glib.zip]]&lt;br /&gt;
=== Arduino demo code ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt; &lt;br /&gt;
#include &amp;quot;U8glib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, CD = 9, RST = 8 &lt;br /&gt;
 &lt;br /&gt;
void draw(void) {&lt;br /&gt;
  // graphic commands to redraw the complete screen should be placed here  &lt;br /&gt;
  u8g.setFont(u8g_font_unifont);&lt;br /&gt;
  //u8g.setFont(u8g_font_osb21);&lt;br /&gt;
  u8g.drawStr( 0, 20, &amp;quot;Electrodragon&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void setup(void) {&lt;br /&gt;
  u8g.setContrast(0); // Config the contrast to the best effect&lt;br /&gt;
  u8g.setRot180();// rotate screen, if required&lt;br /&gt;
  // set SPI backup if required&lt;br /&gt;
  //u8g.setHardwareBackup(u8g_backup_avr_spi);&lt;br /&gt;
 &lt;br /&gt;
  // assign default color value&lt;br /&gt;
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {&lt;br /&gt;
    u8g.setColorIndex(255);     // white&lt;br /&gt;
  }&lt;br /&gt;
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {&lt;br /&gt;
    u8g.setColorIndex(3);         // max intensity&lt;br /&gt;
  }&lt;br /&gt;
  else if ( u8g.getMode() == U8G_MODE_BW ) {&lt;br /&gt;
    u8g.setColorIndex(1);         // pixel on&lt;br /&gt;
  }&lt;br /&gt;
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {&lt;br /&gt;
    u8g.setHiColorByRGB(255,255,255);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop(void) {&lt;br /&gt;
  // picture loop&lt;br /&gt;
  u8g.firstPage();  &lt;br /&gt;
  do {&lt;br /&gt;
    draw();&lt;br /&gt;
  } &lt;br /&gt;
  while( u8g.nextPage() );&lt;br /&gt;
 &lt;br /&gt;
  // rebuild the picture after some delay&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
* Please config the driving pin using this U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); command.. And notice to enable this command when using the u8glib example codes also.&lt;br /&gt;
* Use &amp;quot;setContrast&amp;quot; to config the contrast as you want. We highly recommend you to setContrast to 0 to get the best display effect.&lt;br /&gt;
* &amp;quot;setRot90/setRot180/setRot270&amp;quot; functions will be helpful to rotate the display direction as you want.Recommend to use setRot180.&lt;br /&gt;
=== Wiring ===&lt;br /&gt;
* as defined in the demo code below:&lt;br /&gt;
* U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, CD = 9, RST = 8 &lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arduino !! LCD12864&lt;br /&gt;
|-&lt;br /&gt;
| D13 || SCK &lt;br /&gt;
|-&lt;br /&gt;
| D11 || SDA&lt;br /&gt;
|-&lt;br /&gt;
| 3V3 || VDD, LEDA&lt;br /&gt;
|-&lt;br /&gt;
| GND || VSS&lt;br /&gt;
|-&lt;br /&gt;
| D10 || CS&lt;br /&gt;
|-&lt;br /&gt;
| D8 || RST &lt;br /&gt;
|-&lt;br /&gt;
| D9 || RS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 12864g LCD arduino shield ==&lt;br /&gt;
=== Demo Code ===&lt;br /&gt;
* remember to add contrast setting to set up the contrast of LCD&lt;br /&gt;
* use example sketch analog read (but remove the equation and only read value straight) to read each button value and fit for: 4-up, 0-left, 2-down, 1-select, 3-right&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;U8glib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// setup u8g object, please remove comment from one of the following constructor calls&lt;br /&gt;
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device&lt;br /&gt;
&lt;br /&gt;
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8&lt;br /&gt;
&lt;br /&gt;
#define KEY_NONE 0&lt;br /&gt;
#define KEY_PREV 1&lt;br /&gt;
#define KEY_NEXT 2&lt;br /&gt;
#define KEY_SELECT 3&lt;br /&gt;
#define KEY_BACK 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uint8_t uiKeyCodeFirst = KEY_NONE;&lt;br /&gt;
uint8_t uiKeyCodeSecond = KEY_NONE;&lt;br /&gt;
uint8_t uiKeyCode = KEY_NONE;&lt;br /&gt;
&lt;br /&gt;
int adc_key_in;&lt;br /&gt;
int key=-1;&lt;br /&gt;
int oldkey=-1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Convert ADC value to key number&lt;br /&gt;
//         4&lt;br /&gt;
//         |&lt;br /&gt;
//   0 --  1 -- 3&lt;br /&gt;
//         |&lt;br /&gt;
//         2&lt;br /&gt;
int get_key(unsigned int input)&lt;br /&gt;
{   &lt;br /&gt;
    if (input &amp;lt; 10) return 4;&lt;br /&gt;
    else  if (input &amp;lt; 200) return 0;&lt;br /&gt;
    else  if (input &amp;lt; 400) return 2;&lt;br /&gt;
    else  if (input &amp;lt; 600) return 1;&lt;br /&gt;
    else  if (input &amp;lt; 800) return 3;    &lt;br /&gt;
    else  return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void uiStep(void) {&lt;br /&gt;
  &lt;br /&gt;
  adc_key_in = analogRead(0);    // read the value from the sensor  &lt;br /&gt;
  key = get_key(adc_key_in);	 // convert into key press	&lt;br /&gt;
  if (key != oldkey)	  // if keypress is detected&lt;br /&gt;
   {&lt;br /&gt;
    delay(50);		// wait for debounce time&lt;br /&gt;
    adc_key_in = analogRead(0);    // read the value from the sensor  &lt;br /&gt;
    key = get_key(adc_key_in);	   // convert into key press&lt;br /&gt;
    if (key != oldkey)				&lt;br /&gt;
    {			&lt;br /&gt;
      oldkey = key;&lt;br /&gt;
      if (key &amp;gt;=0){&lt;br /&gt;
             //Serial.println(key);&lt;br /&gt;
             if ( key == 0 )&lt;br /&gt;
               uiKeyCodeFirst = KEY_BACK;&lt;br /&gt;
             else if ( key == 1 )&lt;br /&gt;
               uiKeyCodeFirst = KEY_SELECT;&lt;br /&gt;
             else if ( key == 2 )&lt;br /&gt;
               uiKeyCodeFirst = KEY_NEXT;&lt;br /&gt;
             else if ( key == 4 )&lt;br /&gt;
               uiKeyCodeFirst = KEY_PREV;&lt;br /&gt;
             else &lt;br /&gt;
               uiKeyCodeFirst = KEY_NONE;&lt;br /&gt;
  &lt;br /&gt;
             uiKeyCode = uiKeyCodeFirst;           &lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 delay(100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define MENU_ITEMS 6&lt;br /&gt;
char *menu_strings[MENU_ITEMS] = { &amp;quot;LCD12864 Shield&amp;quot;, &amp;quot;www.ElectroDragon.com&amp;quot;, &amp;quot;Temperature&amp;quot;, &amp;quot;Humidity&amp;quot; ,&amp;quot;About&amp;quot;,&amp;quot;OK&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
uint8_t menu_current = 0;&lt;br /&gt;
uint8_t menu_redraw_required = 0;&lt;br /&gt;
uint8_t last_key_code = KEY_NONE;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void drawMenu(void) {&lt;br /&gt;
  uint8_t i, h;&lt;br /&gt;
  u8g_uint_t w, d;&lt;br /&gt;
&lt;br /&gt;
  u8g.setFont(u8g_font_6x12);//4x6 5x7 5x8 6x10 6x12 6x13&lt;br /&gt;
  u8g.setFontRefHeightText();&lt;br /&gt;
  u8g.setFontPosTop();&lt;br /&gt;
  &lt;br /&gt;
  h = u8g.getFontAscent()-u8g.getFontDescent();&lt;br /&gt;
  w = u8g.getWidth();&lt;br /&gt;
  for( i = 0; i &amp;lt; MENU_ITEMS; i++ ) {&lt;br /&gt;
    d = (w-u8g.getStrWidth(menu_strings[i]))/2;&lt;br /&gt;
    u8g.setDefaultForegroundColor();&lt;br /&gt;
    if ( i == menu_current ) {  &lt;br /&gt;
      u8g.drawBox(0, i*h+1, w, h);&lt;br /&gt;
      u8g.setDefaultBackgroundColor();&lt;br /&gt;
    }&lt;br /&gt;
    u8g.drawStr(d, i*h+1, menu_strings[i]);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void updateMenu(void) &lt;br /&gt;
{&lt;br /&gt;
  switch ( uiKeyCode ) {&lt;br /&gt;
    case KEY_NEXT:&lt;br /&gt;
      menu_current++;&lt;br /&gt;
      if ( menu_current &amp;gt;= MENU_ITEMS )menu_current = 0;&lt;br /&gt;
      menu_redraw_required = 1;&lt;br /&gt;
      break;&lt;br /&gt;
    case KEY_PREV:&lt;br /&gt;
      if ( menu_current == 0 )menu_current = MENU_ITEMS;&lt;br /&gt;
      menu_current--;&lt;br /&gt;
      menu_redraw_required = 1;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  uiKeyCode = KEY_NONE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
   u8g.setContrast(0);&lt;br /&gt;
  u8g.setRot180();// rotate screen, if required&lt;br /&gt;
  menu_redraw_required = 1;     // force initial redraw&lt;br /&gt;
  //Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {  &lt;br /&gt;
&lt;br /&gt;
  uiStep();                                // check for key press&lt;br /&gt;
  updateMenu();                            // update menu bar    &lt;br /&gt;
  &lt;br /&gt;
  if (  menu_redraw_required != 0 ) {&lt;br /&gt;
    u8g.firstPage();&lt;br /&gt;
    do  {&lt;br /&gt;
      drawMenu();&lt;br /&gt;
    } while( u8g.nextPage() );&lt;br /&gt;
    menu_redraw_required = 0;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Schematic ===&lt;br /&gt;
[[File:12864LCD.png|400px]]&lt;br /&gt;
[[category: char LCDs]]&lt;/div&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
</feed>