<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.linksprite.com/index.php?action=history&amp;feed=atom&amp;title=Graphic_LCD4884_Shield_For_Arduino</id>
	<title>Graphic LCD4884 Shield For Arduino - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linksprite.com/index.php?action=history&amp;feed=atom&amp;title=Graphic_LCD4884_Shield_For_Arduino"/>
	<link rel="alternate" type="text/html" href="https://wiki.linksprite.com/index.php?title=Graphic_LCD4884_Shield_For_Arduino&amp;action=history"/>
	<updated>2026-09-10T14:20:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.linksprite.com/index.php?title=Graphic_LCD4884_Shield_For_Arduino&amp;diff=8187&amp;oldid=prev</id>
		<title>Alvin: Created page with &quot;== Description ==  File:1-131.jpg  File:1-132.jpg  This LCD4884 Shield provides 48x48 display. If your project need more information to display, this LCD shield can ap...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.linksprite.com/index.php?title=Graphic_LCD4884_Shield_For_Arduino&amp;diff=8187&amp;oldid=prev"/>
		<updated>2016-03-29T02:19:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Description ==  &lt;a href=&quot;/index.php/File:1-131.jpg&quot; title=&quot;File:1-131.jpg&quot;&gt;File:1-131.jpg&lt;/a&gt;  &lt;a href=&quot;/index.php/File:1-132.jpg&quot; title=&quot;File:1-132.jpg&quot;&gt;File:1-132.jpg&lt;/a&gt;  This LCD4884 Shield provides 48x48 display. If your project need more information to display, this LCD shield can ap...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
[[File:1-131.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[File:1-132.jpg]]&lt;br /&gt;
&lt;br /&gt;
This LCD4884 Shield provides 48x48 display. If your project need more information to display, this LCD shield can apparently meet your needs. It is able to display English, Chines, even images. It also integrates a 5 DOF joystick.  The shield has 6 Digital IO and 5 Analog IO. &lt;br /&gt;
&lt;br /&gt;
Note:The Arduino in the image is NOT included.&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
*Power Supply: 5V&lt;br /&gt;
*SPI Interface (using Arduino Digital Pin 2,3,4,5,6)&lt;br /&gt;
*One Reset button&lt;br /&gt;
*One 5 degree joystick (using Arduino Analog Pin 0)&lt;br /&gt;
*Backlit control (Arduino DIO Pin 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PinOut ==&lt;br /&gt;
[[File:1-133.png]]&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Modified by Amy&lt;br /&gt;
  version 0.4 &lt;br /&gt;
  Description:&lt;br /&gt;
  Update the library and sketch to compatible with IDE V1.0 and earlier&lt;br /&gt;
  Improve the key detection function to be compatible with the Arduino Leonardo&lt;br /&gt;
  Improve the waitOK function&lt;br /&gt;
  Move the bit map array to the main code&lt;br /&gt;
 &lt;br /&gt;
  Any suggestions are welcome.&lt;br /&gt;
  E-mail: Lauran.pan@gmail.com&lt;br /&gt;
  Editor     : Amy from DFRobot&lt;br /&gt;
  Date       : 20.12.2012 &lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
  #include &amp;quot;LCD4884.h&amp;quot; &lt;br /&gt;
  /*------------------------------------------------------------------------------&lt;br /&gt;
  ; DFrobot bitmap - size 48x24 pixels, black/white image&lt;br /&gt;
  ------------------------------------------------------------------------------*/&lt;br /&gt;
  unsigned char DFrobot_bmp[]= &lt;br /&gt;
  {&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x01,0x39,0x39,0x39,0x39,0x39,0x39,&lt;br /&gt;
  0x01,0x01,0xFF,0xFF,0x01,0x01,0xC9,0xC9,0xC9,0xC9,0xC9,0xC9,0xFF,0xFF,0xFF,0xFF,&lt;br /&gt;
  0xFF,0x19,0x19,0x19,0x19,0xFF,0xE6,0x00,0x7C,0xFE,0xFF,0xFF,0x83,0x01,0x01,0x01,&lt;br /&gt;
  0x83,0xC6,0x7C,0x00,0x00,0xFF,0xFF,0xFF,0x19,0x19,0x19,0x99,0xFF,0xFE,0x00,0x38,&lt;br /&gt;
  0xFE,0xFF,0xFF,0xC3,0x81,0x01,0x01,0x83,0x87,0xFE,0x3C,0x00,0x01,0x01,0xFF,0xFF,&lt;br /&gt;
  0xFF,0xFF,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x02,&lt;br /&gt;
  0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,&lt;br /&gt;
  0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,&lt;br /&gt;
  0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,&lt;br /&gt;
  0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00&lt;br /&gt;
  };&lt;br /&gt;
  /******************************************************************************/ &lt;br /&gt;
  /*------------------------------------------------------------------------------&lt;br /&gt;
  ; DFrobot chinese - size 12x12  &lt;br /&gt;
  ------------------------------------------------------------------------------*/&lt;br /&gt;
  unsigned char DFrobot_chinese[]=&lt;br /&gt;
  {&lt;br /&gt;
  0x84,0x64,0xFF,0x24,0x44,0xFE,0x02,0x02,0xFF,0x02,0x00,0x00,0x01,0x00,0x07,0x04,&lt;br /&gt;
  0x02,0x01,0x00,0x00,0x07,0x04,0x07,0x00,&lt;br /&gt;
   &lt;br /&gt;
  0xA0,0xAF,0xA9,0xE9,0xAF,0x30,0xAF,0xA9,0xF9,0xAF,0xA0,0x00,0x00,0x07,0x04,0x04,&lt;br /&gt;
  0x07,0x00,0x07,0x04,0x04,0x07,0x00,0x00,&lt;br /&gt;
   &lt;br /&gt;
  0x00,0x00,0x00,0x80,0x60,0x1F,0x60,0x80,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,&lt;br /&gt;
  0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00,&lt;br /&gt;
   &lt;br /&gt;
  0x22,0x12,0x0A,0xBF,0x6A,0x52,0x4A,0x7F,0xCA,0x12,0x22,0x00,0x04,0x05,0x05,0x04,&lt;br /&gt;
  0x05,0x02,0x02,0x01,0x00,0x00,0x00,0x00,&lt;br /&gt;
   &lt;br /&gt;
  0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,&lt;br /&gt;
  0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00,&lt;br /&gt;
   &lt;br /&gt;
  0x00,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x06,0x01,0x00,0x00,&lt;br /&gt;
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&lt;br /&gt;
  };&lt;br /&gt;
  /******************************************************************************/ &lt;br /&gt;
  //keypad debounce parameter&lt;br /&gt;
  #define DEBOUNCE_MAX 15&lt;br /&gt;
  #define DEBOUNCE_ON  10&lt;br /&gt;
  #define DEBOUNCE_OFF 3  &lt;br /&gt;
  #define NUM_KEYS 5 &lt;br /&gt;
  #define NUM_MENU_ITEM   4 &lt;br /&gt;
  // joystick number&lt;br /&gt;
  #define LEFT_KEY 0&lt;br /&gt;
  #define CENTER_KEY 1&lt;br /&gt;
  #define DOWN_KEY 2&lt;br /&gt;
  #define RIGHT_KEY 3&lt;br /&gt;
  #define UP_KEY 4 &lt;br /&gt;
  // menu starting points &lt;br /&gt;
  #define MENU_X  10      // 0-83&lt;br /&gt;
  #define MENU_Y  1       // 0-5&lt;br /&gt;
  int  adc_key_val[5] ={&lt;br /&gt;
  50, 200, 400, 600, 800 }; &lt;br /&gt;
  // debounce counters&lt;br /&gt;
  byte button_count[NUM_KEYS];&lt;br /&gt;
  // button status - pressed/released&lt;br /&gt;
  byte button_status[NUM_KEYS];&lt;br /&gt;
  // button on flags for user program &lt;br /&gt;
  byte button_flag[NUM_KEYS];&lt;br /&gt;
  // menu definition&lt;br /&gt;
  char menu_items[NUM_MENU_ITEM][12]={&lt;br /&gt;
  &amp;quot;TEMPERATURE&amp;quot;,&lt;br /&gt;
  &amp;quot;CHAR MAP&amp;quot;,&lt;br /&gt;
  &amp;quot;BITMAP&amp;quot;,&lt;br /&gt;
  &amp;quot;ABOUT&amp;quot;  &lt;br /&gt;
  };= &lt;br /&gt;
  void (*menu_funcs[NUM_MENU_ITEM])(void) = {&lt;br /&gt;
  temperature,&lt;br /&gt;
  charmap,&lt;br /&gt;
  bitmap,&lt;br /&gt;
  about&lt;br /&gt;
  }; &lt;br /&gt;
  char current_menu_item; &lt;br /&gt;
  void setup()&lt;br /&gt;
  { &lt;br /&gt;
  // reset button arrays&lt;br /&gt;
  for(byte i=0; i&amp;lt;NUM_KEYS; i++){&lt;br /&gt;
    button_count[i]=0;&lt;br /&gt;
    button_status[i]=0;&lt;br /&gt;
    button_flag[i]=0;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  lcd.LCD_init();&lt;br /&gt;
  lcd.LCD_clear();&lt;br /&gt;
 &lt;br /&gt;
  //menu initialization&lt;br /&gt;
  init_MENU();&lt;br /&gt;
  current_menu_item = 0;    &lt;br /&gt;
 &lt;br /&gt;
  lcd.backlight(ON);//Turn on the backlight&lt;br /&gt;
  //lcd.backlight(OFF); // Turn off the backlight  &lt;br /&gt;
 } &lt;br /&gt;
 unsigned long buttonFlasher = 0; &lt;br /&gt;
  /* loop */ &lt;br /&gt;
 void loop()&lt;br /&gt;
{&lt;br /&gt;
  byte i;&lt;br /&gt;
  for(i=0; i&amp;lt;NUM_KEYS; i++){&lt;br /&gt;
    if(button_flag[i] !=0){&lt;br /&gt;
 &lt;br /&gt;
      button_flag[i]=0;  // reset button flag&lt;br /&gt;
      switch(i){&lt;br /&gt;
 &lt;br /&gt;
      case UP_KEY:&lt;br /&gt;
        // current item to normal display&lt;br /&gt;
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );&lt;br /&gt;
        current_menu_item -=1;&lt;br /&gt;
        if(current_menu_item &amp;lt;0)  current_menu_item = NUM_MENU_ITEM -1;&lt;br /&gt;
        // next item to highlight display&lt;br /&gt;
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );&lt;br /&gt;
        break;&lt;br /&gt;
      case DOWN_KEY:&lt;br /&gt;
        // current item to normal display&lt;br /&gt;
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );&lt;br /&gt;
        current_menu_item +=1;&lt;br /&gt;
        if(current_menu_item &amp;gt;(NUM_MENU_ITEM-1))  current_menu_item = 0;&lt;br /&gt;
        // next item to highlight display&lt;br /&gt;
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );&lt;br /&gt;
        break;&lt;br /&gt;
      case LEFT_KEY:&lt;br /&gt;
        init_MENU();&lt;br /&gt;
        current_menu_item = 0;&lt;br /&gt;
        break;   &lt;br /&gt;
      case CENTER_KEY:&lt;br /&gt;
        lcd.LCD_clear();&lt;br /&gt;
        (*menu_funcs[current_menu_item])();&lt;br /&gt;
        //(*menu_funcs[0])();        &lt;br /&gt;
        Serial.println(&amp;quot;hello&amp;quot;);&lt;br /&gt;
        lcd.LCD_clear();&lt;br /&gt;
        init_MENU();&lt;br /&gt;
        current_menu_item = 0;         &lt;br /&gt;
        break;  &lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  if(millis() - buttonFlasher &amp;gt; 5){&lt;br /&gt;
    update_adc_key();&lt;br /&gt;
    buttonFlasher = millis();&lt;br /&gt;
   }    &lt;br /&gt;
  } &lt;br /&gt;
  /* menu functions */ &lt;br /&gt;
  void init_MENU(void){&lt;br /&gt;
 &lt;br /&gt;
  byte i;&lt;br /&gt;
 &lt;br /&gt;
  lcd.LCD_clear();&lt;br /&gt;
 &lt;br /&gt;
  lcd.LCD_write_string(MENU_X, MENU_Y, menu_items[0], MENU_HIGHLIGHT );&lt;br /&gt;
 &lt;br /&gt;
  for (i=1; i&amp;lt;NUM_MENU_ITEM; i++){&lt;br /&gt;
    lcd.LCD_write_string(MENU_X, MENU_Y+i, menu_items[i], MENU_NORMAL);&lt;br /&gt;
  } &lt;br /&gt;
 } &lt;br /&gt;
  // waiting for center key press&lt;br /&gt;
  void waitfor_OKkey(){&lt;br /&gt;
  byte i;&lt;br /&gt;
  byte key = 0xFE;&lt;br /&gt;
  for(byte i=0; i&amp;lt;NUM_KEYS; i++){&lt;br /&gt;
    button_count[i]=0;&lt;br /&gt;
    button_status[i]=0;&lt;br /&gt;
    button_flag[i]=0;&lt;br /&gt;
  }&lt;br /&gt;
  update_adc_key();&lt;br /&gt;
  while (key!= CENTER_KEY){&lt;br /&gt;
    for(i=0; i&amp;lt;NUM_KEYS; i++){&lt;br /&gt;
      if(button_flag[i] !=0){&lt;br /&gt;
        button_flag[i]=0;  // reset button flag&lt;br /&gt;
        if(i== CENTER_KEY) &lt;br /&gt;
        {&lt;br /&gt;
          key=CENTER_KEY; &lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      update_adc_key();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  } &lt;br /&gt;
  void temperature()&lt;br /&gt;
 {&lt;br /&gt;
   lcd.LCD_write_string_big(10, 1, &amp;quot;+12.30&amp;quot;, MENU_NORMAL);&lt;br /&gt;
  lcd.LCD_write_string(78, 2, &amp;quot;C&amp;quot;, MENU_NORMAL);&lt;br /&gt;
  lcd.LCD_write_string(38, 5, &amp;quot;OK&amp;quot;, MENU_HIGHLIGHT );&lt;br /&gt;
  waitfor_OKkey();&lt;br /&gt;
 } &lt;br /&gt;
  void charmap(){&lt;br /&gt;
  char i,j;&lt;br /&gt;
  for(i=0; i&amp;lt;5; i++){&lt;br /&gt;
    for(j=0; j&amp;lt;14; j++){&lt;br /&gt;
      lcd.LCD_set_XY(j*6,i);&lt;br /&gt;
      lcd.LCD_write_char(i*14+j+32, MENU_NORMAL);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  lcd.LCD_write_string(38, 5, &amp;quot;OK&amp;quot;, MENU_HIGHLIGHT );&lt;br /&gt;
  waitfor_OKkey();   &lt;br /&gt;
 } &lt;br /&gt;
  void bitmap(){&lt;br /&gt;
  lcd.LCD_draw_bmp_pixel(0,0, DFrobot_bmp, 84,24);&lt;br /&gt;
  lcd.LCD_write_chinese(6,3, DFrobot_chinese,12,6,0,0);&lt;br /&gt;
  lcd.LCD_write_string(38, 5, &amp;quot;OK&amp;quot;, MENU_HIGHLIGHT );&lt;br /&gt;
  waitfor_OKkey();&lt;br /&gt;
  } &lt;br /&gt;
  void about(){&lt;br /&gt;
  lcd.LCD_write_string( 0, 1, &amp;quot;LCD4884 Shield&amp;quot;, MENU_NORMAL);&lt;br /&gt;
  lcd.LCD_write_string( 0, 3, &amp;quot;www.DFrobot.cn&amp;quot;, MENU_NORMAL);&lt;br /&gt;
  lcd.LCD_write_string(38, 5, &amp;quot;OK&amp;quot;, MENU_HIGHLIGHT );&lt;br /&gt;
  waitfor_OKkey(); &lt;br /&gt;
  } &lt;br /&gt;
  // which includes DEBOUNCE ON/OFF mechanism, and continuous pressing detection&lt;br /&gt;
  // Convert ADC value to key number &lt;br /&gt;
  char get_key(unsigned int input)&lt;br /&gt;
{&lt;br /&gt;
  char k;&lt;br /&gt;
 &lt;br /&gt;
  for (k = 0; k &amp;lt; NUM_KEYS; k++)&lt;br /&gt;
  {&lt;br /&gt;
    if (input &amp;lt; adc_key_val[k])&lt;br /&gt;
    {&lt;br /&gt;
 &lt;br /&gt;
      return k;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  if (k &amp;gt;= NUM_KEYS)&lt;br /&gt;
    k = -1;     // No valid key pressed&lt;br /&gt;
 &lt;br /&gt;
  return k;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  void update_adc_key(){&lt;br /&gt;
  int adc_key_in;&lt;br /&gt;
  char key_in;&lt;br /&gt;
  byte i;&lt;br /&gt;
 &lt;br /&gt;
  adc_key_in = analogRead(0);&lt;br /&gt;
  key_in = get_key(adc_key_in);&lt;br /&gt;
  for(i=0; i&amp;lt;NUM_KEYS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    if(key_in==i)  //one key is pressed &lt;br /&gt;
    { &lt;br /&gt;
      if(button_count[i]&amp;lt;DEBOUNCE_MAX)&lt;br /&gt;
      {&lt;br /&gt;
        button_count[i]++;&lt;br /&gt;
        if(button_count[i]&amp;gt;DEBOUNCE_ON)&lt;br /&gt;
        {&lt;br /&gt;
          if(button_status[i] == 0)&lt;br /&gt;
          {&lt;br /&gt;
            button_flag[i] = 1;&lt;br /&gt;
            button_status[i] = 1; //button debounced to 'pressed' status&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
    else // no button pressed&lt;br /&gt;
    {&lt;br /&gt;
      if (button_count[i] &amp;gt;0)&lt;br /&gt;
      {  &lt;br /&gt;
        button_flag[i] = 0; &lt;br /&gt;
        button_count[i]--;&lt;br /&gt;
        if(button_count[i]&amp;lt;DEBOUNCE_OFF){&lt;br /&gt;
          button_status[i]=0;   //button debounced to 'released' status&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
The sketch for displaying a variable value on the screen&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
 Modified by Lauren&lt;br /&gt;
 version 0.1&lt;br /&gt;
 Any suggestions are welcome.&lt;br /&gt;
 E-mail: Lauran.pan@gmail.com&lt;br /&gt;
 Editor     : Lauren from DFRobot&lt;br /&gt;
 Date       : 26.03.2012&lt;br /&gt;
 * This is a sample sketch for displaying a variable value on the LCD4884&lt;br /&gt;
 * This library and sample is compatible with the IDE V1.0 and earlier  &lt;br /&gt;
 Connection  &lt;br /&gt;
 Directly stack the LCD4884 shield on your Arduino board&lt;br /&gt;
  */&lt;br /&gt;
  #include &amp;quot;LCD4884.h&amp;quot; &lt;br /&gt;
  #define MENU_X  10      // 0-83&lt;br /&gt;
  #define MENU_Y  1       // 0-5 &lt;br /&gt;
  int counter = 0;&lt;br /&gt;
  char string[10]; &lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  lcd.LCD_init();&lt;br /&gt;
  lcd.LCD_clear();&lt;br /&gt;
 &lt;br /&gt;
  //menu initialization&lt;br /&gt;
  init_MENU();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  void init_MENU(void){&lt;br /&gt;
 &lt;br /&gt;
  byte i;&lt;br /&gt;
  lcd.LCD_clear();&lt;br /&gt;
  lcd.LCD_write_string(MENU_X, MENU_Y, &amp;quot;test screen&amp;quot;, MENU_HIGHLIGHT );&lt;br /&gt;
  }&lt;br /&gt;
  void loop(){&lt;br /&gt;
 &lt;br /&gt;
  if(++counter &amp;lt; 1000){&lt;br /&gt;
    itoa(counter,string,10);&lt;br /&gt;
    lcd.LCD_write_string(MENU_X, MENU_Y + 1, string, MENU_NORMAL);&lt;br /&gt;
  }&lt;br /&gt;
  else  counter = 0,init_MENU();&lt;br /&gt;
  delay(10); &lt;br /&gt;
  }&lt;br /&gt;
  Multi DS18B20 sensors display example&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Description: multiple DS18B20 sensors reading display sample&lt;br /&gt;
  Author: Amy&lt;br /&gt;
  Thanks for your sharing your LCD4884 application&lt;br /&gt;
  */ &lt;br /&gt;
  #include &amp;lt;OneWire.h&amp;gt;                 //one wire sensor protocol library (V2.0) from http://www.pjrc.com/teensy/td_libs_OneWire.html &lt;br /&gt;
  #include &amp;lt;DallasTemperature.h&amp;gt;       //dallas one wire temperature library (V3.6.0) from http://milesburton.com/index.php/Dallas_Temperature_Control_Library &lt;br /&gt;
  #include &amp;lt;LCD4884.h&amp;gt;&lt;br /&gt;
  //-----menu starting points--------------------------------------------------------------&lt;br /&gt;
  #define MENU_X 10  // Horizontal position range available is 0-83 in pixels&lt;br /&gt;
  #define MENU_Y 1  // Vertical Lines - range available is 0-5 in lines of text&lt;br /&gt;
  //-----Menu Variables--------------------------------------------------------------&lt;br /&gt;
  int analogstatus;  //Normal/center-1000-1200, Up-&amp;gt;700-800, Down-300-400, Left-&amp;lt;100, Right-500-600&lt;br /&gt;
  int page;  // value that determines what is displayed&lt;br /&gt;
  int maxpage;&lt;br /&gt;
  char buttonreadstring[10];&lt;br /&gt;
  char pagestring[10];&lt;br /&gt;
  //-----Temperature Variables--------------------------------------------------------------&lt;br /&gt;
  int temperature_sensor_bus=9;                 //hardwired DS18B20 bus &lt;br /&gt;
  OneWire oneWire(temperature_sensor_bus);      //setup one wire and Dallas temperature sensor library &lt;br /&gt;
  DallasTemperature sensors(&amp;amp;oneWire);&lt;br /&gt;
  float temp0;                                   //add more for additional sensors&lt;br /&gt;
  float temp1;&lt;br /&gt;
  char tempstring0[10];&lt;br /&gt;
  char tempstring1[10];&lt;br /&gt;
  int TEMPERATURE_PRECISION=9;                  //9 bit percision&lt;br /&gt;
  int numberOfDevices;                          // Number of temperature devices found&lt;br /&gt;
  DeviceAddress tempDeviceAddress;              // Temporarily store discovered device addresses&lt;br /&gt;
  //Setup********************************************************************************************************************************************** &lt;br /&gt;
  void setup(){&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  //--------------------Setup one-wire sensors ----------------------------------------&lt;br /&gt;
  sensors.begin(); // Start up the OneWire library&lt;br /&gt;
  delay(100);&lt;br /&gt;
  numberOfDevices = sensors.getDeviceCount();  // Get a count of sensors on the bus&lt;br /&gt;
  for(int xyz=0;xyz&amp;lt;numberOfDevices; xyz++)  // Loop through each device, print out address&lt;br /&gt;
  {&lt;br /&gt;
    if(sensors.getAddress(tempDeviceAddress, xyz))    // Search the wire for address&lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(&amp;quot;Found Sensor &amp;quot;);&lt;br /&gt;
      Serial.print(xyz, DEC);&lt;br /&gt;
      Serial.print(&amp;quot; with address: &amp;quot;);&lt;br /&gt;
      printAddress(tempDeviceAddress);&lt;br /&gt;
      Serial.println();&lt;br /&gt;
      Serial.print(&amp;quot;Setting resolution to &amp;quot;);&lt;br /&gt;
      Serial.println(TEMPERATURE_PRECISION,DEC);&lt;br /&gt;
      delay(100);&lt;br /&gt;
      sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);  // set the sensor resolution&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  sensors.requestTemperatures();            //issue global request for each temp sensor on network to return a temp&lt;br /&gt;
  if(sensors.getAddress(tempDeviceAddress, 0))temp0=(sensors.getTempC(tempDeviceAddress));&lt;br /&gt;
  if(sensors.getAddress(tempDeviceAddress, 1))temp1=(sensors.getTempC(tempDeviceAddress));&lt;br /&gt;
  //----Initialize, clear and backlight LCD SCREEN---------------------------------  &lt;br /&gt;
  lcd.LCD_init();&lt;br /&gt;
  lcd.LCD_clear();&lt;br /&gt;
  lcd.backlight(ON);//Turn on the backlight&lt;br /&gt;
  maxpage = 5;  //  Maximum number of pages to scroll through&lt;br /&gt;
  } //Setup End**********************************************************************************************************************************************&lt;br /&gt;
  void loop(){   //****Begin Loop*************************************************************************************************************************&lt;br /&gt;
  //-----Button Loop---------------------------------------------------------------- &lt;br /&gt;
  analogstatus = analogRead(0);  //Read Analog Pin 0&lt;br /&gt;
  //int analogstatus;  //Normal-1000-1200, Up-&amp;gt;700-800, Down-300-400, Left-0, Right-500-600, Center-100-200&lt;br /&gt;
  // if (analogstatus &amp;gt; 1000 &amp;amp;&amp;amp; analogstatus &amp;lt; 1200){Page = 0;}  //Use if when buttons are left alone, it should return to page 0&lt;br /&gt;
  while (analogstatus &amp;gt; 500 &amp;amp;&amp;amp; analogstatus &amp;lt; 600){&lt;br /&gt;
    if (page == maxpage - 1){&lt;br /&gt;
      page = 0; &lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      page = page++; &lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  while (analogstatus &amp;lt; 100){&lt;br /&gt;
    if (page == 0){&lt;br /&gt;
      page = maxpage-1; &lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      page = page--; &lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
  }  &lt;br /&gt;
  itoa(page,pagestring,10);&lt;br /&gt;
  itoa(analogstatus,buttonreadstring,10);&lt;br /&gt;
  //-----Button Loop END----------------------------------------------------------------   &lt;br /&gt;
  //WIP***************************************************************    &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  //WIP***************************************************************    &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  //WIP*************************************************************** &lt;br /&gt;
  //--------------Read temperatuere sensors---------------------------------------------- &lt;br /&gt;
  sensors.requestTemperatures();            //issue global request for each temp sensor on network to return a temp&lt;br /&gt;
  if(sensors.getAddress(tempDeviceAddress, 0))temp0=(sensors.getTempF(tempDeviceAddress));&lt;br /&gt;
  if(sensors.getAddress(tempDeviceAddress, 1))temp1=(sensors.getTempF(tempDeviceAddress));&lt;br /&gt;
  //--------------Page Definitions---------------------------------------------- &lt;br /&gt;
  itoa(temp0,tempstring0,10);&lt;br /&gt;
  itoa(temp1,tempstring1,10);&lt;br /&gt;
  if (page ==0){ &lt;br /&gt;
    lcd.LCD_clear();&lt;br /&gt;
    lcd.LCD_write_string(5, 0, &amp;quot;Page 1&amp;quot; , MENU_HIGHLIGHT); &lt;br /&gt;
    lcd.LCD_write_string(5, 1, &amp;quot;Temp 1: &amp;quot; , MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(50, 1, tempstring0, MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(70, 1, &amp;quot;F&amp;quot; , MENU_NORMAL); &lt;br /&gt;
    lcd.LCD_write_string(5, 2, &amp;quot;Temp 2: &amp;quot; , MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(50, 2, tempstring1, MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(70, 2, &amp;quot;F&amp;quot; , MENU_NORMAL);  &lt;br /&gt;
  }&lt;br /&gt;
  if (page ==1){&lt;br /&gt;
    lcd.LCD_clear();&lt;br /&gt;
    lcd.LCD_write_string(5, 0, &amp;quot;Page 2&amp;quot; , MENU_HIGHLIGHT); &lt;br /&gt;
    lcd.LCD_write_string(5, 1, &amp;quot;Temp 1: &amp;quot; , MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(50, 1, tempstring0, MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(70, 1, &amp;quot;F&amp;quot; , MENU_NORMAL); &lt;br /&gt;
  }&lt;br /&gt;
  if (page ==2){&lt;br /&gt;
    lcd.LCD_clear();&lt;br /&gt;
    lcd.LCD_write_string(5, 0, &amp;quot;Page 3&amp;quot; , MENU_HIGHLIGHT); &lt;br /&gt;
    lcd.LCD_write_string(5, 1, &amp;quot;Temp 2: &amp;quot; , MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(50, 1, tempstring1, MENU_NORMAL);&lt;br /&gt;
    lcd.LCD_write_string(70, 1, &amp;quot;F&amp;quot; , MENU_NORMAL); &lt;br /&gt;
  }&lt;br /&gt;
  if (page ==3){&lt;br /&gt;
    lcd.LCD_clear();&lt;br /&gt;
    lcd.LCD_write_string(5, 0, &amp;quot;Page 4&amp;quot; , MENU_HIGHLIGHT); &lt;br /&gt;
  }&lt;br /&gt;
  if (page ==4){&lt;br /&gt;
    lcd.LCD_clear();&lt;br /&gt;
    lcd.LCD_write_string(5, 0, &amp;quot;Page 5&amp;quot; , MENU_HIGHLIGHT); &lt;br /&gt;
  }&lt;br /&gt;
  //-----------Displayed on every page---------------------------------&lt;br /&gt;
  lcd.LCD_write_string(0, 4, buttonreadstring, MENU_NORMAL);&lt;br /&gt;
  lcd.LCD_write_string(0, 5, pagestring , MENU_NORMAL);&lt;br /&gt;
  //WIP***************************************************************    &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  //WIP***************************************************************    &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  //WIP***************************************************************  &lt;br /&gt;
  }//Loop End********************************************************************************************************************************************************  &lt;br /&gt;
  // FUNCTIONS********************************************************************************************************************************************************   &lt;br /&gt;
  // function to print a devices address&lt;br /&gt;
  void printAddress(DeviceAddress deviceAddress)&lt;br /&gt;
  {&lt;br /&gt;
  for (uint8_t xyz = 0; xyz &amp;lt; 8; xyz++)&lt;br /&gt;
  {&lt;br /&gt;
    if (deviceAddress[xyz] &amp;lt; 16) Serial.print(&amp;quot;0&amp;quot;);&lt;br /&gt;
    Serial.print(deviceAddress[xyz], HEX);&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related project ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dfrobot.com.cn/image/data/DFR0092/CN/LCD4884%20Shield%20V1_1%20SCH.pdf Schematics]&lt;/div&gt;</summary>
		<author><name>Alvin</name></author>
		
	</entry>
</feed>