{"id":6392,"date":"2012-12-28T09:54:10","date_gmt":"2012-12-28T14:54:10","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=6392"},"modified":"2012-12-29T18:38:55","modified_gmt":"2012-12-29T23:38:55","slug":"interfacing-a-character-lcd","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/interfacing-a-character-lcd\/","title":{"rendered":"Netduino Day 2: Interfacing a Character LCD"},"content":{"rendered":"<p>Liquid Crystal Displays (LCD) are a great choice of output device for displaying alphanumeric characters in real time. They are also very useful if your project requires an interactive user interface for data input. Besides, they are inexpensive, consume less power than LED displays, and give a more professional look to your project. Today we will explore how to interface an HD44780 based character LCD to Netduino to display alphanumeric characters. For technical details of the HD44780 driver, please read its <a href=\"http:\/\/http:\/\/www.sparkfun.com\/datasheets\/LCD\/HD44780.pdf\" target=\"_blank\">datasheet<\/a>\u00a0as well as its\u00a0<a href=\"http:\/\/embedded-lab.com\/blog\/?p=4831\">interfacing example with chipKit<\/a>.<\/p>\n<div id=\"attachment_6936\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/12\/NetduinoIndexPageTopBanner.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6936\" class=\"size-medium wp-image-6936\" title=\"NetduinoIndexPageTopBanner\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/12\/NetduinoIndexPageTopBanner-550x302.jpg\" alt=\"\" width=\"550\" height=\"302\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/12\/NetduinoIndexPageTopBanner-550x302.jpg 550w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/12\/NetduinoIndexPageTopBanner.jpg 595w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><p id=\"caption-attachment-6936\" class=\"wp-caption-text\">Information displayed on Character LCD<\/p><\/div>\n<p><!--more--><\/p>\n<h2>Circuit Setup and Theory<\/h2>\n<p>Connection wise it\u2019s really simple. The LCD is operated in 4-bit mode, and therefore pins 7 through 10 (D0-D3) of the LCD are unused. The four most significant data bits, D4-D7 (pins 12 through 14), receives LCD data\/command through Netduino I\/O pins 7, 5, 3, and 1, respectively. Similarly, the Register Select (R\/S) and Enable (E) signal lines of the LCD are driven by Netduino I\/O pins 11 and 9, respectively. LCD pins 1, 2, 3, 4, 15 and 16 are related to power supply, contrast adjustment and backlight LED display, and are connected appropriately as shown below. To understand how LCD works, I have to point you to a different document as it is explained better over there. In <a href=\"http:\/\/embedded-lab.com\/blog\/?p=4831\">Interfacing a Character LCD<\/a>,Raj explains about the communication in 4 bit mode and he also talks about the basics of HD44780 LCD driver. For more technical details, see\u00a0<a href=\"http:\/\/lcd-linux.sourceforge.net\/pdfdocs\/hd44780.pdf\">Hitachi HD44780U (LCD-II) datasheet<\/a>.<\/p>\n<div id=\"attachment_6857\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/netduino_day2_circuit.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6857\" class=\"size-full wp-image-6857\" title=\"netduino_day2_circuit\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/netduino_day2_circuit.png\" alt=\"\" width=\"550\" height=\"360\" \/><\/a><p id=\"caption-attachment-6857\" class=\"wp-caption-text\">Interfacing a HD44780 character LCD with Netduino<\/p><\/div>\n<h2>Connection With Netduino \/ Netduino Plus<\/h2>\n<div id=\"attachment_6672\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=6672\" rel=\"attachment wp-att-6672\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6672\" class=\"size-full wp-image-6672\" title=\"Day 2 Character LCD_Connection_With_Netduino_FZZ\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/Day-2-Character-LCD_Connection_With_Netduino_FZZ.png\" alt=\"\" width=\"550\" height=\"402\" \/><\/a><p id=\"caption-attachment-6672\" class=\"wp-caption-text\">Breadboard Connection: Character LCD and Netduino<\/p><\/div>\n<h2>C#.NET Program<\/h2>\n<p>There are two ways we can look at the program, one in a very simple way and other, obviously, harder way. In simpler way we don\u2019t worry about what\u2019s inside the <em>LCD class<\/em> (or a library) rather use some of the exposed methods or properties. Let\u2019s take a look at the simpler things first.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\">LCD lcd <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> LCD<span style=\"color: #008000;\">&#40;<\/span>\n    Pins<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GPIO_PIN_D11<\/span>, <span style=\"color: #008080; font-style: italic;\">\/\/ RS<\/span>\n    Pins<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GPIO_PIN_D9<\/span>,  <span style=\"color: #008080; font-style: italic;\">\/\/ Enable<\/span>\n    Pins<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GPIO_PIN_D7<\/span>,  <span style=\"color: #008080; font-style: italic;\">\/\/ D4<\/span>\n    Pins<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GPIO_PIN_D5<\/span>,  <span style=\"color: #008080; font-style: italic;\">\/\/ D5<\/span>\n    Pins<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GPIO_PIN_D3<\/span>,  <span style=\"color: #008080; font-style: italic;\">\/\/ D6<\/span>\n    Pins<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GPIO_PIN_D1<\/span>,  <span style=\"color: #008080; font-style: italic;\">\/\/ D7<\/span>\n    <span style=\"color: #FF0000;\">20<\/span>,                <span style=\"color: #008080; font-style: italic;\">\/\/ Number of Columns<\/span>\n    LCD<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Operational<\/span><span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">DoubleLIne<\/span>, <span style=\"color: #008080; font-style: italic;\">\/\/ LCD Row Format<\/span>\n    <span style=\"color: #FF0000;\">4<\/span>,                 <span style=\"color: #008080; font-style: italic;\">\/\/ Number of Rows in LCD<\/span>\n    LCD<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Operational<\/span><span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Dot5x8<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>    <span style=\"color: #008080; font-style: italic;\">\/\/ Dot Size of LCD<\/span>\n&nbsp;\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ShowCursor<\/span> <span style=\"color: #008000;\">=<\/span> <span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">;<\/span>\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Show<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #666666;\">&quot;www.Embedded-Lab.comWelcome's you to Netduino Tutorial site.  Happy Learning! :)&quot;<\/span>, <span style=\"color: #FF0000;\">200<\/span>, <span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\nThread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">1000<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span> <span style=\"color: #008080; font-style: italic;\">\/\/ reading time for the viewer<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p>As you can see we created an instance of <em>LCD<\/em> class and then set some properties to what we like and simply called the <em>Show<\/em> method. There are two <em>Show<\/em> methods, one will display the given text all at once and the other <em>Show<\/em> method will display one letter at a time.<\/p>\n<p>Now let\u2019s dig into the complex part. There are several libraries out there but I wrote my own to understand what\u2019s cooking inside. Let\u2019s look at the constructor section,<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\"><span style=\"color: #0600FF; font-weight: bold;\">public<\/span> LCD<span style=\"color: #008000;\">&#40;<\/span>Cpu<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Pin<\/span> rs, Cpu<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Pin<\/span> enable,\n    Cpu<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Pin<\/span> d4, Cpu<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Pin<\/span> d5, Cpu<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Pin<\/span> d6, Cpu<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Pin<\/span> d7,\n    <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span> columns, Operational lineSize, <span style=\"color: #6666cc; font-weight: bold;\">int<\/span> numberOfRows,\n    Operational dotSize<span style=\"color: #008000;\">&#41;<\/span>\n<span style=\"color: #008000;\">&#123;<\/span>\n    RS <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> OutputPort<span style=\"color: #008000;\">&#40;<\/span>rs, <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Enable <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> OutputPort<span style=\"color: #008000;\">&#40;<\/span>enable, <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D4 <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> OutputPort<span style=\"color: #008000;\">&#40;<\/span>d4, <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D5 <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> OutputPort<span style=\"color: #008000;\">&#40;<\/span>d5, <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D6 <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> OutputPort<span style=\"color: #008000;\">&#40;<\/span>d6, <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D7 <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> OutputPort<span style=\"color: #008000;\">&#40;<\/span>d7, <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    Columns <span style=\"color: #008000;\">=<\/span> columns<span style=\"color: #008000;\">;<\/span>\n    DotSize <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>dotSize<span style=\"color: #008000;\">;<\/span>\n    NumberOfLines <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>lineSize<span style=\"color: #008000;\">;<\/span>\n    NumberOfRows <span style=\"color: #008000;\">=<\/span> numberOfRows<span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    Initialize<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n<span style=\"color: #008000;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p>In the constructor section, it basically creates some <em>Outport<\/em>, saves the <em>LCD<\/em> properties and then calls the <em>Initialize<\/em> method. In this method, we set visual properties, initialize some arrays and then prepare the LCD for 4 bit communication mode.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\"><span style=\"color: #0600FF; font-weight: bold;\">private<\/span> <span style=\"color: #6666cc; font-weight: bold;\">void<\/span> Initialize<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span>\n<span style=\"color: #008000;\">&#123;<\/span>\n    <span style=\"color: #008080; font-style: italic;\">\/\/initialize fields<\/span>\n    isVisible <span style=\"color: #008000;\">=<\/span> <span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">;<\/span>\n    showCursor <span style=\"color: #008000;\">=<\/span> <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">;<\/span>\n    isBlinking <span style=\"color: #008000;\">=<\/span> <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    rowAddress <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #008000;\">&#93;<\/span> <span style=\"color: #008000;\">&#123;<\/span> 0x00, 0x40, 0x14, 0x54 <span style=\"color: #008000;\">&#125;<\/span><span style=\"color: #008000;\">;<\/span>\n    firstHalfAddress <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #008000;\">&#93;<\/span> <span style=\"color: #008000;\">&#123;<\/span> 0x10, 0x20, 0x40, 0x80 <span style=\"color: #008000;\">&#125;<\/span><span style=\"color: #008000;\">;<\/span>\n    secondHalfAddress <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">new<\/span> <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #008000;\">&#93;<\/span> <span style=\"color: #008000;\">&#123;<\/span> 0x01, 0x02, 0x04, 0x08 <span style=\"color: #008000;\">&#125;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    currentRow <span style=\"color: #008000;\">=<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">;<\/span>\n    dirtyColumns <span style=\"color: #008000;\">=<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    Thread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">50<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span> <span style=\"color: #008080; font-style: italic;\">\/\/ must wait for a few milliseconds<\/span>\n&nbsp;\n    <span style=\"color: #008080; font-style: italic;\">\/\/ RS to high = data transfer<\/span>\n    <span style=\"color: #008080; font-style: italic;\">\/\/ RS to low = command\/instruction transfer<\/span>\n    RS<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    <span style=\"color: #008080; font-style: italic;\">\/\/ Enable provides a clock function to synchronize data transfer<\/span>\n    Enable<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    <span style=\"color: #008080; font-style: italic;\">\/\/ Set for 4 bit model<\/span>\n    Write<span style=\"color: #008000;\">&#40;<\/span>0x03, secondHalfAddress<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Thread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">4<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Write<span style=\"color: #008000;\">&#40;<\/span>0x03, secondHalfAddress<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Thread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">4<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Write<span style=\"color: #008000;\">&#40;<\/span>0x03, secondHalfAddress<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Thread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">150<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Write<span style=\"color: #008000;\">&#40;<\/span>0x02, secondHalfAddress<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    <span style=\"color: #008080; font-style: italic;\">\/\/ Set the LCD properties<\/span>\n    <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span> operationalValue <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>Operational<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">FourBit<\/span> <span style=\"color: #008000;\">|<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>NumberOfLines <span style=\"color: #008000;\">|<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>DotSize<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    SendCommand<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>Command<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Operational<\/span> <span style=\"color: #008000;\">|<\/span> operationalValue<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    UpdateDisplayOptions<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    ClearDisplay<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span> entranceValue <span style=\"color: #008000;\">=<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>Entrance<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">FromLeft<\/span> <span style=\"color: #008000;\">|<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>Entrance<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ShiftDecrement<\/span><span style=\"color: #008000;\">;<\/span>\n    SendCommand<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#41;<\/span>Command<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Entrance<\/span> <span style=\"color: #008000;\">|<\/span> entranceValue<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n<span style=\"color: #008000;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p>Now, let\u2019s look at the methods that are critical to show the text to the LCD. The first <em>Show<\/em> method allows us to show the given text letter by letter as you can see the loop is structured for each character in the given text.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\"><span style=\"color: #0600FF; font-weight: bold;\">public<\/span> <span style=\"color: #6666cc; font-weight: bold;\">void<\/span> Show<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">string<\/span> text, <span style=\"color: #6666cc; font-weight: bold;\">int<\/span> delay, <span style=\"color: #6666cc; font-weight: bold;\">bool<\/span> newLine<span style=\"color: #008000;\">&#41;<\/span>\n<span style=\"color: #008000;\">&#123;<\/span>\n    <span style=\"color: #0600FF; font-weight: bold;\">if<\/span> <span style=\"color: #008000;\">&#40;<\/span>newLine<span style=\"color: #008000;\">&#41;<\/span> dirtyColumns <span style=\"color: #008000;\">=<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">;<\/span>\n    <span style=\"color: #0600FF; font-weight: bold;\">foreach<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">char<\/span> textChar <span style=\"color: #0600FF; font-weight: bold;\">in<\/span> text<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ToCharArray<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#41;<\/span>\n    <span style=\"color: #008000;\">&#123;<\/span>\n        ResetLines<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n        Show<span style=\"color: #008000;\">&#40;<\/span>Encoding<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">UTF8<\/span><span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">GetBytes<\/span><span style=\"color: #008000;\">&#40;<\/span>textChar<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ToString<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n        dirtyColumns <span style=\"color: #008000;\">+=<\/span> <span style=\"color: #FF0000;\">1<\/span><span style=\"color: #008000;\">;<\/span>\n        Thread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span>delay<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    <span style=\"color: #008000;\">&#125;<\/span>\n<span style=\"color: #008000;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p>The second <em>Show<\/em> method basically shows the whole text at once but before that it does some formatting so that the text will appear continuously. Trust me showing given text in a continuous way is one of the difficult part that I resolved in this <em>LCD<\/em> <em>class<\/em>.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\"><span style=\"color: #0600FF; font-weight: bold;\">public<\/span> <span style=\"color: #6666cc; font-weight: bold;\">void<\/span> Show<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">string<\/span> text<span style=\"color: #008000;\">&#41;<\/span>\n<span style=\"color: #008000;\">&#123;<\/span>\n    <span style=\"color: #6666cc; font-weight: bold;\">string<\/span><span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #008000;\">&#93;<\/span> splitedText <span style=\"color: #008000;\">=<\/span> SplitText<span style=\"color: #008000;\">&#40;<\/span>text<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Show<span style=\"color: #008000;\">&#40;<\/span>splitedText<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n<span style=\"color: #008000;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p>Finally, the method that writes information to the LCD is done under <em>Write<\/em> method. The first <em>Write<\/em> method calls the send <em>Write<\/em> method it passes the write value and the address where to send the information. The second <em>Write<\/em> method basically writes the information to the LCD.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\"><span style=\"color: #0600FF; font-weight: bold;\">private<\/span> <span style=\"color: #6666cc; font-weight: bold;\">void<\/span> Write<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #008000;\">&#93;<\/span> data<span style=\"color: #008000;\">&#41;<\/span>\n<span style=\"color: #008000;\">&#123;<\/span>\n    <span style=\"color: #0600FF; font-weight: bold;\">foreach<\/span> <span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span> <span style=\"color: #0600FF; font-weight: bold;\">value<\/span> <span style=\"color: #0600FF; font-weight: bold;\">in<\/span> data<span style=\"color: #008000;\">&#41;<\/span>\n    <span style=\"color: #008000;\">&#123;<\/span>\n        Write<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">value<\/span>, firstHalfAddress<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span> <span style=\"color: #008080; font-style: italic;\">\/\/ First half<\/span>\n        Write<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">value<\/span>, secondHalfAddress<span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span> <span style=\"color: #008080; font-style: italic;\">\/\/ Second half<\/span>\n    <span style=\"color: #008000;\">&#125;<\/span>\n<span style=\"color: #008000;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #0600FF; font-weight: bold;\">private<\/span> <span style=\"color: #6666cc; font-weight: bold;\">void<\/span> Write<span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #6666cc; font-weight: bold;\">byte<\/span> <span style=\"color: #0600FF; font-weight: bold;\">value<\/span>, <span style=\"color: #6666cc; font-weight: bold;\">byte<\/span><span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #008000;\">&#93;<\/span> halfAddress<span style=\"color: #008000;\">&#41;<\/span>\n<span style=\"color: #008000;\">&#123;<\/span>\n    D4<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">value<\/span> <span style=\"color: #008000;\">&amp;<\/span>amp<span style=\"color: #008000;\">;<\/span> halfAddress<span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">&#93;<\/span><span style=\"color: #008000;\">&#41;<\/span> <span style=\"color: #008000;\">&amp;<\/span>gt<span style=\"color: #008000;\">;<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D5<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">value<\/span> <span style=\"color: #008000;\">&amp;<\/span>amp<span style=\"color: #008000;\">;<\/span> halfAddress<span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #FF0000;\">1<\/span><span style=\"color: #008000;\">&#93;<\/span><span style=\"color: #008000;\">&#41;<\/span> <span style=\"color: #008000;\">&amp;<\/span>gt<span style=\"color: #008000;\">;<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D6<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">value<\/span> <span style=\"color: #008000;\">&amp;<\/span>amp<span style=\"color: #008000;\">;<\/span> halfAddress<span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #FF0000;\">2<\/span><span style=\"color: #008000;\">&#93;<\/span><span style=\"color: #008000;\">&#41;<\/span> <span style=\"color: #008000;\">&amp;<\/span>gt<span style=\"color: #008000;\">;<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    D7<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">value<\/span> <span style=\"color: #008000;\">&amp;<\/span>amp<span style=\"color: #008000;\">;<\/span> halfAddress<span style=\"color: #008000;\">&#91;<\/span><span style=\"color: #FF0000;\">3<\/span><span style=\"color: #008000;\">&#93;<\/span><span style=\"color: #008000;\">&#41;<\/span> <span style=\"color: #008000;\">&amp;<\/span>gt<span style=\"color: #008000;\">;<\/span> <span style=\"color: #FF0000;\">0<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n&nbsp;\n    Enable<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    Enable<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Write<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\n    <span style=\"color: #008080; font-style: italic;\">\/\/Debug.Print(&quot;Wrote &quot; + value.ToString());<\/span>\n<span style=\"color: #008000;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<h2>Output<\/h2>\n<p>After connecting a few wires, when you run your code and visualize the text that you wanted, puts smile in your face. Depending upon which <em>Show<\/em> method you are using will give you get different results, one will show letter by letter and other will show whole text at once. As in the video, when you rotate the potentiometer, the display contrast changes.<\/p>\n<div id=\"attachment_6455\" style=\"width: 546px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=6455\" rel=\"attachment wp-att-6455\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6455\" class=\"size-full wp-image-6455 \" title=\"Day2_Netduino_CharcterLCD_BreadBoard\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/Day2_Netduino_CharcterLCD_BreadBoard.jpg\" alt=\"\" width=\"536\" height=\"347\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/Day2_Netduino_CharcterLCD_BreadBoard.jpg 595w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/Day2_Netduino_CharcterLCD_BreadBoard-550x355.jpg 550w\" sizes=\"auto, (max-width: 536px) 100vw, 536px\" \/><\/a><p id=\"caption-attachment-6455\" class=\"wp-caption-text\">Character LCD, ready to take input<\/p><\/div>\n<div id=\"attachment_6510\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=6510\" rel=\"attachment wp-att-6510\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6510\" class=\"size-full wp-image-6510\" title=\"Output on Character LCD showing digits and albhabets\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/11\/Day-2_Netduino_Output_on_Character_LCD.png\" alt=\"\" width=\"550\" height=\"364\" \/><\/a><p id=\"caption-attachment-6510\" class=\"wp-caption-text\">Output on Character LCD showing digits and alphabets<\/p><\/div>\n<p>A small Video based on the following code:<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"csharp\" style=\"font-family:monospace;\">lcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ShowCursor<\/span> <span style=\"color: #008000;\">=<\/span> <span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">;<\/span>\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Show<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #666666;\">&quot;www.Embedded-Lab.comWelcome's you to Netduino Tutorial site.  Happy Learning! :)&quot;<\/span>, <span style=\"color: #FF0000;\">200<\/span>, <span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\nThread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">1000<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span> <span style=\"color: #008080; font-style: italic;\">\/\/ reading time for the viewer<\/span>\n&nbsp;\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ClearDisplay<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Show<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #666666;\">&quot;That was cool! Let's clear the display and show all text at once&quot;<\/span>, <span style=\"color: #FF0000;\">200<\/span>, <span style=\"color: #0600FF; font-weight: bold;\">true<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\nThread<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Sleep<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #FF0000;\">1000<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span> <span style=\"color: #008080; font-style: italic;\">\/\/ reading time for the viewer<\/span>\n&nbsp;\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ClearDisplay<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span>\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">ShowCursor<\/span> <span style=\"color: #008000;\">=<\/span> <span style=\"color: #0600FF; font-weight: bold;\">false<\/span><span style=\"color: #008000;\">;<\/span>\nlcd<span style=\"color: #008000;\">.<\/span><span style=\"color: #0000FF;\">Show<\/span><span style=\"color: #008000;\">&#40;<\/span><span style=\"color: #666666;\">&quot;ABCDEFGHILKLMnopqrstuvwxyz0123456789                              -Thanks!&quot;<\/span><span style=\"color: #008000;\">&#41;<\/span><span style=\"color: #008000;\">;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p><iframe loading=\"lazy\" src=\"http:\/\/www.youtube.com\/embed\/m_RXGrmGDco\" frameborder=\"0\" width=\"580\" height=\"436\"><\/iframe><\/p>\n<h2>Downloads<\/h2>\n<p>1) \u00a0\u00a0\u00a0 <a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=6853\">C#.NET Code (Solution file)<\/a><\/p>\n<p>2) \u00a0\u00a0\u00a0 <a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=6854\">Flitizing file<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>What Next<\/h2>\n<p>In our next tutorial we will learn about interfacing seven segments LED displays to Netduino. Seven segments LEDs commonly found in many electronics equipments as front panel displays. The next tutorial will also include a Light Dependent Resistor (LDR) to sense the surrounding light intensity that will be displayed on 4 seven segment LEDs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Liquid Crystal Displays (LCD) are a great choice of output device for displaying alphanumeric characters in real time. They are also very useful if your project requires an interactive user interface for data input. Besides, they are inexpensive, consume less power than LED displays, and give a more professional look to your project. Today we will explore how to interface an HD44780 based character LCD to Netduino to display alphanumeric characters. For technical details of the HD44780 driver, please read its datasheet\u00a0as well as its\u00a0interfacing example with chipKit.<\/p>\n","protected":false},"author":4,"featured_media":6454,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,495],"tags":[509,507,510,1316,500,508],"class_list":["post-6392","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-embedded-lessons","category-netduino","tag-character-lcd","tag-day-2","tag-lcd-driver","tag-netduino","tag-netduino-plus","tag-tutoria"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/6392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=6392"}],"version-history":[{"count":54,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/6392\/revisions"}],"predecessor-version":[{"id":6940,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/6392\/revisions\/6940"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/6454"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=6392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=6392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=6392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}