circuit diagram:
software design:
PART1
PART 2
PART3
PART4
PART5
PART6
/* Main.c file generated by New Project wizard * * Created: Thu Feb 9 2023 * Processor: AT89C51RD2 * Compiler: Keil for 8051 */ #include<reg51.h> #define display_port P2 //Data pins connected to port 2 on microcontroller sbit rs = P3^2; //RS pin connected to pin 2 of port 3 sbit rw = P3^3; // RW pin connected to pin 3 of port 3 sbit e = P3^4; //E pin connected to pin 4 of port 3 sbit C4 = P1^0; // Connecting keypad to Port 1 sbit C3 = P1^1; sbit C2 = P1^2; sbit C1 = P1^3; sbit R4 = P1^4; sbit R3 = P1^5; sbit R2 = P1^6; sbit R1 = P1^7; void msdelay(unsigned int time) // Function for creating delay in milliseconds. { unsigned i,j ; for(i=0;i<time;i++) for(j=0;j<1275;j++); } void lcd_cmd(unsigned char command) //Function to send command instruction to LCD { display_port = command; rs= 0; rw=0; e=1; msdelay(1); e=0; } void lcd_data(unsigned char disp_data) //Function to send display data to LCD { display_port = disp_data; rs= 1; rw=0; e=1; msdelay(1); e=0; } void lcd_init() //Function to prepare the LCD and get it ready { lcd_cmd(0x38); // for using 2 lines and 5X7 matrix of LCD msdelay(10); lcd_cmd(0x0F); // turn display ON, cursor blinking msdelay(10); lcd_cmd(0x01); //clear screen msdelay(10); lcd_cmd(0x81); // bring cursor to position 1 of line 1 msdelay(10); } void row_finder1() //Function for finding the row for column 1 { R1=R2=R3=R4=1; C1=C2=C3=C4=0; if(R1==0) lcd_data('7'); if(R2==0) lcd_data('4'); if(R3==0) lcd_data('1'); if(R4==0) lcd_data('*'); } void row_finder2() //Function for finding the row for column 2 { R1=R2=R3=R4=1; C1=C2=C3=C4=0; if(R1==0) lcd_data('8'); if(R2==0) lcd_data('5'); if(R3==0) lcd_data('2'); if(R4==0) lcd_data('0'); } void row_finder3() //Function for finding the row for column 3 { R1=R2=R3=R4=1; C1=C2=C3=C4=0; if(R1==0) lcd_data('9'); if(R2==0) lcd_data('6'); if(R3==0) lcd_data('3'); if(R4==0) lcd_data('#'); } void row_finder4() //Function for finding the row for column 4 { R1=R2=R3=R4=1; C1=C2=C3=C4=0; if(R1==0) lcd_data('A'); if(R2==0) lcd_data('B'); if(R3==0) lcd_data('C'); if(R4==0) lcd_data('D'); } void main() { lcd_init(); while(1) { msdelay(30); C1=C2=C3=C4=1; R1=R2=R3=R4=0; if(C1==0) row_finder1(); else if(C2==0) row_finder2(); else if(C3==0) row_finder3(); else if(C4==0) row_finder4(); } }