LCD Interface
LCD Interface
// LCD Driving //
#include <REGX51.H>
/*=======================================================================*/
void delay_lcd(unsigned int i)
{
en_lcd = 1; //start LCD command
while(i>0)i--;
}
/*=======================================================================*/
void busy_lcd()
{
D7_lcd=1;
rs_lcd=0; // set register select to Command
rw_lcd=1; // Set RW to Read mode
while(D7_lcd!=0) // Wait for LCD to get new command
{
en_lcd=0;
en_lcd=1;
}
}
/*=======================================================================*/
/**** Writing command to LCD ****
/*=======================================================================*/
void wrcom_lcd(unsigned char val_lcd)
{
busy_lcd();
LCD_PINS=val_lcd; // Send
rs_lcd=0; // set register select to Command
rw_lcd=0; // Set RW to Write mode
en_lcd=1; // Enable for Data Input
delay_lcd(1); // Give some Delay
en_lcd=0; // Reset Enable
}
/*=======================================================================*/
/**** Writing data on LCD ****
/*=======================================================================*/
void wrdta_lcd(unsigned char val_lcd)
{
busy_lcd();
LCD_PINS=val_lcd;
rs_lcd=1; // set register select to Data Mode
rw_lcd=0; // Set RW to Write mode
en_lcd=1; // Enable for Data Input
delay_lcd(1); // Give some Delay
en_lcd=0; // Reset Enable
}
/*=======================================================================*/
void clear_lcd()
{
wrcom_lcd(clr_lcd);
}
/*=======================================================================*/
void init_lcd()
{
wrcom_lcd(mode_lcd); //0X38);
wrcom_lcd(disp_on);
wrcom_lcd(cur_hide);
wrcom_lcd(0X01);
wrcom_lcd(0X06);
clear_lcd();
}
/*=======================================================================*/
void lcd_gotoXY(unsigned char X,unsigned char Y)
{
if(Y!=0 && Y<5) // Recheck for Maximum 4 lines
wrcom_lcd(128+X+vertical[Y-1]); // Set command for specific location
else // othervise
wrcom_lcd(128+X+Y); // Set location to initial of LCD
}
/*-------------------------------------------------------------------------*/
void print_lcd(unsigned char *Go) //Display 'x' Terminated String
{
do
{
switch (*Go)
{
case '\f' : wrcom_lcd(clr_lcd); break;
case '\n' : wrcom_lcd(192); break;
default : wrdta_lcd(*Go); break;
}
Go++;
delay_lcd(30);
}
while(*Go!= endchar);
}
/*=======================================================================*/
void print_lcdnum(unsigned char val_lcd)
{
if(val_lcd < 10) // if Number is not in ASCII format
wrdta_lcd(val_lcd + 48); // Make Ascii Number
else // otherwise
wrdta_lcd(val_lcd); // Print as sent nimber
}
/*=======================================================================*/
void main(void)
{
unsigned char a = 15;
init_lcd();
while(1)
{
lcd_gotoXY(0,0);
print_lcd(" Electronics \n");
print_lcd(" 14-60xx Najeeb\n");
lcd_gotoXY(10,3);
print_lcdnum(a/10);
print_lcdnum(a%10);
while(1);
}
}
/*===========================END===========================================
Build target 'LCD'
assembling STARTUP.A51...
compiling LCD Display.c...
linking...