#include <reg51.h> //Define 8051 Registers
#include <stdio.h> //Define I/O Functions
//#define DATA P0 //Define DATA to Port2
//sbit RS = P0^0; //Register Select
//sbit RW = P0^1; //LCD Read/Write
//sbit lcd_e = P0^2; //LCD Enable
unsigned int data_out,command=0x80,temp;
sfr lcd_data_pin=0xA0; //P2 port
sbit rs=P1^0; //Register select
sbit rw=P1^1; //Read/Write
sbit en=P1^2; //Enable pin
code unsigned char msg[] = (" PS.PRIMER-8051 "); //Display
code unsigned char msg1[] = (" 2x16 LCD DEMO ");
//----------------------------------
// LCD Functions
//----------------------------------
void lcd_init(void);
void lcd_cmd(unsigned char);
void lcd_display(unsigned char);
void DelayMs(int);
//----------------------------------
// LCD command Function
//----------------------------------
void lcd_cmd(unsigned char cmnd)
{
DATA = 0xf0&cmnd; //Masking lower 4 Bits
RS = 0; RW = 0;
lcd_e = 1;
DelayMs(35);
lcd_e = 0;
DATA = cmnd*16; //Masking lower 4
RS = 0; RW = 0;
lcd_e = 1;
DelayMs(35);
lcd_e = 0;
}
//----------------------------------
// LCD Data Function
//----------------------------------
void lcd_display(unsigned char dat)
{
DATA = 0xf0&dat; //Masking lower 4
RS = 1; RW = 0;
lcd_e = 1;
DelayMs(35);
lcd_e = 0;
DATA = dat*16; //Masking lower 4
RS = 1; RW = 0;
lcd_e = 1;
DelayMs(35);
lcd_e = 0;
}
//----------------------------------
// LCD Delay Function
//----------------------------------
void DelayMs(int k)
{
unsigned int a;
for(a=0;a<=k;a++);
}
//----------------------------------
// LCD Initialization
//----------------------------------
void lcd_init(void)
{
unsigned char i;
lcd_cmd(0x28); //2x16 Character 5x7
DelayMs(15); //matrix LCD,4-bit format
lcd_cmd(0x0c);
DelayMs(15);
lcd_cmd(0x06); //Shift
DelayMs(15);
lcd_cmd(0x01);
DelayMs(15);
//-------------------------------------------
// First Line Message Display
//-------------------------------------------
lcd_cmd(0x80);
DelayMs(35);
i=0;
while(msg[i]!='\0')
{
lcd_display(msg[i]);
i++;
}
DelayMs(50);
//-------------------------------------------
// Second Line Message Display
//-------------------------------------------
lcd_cmd(0xc0); //Second
DelayMs(35);
i=0;
while(msg1[i]!='\0')
{
lcd_display(msg1[i]);
i++;
}
DelayMs(50);
}
//----------------------------------
// LCD Main Program
//----------------------------------
void main(void)
{
P0 = 0;
lcd_init(); //LCD Initialization
DelayMs(1);
DelayMs(1);
while(1); //Loop Forever
}