RuiViana

LCD comandos

Aug 7th, 2016
132
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #define LCD_CLEARDISPLAY 0x01
  3. #define LCD_RETURNHOME 0x02
  4. #define LCD_ENTRYMODESET 0x04
  5. #define LCD_DISPLAYCONTROL 0x08
  6. #define LCD_CURSORSHIFT 0x10
  7. #define LCD_FUNCTIONSET 0x20
  8. #define LCD_SETCGRAMADDR 0x40
  9. #define LCD_SETDDRAMADDR 0x80
  10.  
  11. // flags for display entry mode
  12. #define LCD_ENTRYRIGHT 0x00
  13. #define LCD_ENTRYLEFT 0x02
  14. #define LCD_ENTRYSHIFTINCREMENT 0x01
  15. #define LCD_ENTRYSHIFTDECREMENT 0x00
  16.  
  17. // flags for display on/off control
  18. #define LCD_DISPLAYON 0x04
  19. #define LCD_DISPLAYOFF 0x00
  20. #define LCD_CURSORON 0x02
  21. #define LCD_CURSOROFF 0x00
  22. #define LCD_BLINKON 0x01
  23. #define LCD_BLINKOFF 0x00
  24.  
  25. // flags for display/cursor shift
  26. #define LCD_DISPLAYMOVE 0x08
  27. #define LCD_CURSORMOVE 0x00
  28. #define LCD_MOVERIGHT 0x04
  29. #define LCD_MOVELEFT 0x00
  30.  
  31. // flags for function set
  32. #define LCD_8BITMODE 0x10
  33. #define LCD_4BITMODE 0x00
  34. #define LCD_2LINE 0x08
  35. #define LCD_1LINE 0x00
  36. #define LCD_5x10DOTS 0x04
  37. #define LCD_5x8DOTS 0x00
  38.  
  39. //----------------------------
  40. void LCDbegin(byte HC595)
  41. {
  42.   delay(15);                                    // Tempo de power on
  43.  
  44.   outs.SetModule(0, HC595);                     // Zera saida do 595
  45.  
  46.   write595(3, HC595);                           // Envia Hex 3  Interface 8 bits long ??
  47.   delayMicroseconds(4500);                      // wait min 4.1ms
  48.   write595(3, HC595);                           // Envia Hex 3  Interface 8 bits long ??
  49.   delayMicroseconds(40);                        // wait min 40 us
  50.   write595(3, HC595);                           // Envia Hex 3  Interface 8 bits long ??
  51.   delayMicroseconds(40);                        // wait min 40 us
  52.   write595(2, HC595);                           // Envia Hex 2  Interface 4 bits long
  53.   delayMicroseconds(40);                        // wait min 40 us
  54.  
  55.   // 28
  56.   write595(LCD_FUNCTIONSET, HC595);
  57.   write595(LCD_2LINE, HC595);                   // Envia Hex 8  display de 2 linhas
  58.   delayMicroseconds(60);                        // wait min 60 us
  59.  
  60.   // 08
  61.   write595(0, HC595);                           // Envia Hex 0
  62.   write595(LCD_DISPLAYCONTROL, HC595);                           // Envia Hex 8  ativa display
  63.   delayMicroseconds(60);
  64.  
  65.   // 0C
  66.   write595(0, HC595);                           // Envia Hex 0
  67.   write595(LCD_2LINE | LCD_DISPLAYON | LCD_CURSOROFF, HC595);   // Envia Hex 2 linlhas  cursor off Lcd on
  68.  
  69.   // 01
  70.   write595(0, HC595);                           // Envia Hex 0
  71.   write595(LCD_CLEARDISPLAY, HC595);            // Envia Hex 1  clear LCD
  72.   delay(3);                                     // wait min 3ms
  73. }
  74. //-----------------------------------
  75. void write595(byte value, byte HC595)
  76. {
  77.   cli();
  78.   outs.SetModule(value , HC595);                // Envia dados
  79.   pulse595(value, HC595 );                      // Pulsa ENA
  80.   sei();
  81. }
  82. //-----------------------------------
  83. void pulse595(byte value, byte HC595)           // Pulsa ENA para entra dados
  84. {
  85.   outs.SetModule((value  | 0x10), HC595);       // Adciona Ena
  86.   outs.SetModule((value  | 0x00), HC595);       // Remove Ena
  87. }
  88. //------------------------------
  89. void LCDwrite(byte value, byte HC595)           // Escreve um caracter
  90. {
  91.   byte data = (value >> 4 & 0x0F);              // Separa a parte alta do byte e or com RS
  92.   data = data | 0x40;                           // Aciona RS no dado
  93.   cli();                                        // Desabilita inerrupt
  94.   outs.SetModule(data, HC595);                  // Envia dados
  95.   pulse595(data, HC595);                        // Pulsa ENA
  96.   sei();                                        // Habilita inerrupt
  97.  
  98.   data = (value  & 0x0F) ;                      // Separa a parte baixa do byte e or com RS
  99.   data = data | 0x40;                           // Aciona RS no dado
  100.   cli();                                        // Desabilita inerrupt
  101.   outs.SetModule(data, HC595);                  // Envia dados
  102.   pulse595(data, HC595);                        // Pulsa ENA
  103.   sei();                                        // Habilita inerrupt
  104. }
  105. //---------------------------------------------------
  106. void LCDsetCursor(byte value, byte line, byte HC595)
  107. {
  108.   LCDHome(HC595);
  109.   line = line * 40;
  110.   for (int i = 0; i < (value - 1 + line); i++)
  111.   {
  112.     write595(LCD_ENTRYSHIFTINCREMENT, HC595);                 // Envia Hex 10
  113.     write595(LCD_MOVERIGHT, HC595);                           // Envia Hex 4
  114.   }
  115. }
  116. //---------------------------------------------------
  117. void LCDClear (byte HC595)
  118. {
  119.   write595(0, HC595);                           // Envia Hex 0
  120.   write595(LCD_CLEARDISPLAY, HC595);            // Envia Hex 1  clear LCD
  121.   delay(3);                                     // wait min 3ms
  122. }
  123. //-------------------------------------------------
  124. void LCDHome(byte HC595)
  125. {
  126.   write595(0, HC595);                           // Envia Hex 0
  127.   write595(LCD_RETURNHOME, HC595);              // Return to home
  128. }
  129. //----------------------------------------------------
  130. void LCDCursorOn(byte HC595)
  131. {
  132.   write595(0, HC595);                                            //
  133.   write595((LCD_2LINE | LCD_DISPLAYON | LCD_CURSORON), HC595);
  134. }
  135. //----------------------------------------------------
  136. void LCDCursorOff(byte HC595)
  137. {
  138.   write595(0, HC595);                                          //
  139.   write595((LCD_2LINE | LCD_DISPLAYON | LCD_CURSOROFF), HC595);
  140. }
  141. //--------------------------------------------
  142. void LCD_BlinkOn(byte HC595)
  143. {
  144.   write595(0, HC595);                                          //
  145.   write595((LCD_2LINE | LCD_DISPLAYON |  LCD_BLINKON), HC595);
  146. }
  147. //--------------------------------------------
  148. void LCD_BlinkOff(byte HC595)
  149. {
  150.   write595(0, HC595);                                          //
  151.   write595((LCD_2LINE | LCD_DISPLAYON |  LCD_BLINKOFF), HC595);
  152. }
RAW Paste Data