You are on page 1of 16

Custom Characters on alphanumeric LCD Content 1. Custom characters on alphanumeric LCD o o o o o o o 1.1 Project Developed by:1.2 Description:1.

3 Components Used:1.4 Pics:1.5 Its Applications:1.6 Video:1.7 Code:-

Project Developed by:-Sahil Bansal

B.tech (1st year) PEC University of Technology

Description:- To display Hindi characters , Custom characters ,Smileys and other symbols on 16*2 alphanumeric lcd and also with the help of keypad. There are 8 symbol locations in LCDs controller where a custom character can be stored. These locations can have a particular bitmap layout which would correspond to a custom made character. In this case these bitmap layouts are set according to Hindi alphabets. To display location 96 (ASCII code 4). , the bitmap values are mapped to first base address

This is achieved by first sending the address location (96) to LCD command register. Next, the bitmap values (0, 10, 21, 17, 10, 4, 0, 0) are sent to the LCD data register. Now the gets stored at this address. Similarly other alphabets can also be stored at different (up to 8) addresses. Now whenever an alphabet is to be displayed, its location should be sent as a command instruction to LCD.

Components Used:1. 16*2 alphanumeric LCD 2. 8051 Development Board 3. 4*4 matrix Keypad 4. 4 Pin Keypad Connectors

Pics:-

Application of :1. 2. 3. Video:Hindi Character keyboard Custom Characters keyboard Smileys and other Special symbols Keyboard

Code:// C code to create and display custom characters, hindi char., // smilies, heart and musical note symbol #include<reg52.h> sbit d1=P1^0; sbit d2=P1^1; sbit d3=P1^2; sbit d4=P1^3;

// declaration of lcd data pins//

sbit rs=P1^4; sbit en=P1^5;

//register select pin// //Enable pin.... here read/write pin is grounded//

sbit row1=P2^0; sbit row2=P2^1; sbit row3=P2^2; sbit row4=P2^3; sbit sbit sbit sbit col1=P3^0; col2=P3^1; col3=P3^2; col4=P3^3;

// rows of matrix keypad//

// cloumns of matrix keypad//

unsigned char slogan1[]="Enter any key"; unsigned int count=0; void l_delay(); void s_delay(); void data_tr(); void send_data(); void send_cmd(); void clr_lcd(); void lcd_int(); action();

void l_delay() { int i,j; for(i=0; i<=20;i++) { for(j=0;j<=500;j++); } } void s_delay() { int v,b; for(v=0;v<=40;v++) for(b=0;b<=50;b++); }

//to call largedelay//

// to call short delay

nib_tr( unsigned char data1) //function to transfer higher nibble to lower nible// { unsigned char data2 ,temp1; temp1=data1; data1=data1<<4; data2=temp1>>4;

data1=data1|data2; return(data1); }

void data_tr(unsigned char data1) { d1= data1&0x01; data1=data1>>1; d2=data1&0x01; data1=data1>>1; d3=data1&0x01; data1=data1>>1; d4=data1&0x01; }

// function to transfer data to data pins//

void send_cmd(unsigned char data1) { unsigned char data2; rs=0; s_delay(); en=1; s_delay(); data2 =nib_tr(data1); data_tr(data2); en=0; s_delay(); en=1; s_delay(); data_tr(data1); en=0; }

// function to send commands to Lcd//

void send_data(unsigned char data1) { unsigned char data2; rs=1; s_delay(); en=1; s_delay(); data2 =nib_tr(data1); data_tr(data2); en=0;

//Function to send data to LCD//

s_delay(); en=1; s_delay(); data_tr(data1); en=0; } void display_slogan(unsigned char *p) //Function to display String on LCd// { unsigned char data1; while(*p) { data1=*p; send_data(data1); p++; } } void clr_lcd() { send_cmd(0x01); s_delay(); send_cmd(0x02); } //to clear the lcd//

void lcd_int() // Function to initialize the LCD// { send_cmd(0x28); s_delay(); send_cmd(0x28); s_delay(); send_cmd(0x28); s_delay(); send_cmd(0x06); s_delay(); send_cmd(0x0E); s_delay(); } void character() //Function to store values of characters and displaying that char. on LCD { send_cmd(64); // Base address where values of first custom character is to stored send_data(31); send_data(4); send_data(14); send_data(21); send_data(13); send_data(4); send_data(4); send_data(0);

send_cmd(0x80); send_data(0); send_cmd(72); send_data(31); send_data(9); send_data(11); send_data(21); send_data(19); send_data(9); send_data(9); send_data(0); send_cmd(0x82); send_data(1); send_cmd(80); send_data(31); send_data(9); send_data(9); send_data(9); send_data(9); send_data(25); send_data(25); send_data(0); send_cmd(0x84); send_data(2); send_cmd(88); send_data(31); send_data(9); send_data(17); send_data(13); send_data(17); send_data(17); send_data(15); send_data(1); send_cmd(0x86); send_data(3); send_cmd(96); send_data(0); send_data(10); send_data(21); send_data(17); send_data(10); send_data(4); send_data(0); send_data(0); send_cmd(0xC0);

// Address of the location where the Character is to be displayed// // Displaying the Character created at address 0x64// // Base address where values of second custom character is to stored

// Base address where values of third custom character is to stored

// Base address where values of fourth custom character is to stored

send_data(4); send_cmd(104); send_data(0); send_data(0); send_data(10); send_data(0); send_data(4); send_data(17); send_data(14); send_data(0); send_cmd(0xc2); send_data(5); send_cmd(112); send_data(0); send_data(10); send_data(0); send_data(4); send_data(0); send_data(14); send_data(17); send_data(0); send_cmd(0xc4); send_data(6); send_cmd(120); send_data(1); send_data(3); send_data(5); send_data(9); send_data(9); send_data(11); send_data(27); send_data(24); send_cmd(0xc6); send_data(7); } // Base address where values of eighth custom character is to stored

key_press() { row1=0; row2=1; row3=1; row4=1;

// Function to display the Characters by pressing keys //to check for row1 make it grounded//

if(col1==0) pressed// {

//if col1=0 means key no.1 is pressed(i.e. in 1st row ,key in 1st column is

l_delay(); //l_delay(); send_data(0); //to send the value stored at AScii code 0// send_data(' '); l_delay(); count+=2; return; }

if(col2==0) is pressed// {

//if col2=0 means key no.2 is pressed(i.e. in 1st row ,key in 2nd column

l_delay(); send_data(1); send_data(' '); l_delay(); count+=2; return; } if(col3==0) { l_delay(); send_data(2); send_data(' '); l_delay(); count+=2; return; }

if(col4==0) { l_delay(); send_data(3); send_data(' '); l_delay(); count+=2; return; }

row1=1; row2=0; row3=1;

row4=1; if(col1==0) { l_delay(); send_data(4); send_data(' '); l_delay(); count+=2; return; }

if(col2==0) { l_delay(); send_data(5); send_data(' '); l_delay(); count+=2; return; } if(col3==0) { l_delay(); send_data(6); send_data(' '); l_delay(); count+=2; return; }

if(col4==0) { l_delay(); send_data(7); send_data(' '); l_delay(); count+=2; return; }

row1=1; row2=1; row3=0; row4=1;

if(col1==0) { l_delay(); send_data('A'); send_data(' '); l_delay(); count+=2; return; }

if(col2==0) { l_delay(); send_data('B'); send_data(' '); l_delay(); count+=2; return; } if(col3==0) { l_delay(); send_data('C'); send_data(' '); l_delay(); count+=2; return; }

if(col4==0) { l_delay(); send_data('D'); send_data(' '); l_delay(); count+=2; return; }

row1=1; row2=1; row3=1; row4=0;

if(col1==0) { l_delay(); send_data('0'); send_data(' '); l_delay(); count+=2; return; }

if(col2==0) { l_delay(); send_data('1'); send_data(' '); l_delay(); count+=2; return; } if(col3==0) { l_delay(); send_data('2'); send_data(' '); l_delay(); count+=2; return; }

if(col4==0) { l_delay(); clr_lcd(); l_delay(); clr_lcd(); count=0; action(); return; } }

display_characters1() // to diisplay the characters one by one { send_cmd(0x80); while(count<=16) { key_press(); } } display_characters2() // to diisplay the characters one by one { send_cmd(0xC0); while(count<=16) { key_press(); } } display() { display_characters1(); count=0; display_characters2(); }

action() { while(1) { display();

} } main() { int a=0; int d=0; clr_lcd(); s_delay(); lcd_int(); s_delay(); clr_lcd();

//to clear the LCd

s_delay(); s_delay(); clr_lcd(); character(); for(d=0;d<=10;d++) l_delay(); clr_lcd(); display_slogan(slogan1); for(a=0;a<=10;a++) { l_delay(); } clr_lcd(); s_delay(); action(); return 0; }

// to display the slogan enter the key//

You might also like