You are on page 1of 4

9.

2 SOURCE CODE
#include<at89x52.h>
#define LCDDATA P2
#define ADCDATA P1
#define MINIMUM 5
sbit
sbit
sbit
sbit

BUSY
RS =
RW =
EN =

= P2^7;
P2^0;
P2^1;
P2^2;

sbit OE = P1^3; //RD pin


sbit SC = P1^4; // WR is active LOW pin
sbit EOC = P1^5; //INTR is active LOW pin
sbit RELAY1 = P1^0;
sbit RELAY2 = P1^1;
sbit RELAY3 = P1^2;
unsigned char Buff[3] = 0;
void ISR_T0() interrupt 1
{
TH0 = 0x4B;
TL0 = 0xFF;
TF0 = 0;
}
void Delay(unsigned int time)
{
unsigned int i = 0;
for(i=0;i<time;i++);
}
unsigned char Read_ADC()
{
unsigned char temp = 0;
SC = 1;
// Make WR pin low
Delay(150);
// wait for a while
SC = 0;
// Make WR pin High
while(EOC == 1); // wait till INTR pin goes low
while(EOC == 0); // wait till INTR pin goes High
Delay(150);
OE = 0;
// Make RD pin LOW
temp = ADCDATA;
OE = 1;
// MAKE RD Pin HIGH
return temp;
}
/*Function to check status of LCD*/
void BusyCheck()

{
BUSY = 1;
RS = 0;
RW = 1;
while(BUSY)
{
EN = 0;
EN = 1;
}

// RS =0 FOR COMMAND
// RW = 1 FOR READING
// ENABL EIS LOW
// ENABLE IS HIGH

}
/*Function to Send Command to LCD*/
void LCDCMD(unsigned char CMD)
{
BusyCheck();
LCDDATA = CMD;
RS = 0;
// RS =0 FOR COMMAND
RW = 0;
// RW = 0 FOR WRITING
EN = 1;
// ENABLE IS HIGH
EN = 0;
// ENABL EIS LOW
}
/*Function to Send Data to LCD*/
void LCDData(unsigned char Data)
{
BusyCheck();
LCDDATA = Data;
RS = 1;
// RS =1 FOR DATA
RW = 0;
// RW = 0 FOR WRITING
EN = 1;
// ENABLE IS HIGH
EN = 0;
// ENABL EIS LOW
}
void LCDString(unsigned char *str)
{
while(*str)
{
LCDData(*str);
str++;
}
}
void Init_T0()
{
TMOD = 0x01;
TH0 = 0x4B;
TL0 = 0xFF;
ET0 = 1;
EA = 1;
TR0 = 1;
}

// SET THE
//
//
//
//
//

TIMER0 IN MODE 1 MODE


LOAD THE TH0 VALUE
LOAD THE TL0 VALUE
ENABLE THE TIMER0 INTERRUPT
ENABLE ALL INTERRUPT
START THE TIMER

/*Function to Initalize LCD*/


void Init_LCD()
{
/*Command to Select 2 line , 5x7 matrix mode of LCD */

LCDCMD(0x38);
/*Command to shift the cursor to next position when Data is send in LCD
*/
LCDCMD(0x06);
/*Command to ON Display, OFF the Cursor in LCD */
LCDCMD(0x0C);
/*Return cursor home */
LCDCMD(0x02);
}
void Display(unsigned char Data)
{
switch(Data)
{
case 170:
LCDString("1KM");
break;
case 204:
LCDString("2KM");
break;
case 219:
LCDString("3KM");
break;
case 227:
LCDString("4KM");
break;
case 255:
LCDString("NF ");
break;
default:
break;
}
}
void main()
{
P0 = 0x0F;
Buff[0] = 0xFF;
Init_T0();
Init_LCD();
while(1)
{
P0 = 0x01;
LCDCMD(0x80);
LCDString("R: ");
Display(Read_ADC());
LCDCMD(0x87);
LCDString("B: ");
Display(Read_ADC());
P0 = 0x02;
LCDCMD(0xC0);
LCDString("Y: ");
Display(Read_ADC());

P0 = 0x04;
LCDCMD(0xC7);
LCDString("N: ");
Display(Read_ADC());
}
}

You might also like