Pressure sensor MPX4115 interfacing with 8051

MPX4115 a motorola pressure sensor is powered by 5V and delivers output voltage ranging from 0.25V to 4.75V corresponding to pressure 15Kpa to to 115Kpa resprctively.sensor detects pressure produces corresponding voltage which later converted into 8-bit binary number by ADC0804  and passes an accordingly scaled voltage to microcontroller which converts it into digital data to be displayed on Lcd screen

Proteus Design

Code

#include<reg51.h>
#define dataport P2
#define adc_input P1
sbit rs = P3^0;
sbit rw = P3^1;
sbit e = P3^2;
sbit rd= P3^4;
sbit wr= P3^5;
sbit intr= P3^6;
void delay(unsigned int);
void lcd_cmd(unsigned char);
void lcd_data(unsigned char);
void lcd_data_string(unsigned char*);
void lcd_init();
void adc_conv();
void adc_read();
void lcd_data_adc(unsigned int);
int num[10];
float v_out,pressure;
void main()
{
dataport=0x00;
adc_input=0xff;
P3=0x00;
lcd_init();
lcd_cmd(0x84);
lcd_data_string("PRESSURE");
while(1)
{
lcd_cmd(0xc5);
adc_conv();
adc_read();
lcd_data_string(" KPA");
delay(50);
 }
}
void lcd_init()
{
lcd_cmd(0x01);
delay(1);
lcd_cmd(0x06);
delay(1);
lcd_cmd(0x0e);
delay(1);
lcd_cmd(0x38);
delay(1);
lcd_cmd(0x80);
delay(1);
}
void delay(unsigned int sec )
{
int i ,j ;
for(i=0;i<sec;i++)
  for(j=0; j<1275; j++);
}
void lcd_cmd(unsigned char item)
{
dataport=item;
rs= 0;
rw=0;
e=1;
delay(1);
e=0;
return;
}
void lcd_data(unsigned char item) 
{
dataport = item;
rs= 1;
rw=0;
e=1;
delay(1);
e=0;
}
void adc_conv()
{                      
wr = 0;
delay(2);                     
wr = 1;                     
while(intr);
delay(2);
intr=1; 
}
void adc_read()
{
unsigned int value;                  
rd = 0;
delay(2);
value=adc_input;
v_out=(5.0/256)*value;      //divide by 256 as it's a 8 bit converter
pressure=((v_out/5.0)+0.09)/0.009-1; // convert output voltage(volt) to    KPA
delay(1);
rd=1; 
lcd_data_adc(pressure);                                          
}
void lcd_data_adc(unsigned int i)
{
int p;
int k=0;
while(i>0)
{
  num[k]=i%10;
  i=i/10;
  k++;
}
k--;
for (p=k;p>=0;p--)
{
dataport=num[p]+48;
rw = 0;
rs = 1;
e = 1;
delay(1);
e = 0;
}
}
void lcd_data_string(char *x)
{
while(*x!='\0')
    {
        lcd_data(*x);
        delay(2);
        x++;
    }
}

Video

Category: 

Share

Comments

sir, can i have code in assemly language?

Hi Arjun, 

Sorry but we don't have code in assembly language. But you can do it by yourself following the set of instructions. I hope it helps. http://www.mechaterrain.com/get-assembly-code-c-using-keil

What is the value of resistor on ADC ?Value is not shown !!!
sir, can i have code in assemly language?

Who's new

  • ravirajpatil871...
  • shubhambajoria
  • yassir
  • demiholyman890954
  • scottgillum51169040

Get Notified

 

Share

We are Social

Syndicate

Subscribe to Syndicate