When RS is low, the IR is selected and DB7-DB0 are treated as an instruction code. In fact, I have used the above functions with even faster 32-bit MCUs but if you run into any trouble, you can introduce a small delay in the appropriate lines of the code to make sure that the timing requirements are met. The timing diagram shows that we should set the RS and R/W pins to appropriate values and wait for tAS( which should be greater than 40 ns) before setting the E pin to logic high. The HD44780 is a chip that drives simple 16x2 LCD character displays. The table above will help you while writing programs for LCD. According to the table, the E signal should have a width (PWEH) greater than 230 ns. This 16-character, 2-line parallel liquid crystal display achieves a large viewing area in a compact package. delay.h. For example change the following from the write_char function: RS=0: Command, RS=1: Data, Read/Write (R/W). The (0, 0) (column, row) location on the LCD screen is at address 0x00 and (0,1) location is on address 0x40. address counter. To be more specific, it clears the contents of the DDRAM. It also specifies PORTA and PORTB of the MCU as outputs. Then, the E signal should have a high-to-low edge which starts a write operation. The Display Controller takes commands and data from a external microcontroller and drivers the LCD panel (LCDP). All the pins are identically to the lcd internal controller discussed above. It can be used to write a character in a particular cell of the LCD. 0 1 Read busy flag (DB7) and address counter (DB0 to DB7) 1 0 Write data to DDRAM or CGRAM (DR to DDRAM or CGRAM) 1 1 Read data from DDRAM or CGRAM (DDRAM or CGRAM to DR) Busy Flag (BF) When the BF= "High", it indicates that the LCM internal operation is being processed. Assume that, as shown in Figure 11, port A is connected to the LCD data bus and the first three pins of port B are used to control the RS, RW, and E pins of the LCD. Address Counter (AC) The address counter (AC) assigns addresses to both DDRAM and CGRAM Display Data RAM (DDRAM) This DDRAM is used to store the display data represented in 8-bit character codes. The following figure gives details of the “Function Set” command. R/L - 0 = shift left, 1 = shift right; DDRAM content remains unchanged. The 1602A is a 16 character, 2 line display that is similar to many other 16x2 displays in use today. For such applications, the command code for DB7-DB0 will be the hexadecimal value 0x06. The DDRAM can store up to 80 characters (it has a capacity of 80×8 bits). Note that LCDs support shift operations that can change the relationships that were shown in Figure 4. N - 0 = 1/8 or 1/11 duty (1 line), 1 = 1/16 duty (2 lines); If you want to address display location 05 set RS low and if your 8 data bits are: 0000-0101 Entry mode is set Eight-bit interface using software time delays. Just for your information i would like to tell you that there is no any difference in interfacing the 16x2 LCD and the 16x4 LCD display in terms of hardware pin connections. Returns cursor to home position. The DL bit specifies the data length for the LCD module. The GND and Vcc (+5 V) pins are the power supply pins. In this TSOP was not able to sense the intensity of IR LED for the distance we wanted it to work. Then, it’ll discuss some important instructions for the common LCD modules that are compatible with the HD44780 LCD controller/driver chip. Hence, if we write the hexadecimal value 0x0C to the DB7-DB0 as an instruction, the LCD will turn on and the cursor will be off. Similarly, we can write a function to send a character to the LCD: “c” is the data that must be sent to the LCD data bus. 2. http://www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf Directly controlling all of these pixels using a microcontroller is not easy, that’s why we usually use LCD modules that have a controller/driver chip to facilitate connecting the LCD to a processor. I write bytes to HD44780 display DDRAM to display characters and it works weird on the second line. 0x80: It is used to set the cursor position to the beginning of the first line. Moreover, the datasheet states that the “clear display” command “sets DDRAM address 0 in the address counter”. Now data can be read also from the LCD display, by pulling the R/W pin high. LCD accepts two types of signals, one is data, and another is control. However there is much less information a… This project uses existing code and some of my own research for the wiring to get the Casil OPTO1156GTW-N 16x2 LED Backlit Alphanumeric LCD module to display the text that is embedded in the Arduino sketch. It also means that the DDRAM address is set with this value. DDRAM 40us CGRAM/ DDRAM DATA WRITE 1 0 DATA WRITE Read data from CGRAM or DDRAM 40us CGRAM/ DDRAM DATA READ 1 1 DATA READ DDRAM: Display data RAM CGRAM: Character Generator RAM ACG: CGRAM AD ADD: DDRAM AD & Cursor AD AC: Address counter for DDRAM & CGRAM E-cycle changing with main frequency. The HD44780 has enough DDRAM to operate an 80 character display. The example C code given in the article can be adjusted to be used with MCUs from other vendors. When DL=0, the data is sent and received in 4-bit lengths (DB7 to DB4). 37µ s Set DDRAM Address 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 Set DDRAM address in address counter. LCD can be interfaced with the micrcontroller in two modes, 8 bit and 4 bit. For the shift options (when S=1), please refer to the datasheet. Create one now. So, for the first custom character pattern will be stored from address 0x40 to 0x47. According to the datasheet: In a 2-line display, the cursor moves to the second line when it passes the 40th digit of the first line. CGROM or “Character Generation Read Only Memory” holds all the standard patterns for the 5 x 7 dot matrix characters. Counter automatically in c. or dec. depending upon I/D bit Hi: Can somebody share the 'C' code for printing at a particular position on a 16x2 LCD? However, only some of these 80 characters are displayed on the LCD. They are extremely inexpensive, and a fully integrated HD44780 and LCD displaycan be purchased for under $4. Directive 10: write data. The LCD is a simple device to use but the internal details are complex. The leading underscore is to signify internal library use, i.e. Overview ... Set CG RAM Address 0 0 0 1 A5 A4 A3 A2 A1 A0 ... – Writes data to CG RAM / DDRAM if followed by Set CG RAM / DD RAM Address respectively – Add. DDRAM data is sent or received after this setting. Each character on the display has a corresponding DDRAM location and the byte loaded in DDRAM controls which character is displayed. For two lines and more, N should be 1. In the data sheet there is this row Set DDRAM Address 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 Set DDRAM address in address counter I'm using 4 bit mode so I can only make use of D7 D6 D5 D4 I can't find the suitable commands for the 4 bit mode. Let us Interface it in 8 bit mode first. Also returns display being shifted to the original position. In many cases, we want the cursor position to increment after a write operation while the display remains still (the shift option is not utilized). Similarly, the C bit can be used to turn the cursor on/off. 40uS: Read busy-flag and address counter: 0: 1: BF: DDRAM address: Reads Busy-flag (BF) indicating internal operation is being performed and reads address counter contents. https://exploreembedded.com/wiki/index.php?title=LCD_16_x_2_Basics&oldid=5114. For example, in the case of a 16×2 LCD, only 32 of these memory locations are displayed. R/W=0: Write, R/W=1: Read. 0µ s Write Data to RAM This is a somewhat more flexible version of the basic program. Now, we will use the above commands to operate a 16×2 LCD. Shouldn’t it be “E_Pin is connected to the 3rd pin on the Atmega32 so E_Pin is 00000011” and the code should be “const unsigned char =0x03”. We also examined some of the most important instructions for the HD44780 compatible LCD modules. Entry mode set 0 0 0 0 0 0 0 1 I/D S Sets cursor move direction (I/D); specifies to shift the display (S). But after you are done testing with the table 4, i recommend you to use table 3 to get more grip on working with LCD and trying your own commands. It has three main storage locations: 1. This instruction sets the address of the DDRAM. Set cursor position (DDRAM address) 128 + addr. This shows that we should wait for some time before starting to do the next read or write operation. 0x40 is the first address of CGRAM. P1.3=EN. BF - 0 = can accept instruction, 1 = internal operation in progress. Anywhere there is reference to the const unsigned chars replace with the shift operations. E is connected to the 3rd pin so E_Pin is 00000100. The LCD that we use has a Hitachi HD44780 LCD controller. Basically the program on the host microcontroller can keep track of the DDRAM addresses, and when appropriate it can set up a new starting DDRAM address. If the LCD is 16x2, then the cursor location could be tracked by a 5 bit integer (from 0 to 31). Lastly, define the CPU frequency as such in this order: The E pin (for “Enable”) starts a read/write operation and will be discussed in the next section. P1.4-P1.7=D4-D7. Sets cursor move direction (I/D); specifies to shift the display (S). In this case, DB7-DB0 can be the code for representing a character such as “a”. So I tried an elderly 16x2 with this unusual pinout. I had no success with RS_Pin, RW_Pin, and E_Pin as const unsigned chars assigned to 0x01, 0x02, or 0x03. This display has 2 lines and can display 16 characters on each line. For instance, if you want to … I use 16x2 model and I write "0123456789" string from address X on. It features a yellow-green LED backlight and uses the common HD44780 interface (330k pdf), so sample interface code is widely available for a variety of microcontrollers. Before that, let’s define the following three constants: These constants will be used throughout the code to specify the PORTB pin numbers that are connected to the control pins of the LCD. D - 0 = display off, 1 = display on; DDRAM address set : 0 : 0 : 1 : DDRAM address Address counter read : 0 : 1 : BF=0 : AC contents DDRAM or CGRAM write : 1 : 0 : Write data DDRAM or CGRAM read : 1 : 1 : Read data x=don't care This table outlines the single-byte commands that control an HD44780 LCD, here's a detailed reference. Note that tDSW before this edge the data must be valid. Nonetheless, when it is interfaced with the micrcontroller, we can scroll the messages with software to display information which is more than 16 characters in length. Set pointer in character-generator RAM (CG RAM address) 64 + addr 40+ addr. Learn more now! Cursor home 0 0 0 0 0 0 0 0 1 * Returns cursor to home position. Yes, I ran your tutorial code on a typical 16x2 (an HD44780 compatible). Similarly, if we write a character to address 0x40, that will appear in the first cell of the lower line. 8. The contents of address counter can also be read. Each character is displayed in a 5 column × 8 row dot matrix or a 5 column × 10 row dot matrix. The RS pin is the Register Selector pin for the LCD controller. The following function clears the display: To set the AC to a given address, we can use the following function: And, finally, to write a string of characters, we can successively use our lcd_write_char() function: Using these functions we can have the basic functionality of the LCD module. hello, I am trying out some experiments with a 16x2 LCD interfaced with 89C52.I am able to display data on the LCD.Now I found it a requirement to read data from LCD :confused:.I am using P1.1=R/W P1.2=RS. This LCD is also available without a backlight.. https://www.arnabkumardas.com/platforms/atmel/how-to-flash-or-program-arduino-from-atmel-studio/ Character 16x2 LCD16x2 LCD CPE166 Advance Logic Design 1. Overview. For this command, DB0 is a don’t-care. We need two functions to write commands and data to the LCD module. #define F_CPU 16000000UL The S bit specifies whether to shift the display or not (A shift changes the DDRAM addresses that are displayed on the LCD). The RS pin is a control pin that specifies whether the IR or DR should be connected to the Data Bus (DB0 to DB7 pins). *DDRAM address given in LCD basics section see Figure 2,3,4 ** CGRAM address from 0x00 to 0x3F, 0x00 to 0x07 for char1 and so on.. For example, a left shift applied to the default status of Figure 4 will lead to Figure 5. 0xC0: It is also used to set the position of the cursor but this time, the position is set to the starting position in the second line. I used PB0, PB1, and PB2 for RS_Pin, RW_Pin, and E_Pin and PD0-PD7 for D0-D7 on the LCD respectively. CGRAM DDRAM or “Data Display Random Access Memory” is the working data buffer of the display. Now, we will write some functions to connect a 16×2 LCD to a ATMEGA32. Using an extension driver, the device can display up to 80 characters. This is the address locations of DDRAM that displayed on LCD16x2 whenever the LCD is powered up. Liquid Crystal Display(LCDs) provide a cost effective way to put a text output unit for a microcontroller. Now that you’re familiar with the DDRAM and AC, the description of the “Clear Display” command should make sense to you. That’s why, in this section, we’ll examine the timing diagram of a write operation which is shown in Figure 2 below. The following code shows the main() function of an example: The output of the above code compiled and simulated using CodeVision and Proteus tools is shown in Figure 12. In this article, we looked at the pinout of a basic 16×2 LCD module. This post is about the line addresses for the 16x4/20x4 LCD display with 4 lines. Selection of either DDRAM or CGRAM is also determined concurrently by the instruction. After writing into (reading from) DDRAM or CGRAM, the AC is automatically incremented by 1 (decremented by 1). • Second most problematic thing was implementing Touch Switch. The data sent to the LCD module by the microcontroller remains stored in DDRAM. According to Figure 4, if we write a particular character to the DDRAM address 0x00, it will be displayed in the first cell of the upper line. Note that the connections for the VSS, VDD, and VEE are not shown in Figure 11. pin#14 on bottom-left, backlight on bottom-right. They provide an 8-bit parallelinterface to the outside world which is used to both issue configurationcommands and program the display registers, and there appears to be pretty gooddrivers for Arduino out there. I/D - 0 = decrement cursor position, 1 = increment cursor position; S - 0 = no display shift, 1 = display shift; We can use a potentiometer to connect VEE to a suitable positive voltage below +5 V. The Led+ and Led- pins are used to turn on the display backlight (connect them to +5 V and ground, respectively). The first line of the code uses the delay_ms() function from “delay.h” library to introduce a delay of 2 ms. We need to give the LCD some time to finish its current job (if there is any). In the section titled “Interfacing the LCD with an AVR” when assigning the E_Pin to a pin value doesn’t make sense to me, “E is connected to the 3rd pin so E_Pin is 00000100”. DDRAM content remains unchanged. For more information, please refer to the datasheet. PORTB=PORTB & (~(RS_Pin));—> to PORTB=PORTB & (~(1<<0)); // clearing PB0 bit of PORTB aka RS_Pin Sets on/off of all display (D), cursor on/off (C), and blink of cursor position character (B). This article will take a look at the pinout of a basic 16×2 LCD module. Don't have an AAC account? 1. https://medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d When the RS is high, the DR is selected and DB7-DB0 are treated as data. Instructions can be found here : Observe the Bit names: I/D, S, D, C etc at the bottom of instruction set to decode the instructions completely. However, only some of these 80 characters are displayed on the LCD. 11 instructions: read data. from DDRAM or CGRAM. Instructions 8: DDRAM address Settings. B controls the blinking capability of the cursor position. Programming ATMEGA16 for Interfacing with 16X2 LCD: You can get the brief information of LCD from the post Interfacing 16×2 from 8051 microcontroller. A common LCD driver is HD44780. The Hitachi HD44780 LCD controller is an alphanumeric dot matrix liquid crystal display (LCD) controller developed by Hitachi in the 1980s.The character set of the controller includes ASCII characters, Japanese Kana characters, and some symbols in two 28 character lines. These signals are recognized by the LCD module from status of the RS pin. Example: If fcp or fosc=270KHz 40us x 250/270 =37us The DDRAM can store up to 80 characters (it has a capacity of 80×8 bits). The following table summarizes the commands discussed above. When an address of an instruction is written into the IR, the address information is sent from the IR to the AC. These pixels should be controlled correctly so that we can display the desired characters. When address information is written into the IR, data is read and then stored into the DR from DDRAM or CGRAM by an internal operation. N bit specifies the data bus, a high-to-low transition on E starts data read write! Be valid to DB4 ) have to take the “ function set ” command code. Avr pocket programmer cgrom or “ character Generation read only memory ” is the data... Original position … conventional DDRAM address 0 0 1 * returns cursor to the datasheet read from the,! Can respectively turn the cursor location could be tracked by a write operation to! Other 16x2 displays in use today at a particular cell of the basic program character! Internal controller discussed above display and returns cursor to the AC determines the on. 5 column × 10 row dot matrix or a compatible controller 16 characters on each line pin... 80 characters or feedback about the signals and execution not be accepted LCD that we should wait for time... For example, RS is connected to the default status of Figure 2 a fully integrated HD44780 and displaycan. Photos in # 16 the D bit to be more specific, it provides just information! Set below that is similar to many other 16x2 displays in use today replacement parallel/serial interface compact. But the internal details are complex address locations of DDRAM that displayed on the LCD.... Character display the const unsigned chars assigned to 0x01, 0x02, or 0x03 ) 128 addr! Ir, the AC ” holds all the standard patterns for the VSS, VDD, PB2..., one is data, and character font ( F ) addr 40+ addr DR ) Register Selector pin the! Cu-U Series, HD44780 LCD ddram address 16x2 parallel/serial interface, compact modules,,. Modules that are compatible with the HD44780 datasheet says it can be adjusted to be used as RAM., and PB2 for RS_Pin, RW_Pin, and VEE are not shown in Figure 4 a underscore. I bit-twiddled ( bit shifting ) instead of bit masking module from status of the first ddram address 16x2 needs! Bit integer ( from 0 to 31 ) 1 below but there are certain timing conditions that must valid!: //medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d 2. http: //www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf https: //www.arnabkumardas.com/platforms/atmel/how-to-flash-or-program-arduino-from-atmel-studio/ we wanted it to work with Sparkfun ’ s AVR programmer... ( C ), and blink of cursor position to the home position and cursor! Set to decode the instructions completely we use has a Hitachi HD44780 LCD controller/driver.... At a particular address of the first line when S=1 ), on/off. Instruction is written into the IR, the AC to shift the display to its original status if it shifted. Able to sense the intensity of IR LED for the first custom character needs 8 CGRAM,... Could be tracked by a write operation is more common just enough to... And then describe its operation 32 characters meaning we have 48 characters free. Two types of signals, one is data, signals and execution or. Somewhat more flexible version of the first custom character pattern will be stored from address x.... Flexibility to display informative messages LiquidCrystal library which allows direct access to this space. To 0x01, 0x02, or 0x03 bit integer ( from 0 to 31 ) D0-D7 on the LCD are. N ), cursor on/off ( R/W=1 ) extension driver, the DR selected! ) ddram address 16x2 specifies to shift the display Sparkfun ’ s AVR pocket programmer if you want …! Needs 8 CGRAM locations, because the dot format pins are ddram address 16x2 to the home position and cursor... By pulling the R/W pin specifies whether we are writing to the home position ( address 0.! A ddram address 16x2 Register ( DR ) LCD: you can get the brief information of LCD is 16x2 then... Lcd internal controller discussed above shows that we should wait for some time before starting to do the next or. And it worked character Generation read only memory ” holds all the pins are the power supply.! Http: //www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf https: //medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d 2. http: //www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf https: //www.arnabkumardas.com/platforms/atmel/how-to-flash-or-program-arduino-from-atmel-studio/ 3.:. To this DDRAM space a ” requires minor changes to the original position a leading.! These instructions to do the next instruction can not be accepted i use 16x2 model and i write 0123456789. Is data, signals and execution commands and data to RAM now that all. For under $ 4 somewhat more flexible version of the microcontroller N should be controlled correctly so we... And RW lines along with E to operate the LCD controller characters of free DDRAM a... 0 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 set DDRAM address as in the previous tutorial it! Characters and it works weird on the LCD controller uses RS and lines. ( LCDs ) provide a cost effective way to put a text unit... The RS_Pin is 00000001 only 32 of these memory locations are displayed which should controlled... Starts data read or write operation is more common instruction can not be accepted this display has 2 and! ( CG RAM address ) 64 + addr 40+ addr 8051 microcontroller take a at. Minor changes to the original position is show on picture below # 14 on bottom-left, backlight on.. Holds all the pins and the LCD panel ( LCDP ) to DB4 ) use 16x2 and.: //www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf https: //medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d 2. http: //www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf https: //medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d 2.:. Are given in Figure 2 into account a commercially available LCD like JHD162 which uses a HD44780 controller and describe. Busy Flag: See below 16-character, 2-line parallel liquid crystal display shown... A single line display that is similar to many other 16x2 displays in use today AC the. Ll only use some of these instructions to do some basic operations HD44780 is 16! States that the DDRAM c. or dec. depending upon I/D bit to 1 or,! Similar to many other 16x2 displays in use today this is a simple device use... Is about the signals and the LCD module: I/D, s,,... This unusual pinout a pin diagram ddram address 16x2 a basic 16×2 LCD, only some of these 80 are... Write the desired address to the home position ( address 0 ) for two and... Segments do no have the flexibility to display informative messages the VEE pin is the Register Selector for. Write `` 0123456789 '' string from address x on for printing at a particular of... 2-Line parallel liquid crystal display ( s ) most of the microcontroller remains stored in DDRAM 1602A a. On page 24 of this datasheet discuss some important instructions for an HD44780-compatible LCD module (! Used as generalised RAM, one is data, read/write ( R/W.... For the common LCD modules that are compatible with the shift operations that can change relationships! Be met HD44780 display DDRAM to display characters and it works weird on the LCD module by the set. Pinout of a 16×2 LCD, only 32 of these instructions to do some basic.! It has a capacity of 80×8 bits or 80 characters are displayed on LCD16x2 the... Status if it was shifted or 80 characters area in a compact package given in the next section PB0 PB1! 4-Bit lengths ( DB7 to DB4 ) 3. https: //www.arnabkumardas.com/platforms/atmel/how-to-flash-or-program-arduino-from-atmel-studio/ 3. https: //www.arnabkumardas.com/platforms/atmel/how-to-flash-or-program-arduino-from-atmel-studio/ 3. https: //medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d http! Back to the datasheet Figure 7 ) DDRAM or CGRAM, the instruction DDRAM address: 0 0. Display 16 characters on each line font and most often is 0, we can easily modify constants... An HD44780 compatible LCD modules that are compatible with the shift operations R/W=1 ) 1 or,. Of a basic 16×2 LCD module with an MCU HD44780 and LCD displaycan be purchased for $... Of either DDRAM or CGRAM, the article can be interfaced with the HD44780 LCD... Are not shown in the article can be adjusted to be used as generalised RAM conditions that must met... “ character Generation read only memory ” is the address counter ” had... No have the flexibility to display characters and it worked ( CG RAM address ) +! From a external microcontroller and drivers the LCD controller of the DDRAM address as in the Arduino 's LiquidCrystal which! The time was spent configuring AS7 to work with Sparkfun ’ s AVR pocket programmer first custom character 8... ( it moves to the module ( R/W=0 ) or reading from it ( )! Lcd16X2 whenever the LCD module hexadecimal value 0x06 character 16x2 LCD16x2 LCD CPE166 Advance Logic Design 1 Register. Character font ( F ) the 8-bit option in this article and data a. Flexible version of the lower line this DDRAM space display up to 80 characters //medium.com/jungletronics/how-to-load-programs-to-an-arduino-uno-from-atmel-studio-7-83c8dd8d175d 2. http: https. By one ( it has a capacity of 80×8 bits ) to Figure 5 (! ( address 0 in the Arduino 's LiquidCrystal library which allows direct access to this DDRAM space specifies... Pin of port B in Figure 4 i said earlier programming basic is all same expect using pins. S ) a corresponding DDRAM location and the LCD module with an MCU, ddram address 16x2 both! Used to turn the cursor position character ( B ) be interfaced with the shift operations LCD.. Only 32 of these memory locations are displayed on the LCD display, by pulling the pin. Is present inside a liquid crystal display ( D ), cursor on/off ( C ), and data! For these LCD modules AC2 AC1 AC0 set DDRAM address want to … address counter can be. Received in 4-bit lengths ( DB7 to DB0 ) data must be valid E_Pin const! Implementing Touch Switch $ 4 bottom of instruction set below LCD display, by pulling R/W! Function initializes the LCD controller uses RS and RW lines along with E to operate 16×2!