Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Interfacing LM35 with 8051

Status
Not open for further replies.

niteshtripathi

Member level 3
Joined
Oct 11, 2013
Messages
59
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
429
I want to glow a LED when temp ig greater than 35'C. where should i add this logic.Pls hehp. My program is as :

Code:
#include<reg51.h>
#define port P3
#define adc_input P1
#define dataport P2
#define sec 100
sbit rs = port^0;
sbit rw = port^1;
sbit e = port^2;

sbit wr= port^3;
sbit rd= port^4;
sbit intr= port^5;

sbit buzzer= port^6;

int test_intermediate3=0, test_final=0,test_intermediate1[10],test_intermediate2[3]={0,0,0};

void delay(unsigned int msec )
{
    int i ,j ;
    for(i=0;i<msec;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;
    return;
}

void lcd_data_string(unsigned char *str)  
{
    int i=0;
    while(str[i]!='\0')
    {
        lcd_data(str[i]);
        i++;
        delay(10);
    }
    return;
}

void shape()       
{
    lcd_cmd(64);
    lcd_data(2);
    lcd_data(5);
    lcd_data(2);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
}
       
void convert()     
{
    int    s;
    lcd_cmd(0x81);      
    delay(2);
    lcd_data_string("TEMP:");
    test_final=(((9*test_intermediate3)/5)+32);
    s=test_final/100;
    test_final=test_final%100;
    lcd_cmd(0x88);
    if(s!=0)
    lcd_data(s+48);
    else
    lcd_cmd(0x06);
    s=test_final/10;
    test_final=test_final%10;
    lcd_data(s+48);
    lcd_data(test_final+48);
    lcd_data(0);
    lcd_data('F');
    lcd_data(' ');

    test_final=test_intermediate3;
    lcd_cmd(0xc1);        //Setting  cursor to first position of first line
    delay(2);
    lcd_data_string("TEMP:");
    s=test_final/100;
    test_final=test_final%100;
    lcd_cmd(0xc8);
    if(s!=0)
    lcd_data(s+48);
    else
    lcd_cmd(0x06);
    s=test_final/10;
    test_final=test_final%10;
    lcd_data(s+48);
    lcd_data(test_final+48);
    lcd_data(0);
    lcd_data('c');
    lcd_data(' ');
    delay(2);
	if(test_final>35)
	{
		buzzer=1;
	}
}

void main()
{
    int i,j;
	buzzer=0;
    adc_input=0xff;
    lcd_cmd(0x38);        
    lcd_cmd(0x0c);        
    delay(2);
    lcd_cmd(0x01);       
    delay(2);

    while(1)
    {
        for(j=0;j<3;j++)
        {
            for(i=0;i<10;i++)
            {
                delay(1);
                rd=1;
                wr=0;
                delay(1);
                wr=1;
                while(intr==1);
                rd=0;
                lcd_cmd(0x88);
                test_intermediate1[i]=adc_input/10;
                delay(1);
                intr=1;
            }
            for(i=0;i<10;i++)
            test_intermediate2[j]=test_intermediate1[i]+test_intermediate2[j];
        }

        test_intermediate2[0]=test_intermediate2[0]/3;
        test_intermediate2[1]=test_intermediate2[1]/3;
        test_intermediate2[2]=test_intermediate2[2]/3;
        test_intermediate3=test_intermediate2[0]+test_intermediate2[1]+test_intermediate2[2];
        shape();
        convert();	 

    }
}
 
Last edited by a moderator:

ok when u debug this code what is the value of test_intermediate3 and test_final given and also where is the led put in your code?
and also if in your code
Code:
if(test_final>35)
{
buzzer=1;
}
this is working or not?
 

ok when u debug this code what is the value of test_intermediate3 and test_final given and also where is the led put in your code?
and also if in your code
Code:
if(test_final>35)
{
buzzer=1;
}
this is working or not?

if(test_final>35)
{
buzzer=1;
}

i have used this one in my program but its not working
 

ok when u debug this code what is the value of test_intermediate3 and test_final given and also where is the led put in your code?
and also if in your code
Code:
if(test_final>35)
{
buzzer=1;
}
this is working or not?


If the above code is working, just define a pin for LED and in the main code just under that place you have buzzer ON like this:
buzzer=1;
LED=1;
}
 

i have included the LED option in your code .
But you need to check your conversion once again because it shows a large difference with actual temperature.
 

Attachments

  • code1.zip
    28 KB · Views: 48

but it is not simple interfacing bro because lm 35 is a 10mv/c type configuration . if 0 to 100 degree c then port has a 10 bit adc to convert this value on voltage at Vref . so in your code test_final > 35 is not actually 35 degree c. so find first perfact 1 degree c to voltage ? and what is the value of test_final ?
 

i think he is using ADC chip in free running mode.i have already corrected the code to turn on led above a temperature 35D.cel.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top