Table of Contents
Earlier we learn how to display English letters or ASCII codes (defined for characters) on LCD 16×2. But now we will learn how to display Hindi or custom characters on LCD 16×2 using Arduino (regional language) like Hindi letters or degree symbols or smiley etc.
Before we begin we first need to understand some concepts
- First of all, we know LCD 16×2 can display 32 characters on the screen but each character space has a predefined pixel dimension of 5×8, where 5 refers to vertical lines (5 columns) and 8 refers to horizontal lines (8 rows).
- Secondly, there are 8 location presents on the LCD controller where a custom character can be stored. That means we can store a maximum of 8 characters at a time.
- To display a custom character we need to design that character on a display matrix of 5×8 and to generate a binary or hex code corresponding to that.
- We need 8 byte code for one custom-character/letter (each byte contains 8 bit). See the diagram below to understand it more or visit this URL “https://www.riyas.org/2013/12/online-led-matrix-font-generator-with.html” to generate code for any pattern:
PATTERN CODE GENERATOR
The first row makes first byte code i.e. “byte 0” then the second row makes second byte i.e. “byte 1”, and so on up for 8 bytes.
This is a 5×8 led pattern generator matrix.
For the first byte, in row 1 all LEDs are marked HIGH that means all are 1’s which makes the binary number as “11111” (byte contains 8 bit we will consider them as 0 before the number as this does not make any difference). Decimal number of Binary 11111 is 31 and hexadecimal is 1F.
Following the same process generates 8 byte code.
For the second byte in row 2, only a single LED is marked that means only that makes 1’s, it makes the binary number as “00100”.
For the third byte in row 3, three LEDs are marked; that means three LEDs make 1’s, which makes the binary number as “01110”.
For fourth byte 10101
For fifth byte 01101
For sixth byte 00100
For seventh byte 00100
For eighth byte 00000
In short, which are marked or high are considered as 1, and which are unmarked or low are considered as 0.
Note: Red dot shows led are ON to generate pattern & white are OFF.
- After generating binary values, we send address location either 64 or 72 or 80 etc. for the first symbol to command register of LCD then we send bitmap value to the LCD data register to get stored in that space. Similarly, other characters can be stored of sizes up to (8 bytes). The location of the next space is apart by 8-byte space.
The symbol locations with their base addresses are given below:
S.N. |
Symbol Code |
Base Address |
1. |
Symbol [0] |
64 |
2. |
Symbol [1] |
72 |
3. |
Symbol [2] |
80 |
4. |
Symbol [3] |
88 |
5. |
Symbol [4] |
96 |
6. |
Symbol [5] |
104 |
7. |
Symbol [6] |
112 |
8. |
Symbol [7] |
120 |
Symbol locations with base addresses in ROM
ARDUINO CODE TO DISPLAY HINDI OR CUSTOM CHARACTER ON LCD 16X2 USING ARDUINO
The symbol locations with their base addresses are given below:
#include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // generating hindi ‘क’ using hexadecimal value byte hindi_k[8] = { 0x1F, 0x04, 0x0E, 0x15, 0x0D, 0x04, 0x04, 0x00, }; // generating smiley using binary value byte smiley[8] = { B00000, B10001, B00000, B00000, B10001, B01110, B00000, }; void setup( ) { /* It is important to use createChar() first before lcd.begin() then only it will work properly*/ lcd.createChar(0, hindi_k); lcd.createChar(1, smiley); lcd.begin(16, 2); lcd.write(byte(0)); lcd.write(byte(1)); delay(1000); } void loop( ) { }
OUTPUT
READ NEXT
4 BIT MODE & 8 BIT MODE OF LCD 16×2
i want to write in hindi on a display board