Toll-Free Customer Support 24/7

3 axis atmel code


/*
 * Project name:
    3 axis accelerometer sensor  
 * Copyright
     (c) Researchdesignlab.com
 * Description:
    
 * Test configuration:
     MCU:             AT89S52
     Dev.Board:       8051
     Oscillator:      11.0592 MHz
     Software:        Keil uVision3

*/


#include<reg51.h>
#include<string.h>

sbit    SCL    = P1^7;                                    
sbit    SDA    = P1^6;    

                                

#define LCD_PORT P2                    // LCD D0-D7 PINS connected P2
sbit rs=P3^5;                        // LCD RS PIN connected P3.5
sbit en=P3^7;                        // LCD EN PIN connected P3.7
sbit D7=P2^7;
sbit rw=P3^6;     


void busy();
void CMD_WRT(unsigned char);
void LCD_WRT(unsigned char *);
void DATA_WRT(unsigned char);
void delay(unsigned int time);
 

void CONVERT_DISPLAY(unsigned int );
void i2c_delay(void);                                
void i2c_start(void);                            
void i2c_stop(void);                            
void i2c_wbyte(char i2c_wb);                        
unsigned char i2c_rbyte(void);                    
 char i2c_ack(void);                                
void i2c_nack(void);
void i2c_read(unsigned char id,unsigned char add,unsigned char d[]);


 void DELAY();
    
 void main()
 {
  unsigned char ADC0,ADC1,ADC2;
  unsigned char d[4];

       unsigned char CMD[]={0x38,0x01,0x0f,0x06,0x80},TEMP,i;

    
   
      for(i=0;i<5;i++)
   {
    TEMP=CMD[i];
    CMD_WRT(TEMP);
   }
 
    

  for(i=0;i<10;i++)
   DELAY();
  while(1)
  {

                                                                                                                                           

       i2c_read(0x9E,0x41,&d[0]);            
       ADC0 = d[0];
       DELAY();
       i2c_read(0x9E,0x42,&d[1]);                
       ADC1 = d[1];
       DELAY();
       i2c_read(0x9E,0x43,&d[2]);            
       ADC2 = d[2];
       DELAY();
       
      CMD_WRT(0X01);
      CMD_WRT(0X80);
      LCD_WRT("X=");
      CMD_WRT(0X83);
      CONVERT_DISPLAY(ADC0);
         
      CMD_WRT(0X87);
      LCD_WRT("Y=");
      CMD_WRT(0X8D);
      CONVERT_DISPLAY(ADC1);

      CMD_WRT(0XC0);
      LCD_WRT("Z=");
      CMD_WRT(0XC3);
      CONVERT_DISPLAY(ADC2);

                DELAY();

  }

 }

void DELAY()
{
 unsigned int X=8000,Y=100;
  while(X--);
  while(Y--);

}

 

void CONVERT_DISPLAY(unsigned int d)
{

   unsigned char dig1,dig2,dig3,dig[3];
   unsigned char x;
   unsigned char temp;
   temp=d;
   temp=temp/10;
   dig1=d%10;
   dig2=temp%10;
   dig3=temp/10;
   
    
    dig[0]=dig3;
    dig[1]=dig2;
    dig[2]=dig1;

    
    for(x=0;x<3;x++)
    {
   temp=dig[x]|0x30;
   
         DATA_WRT(temp);        
    }                                        

 }



void i2c_delay(void)
{
    char a;
    for(a=0;a<20;a++);
}

//------------------------------------------ I2C START --------------------------------------------//

void i2c_start(void)
{
                                        
    SCL = 1;
    i2c_delay();
    SDA    = 1;
    i2c_delay();
    SDA    = 0;
    i2c_delay();
    SCL = 0;        
    i2c_delay();    
}

//------------------------------------------- I2C STOP --------------------------------------------//

void i2c_stop(void)
{
    SDA    = 0;
    i2c_delay();
    SCL    = 1;
    i2c_delay();
    SDA = 1;
    i2c_delay();//
    SCL = 0;    //        
}

//---------------------------------------- I2C WRITE BYTE -----------------------------------------//

void i2c_wbyte(unsigned char i2c_wb)
{
    char a;
                                    
    for(a=0;a<8;a++)                                // Send 8 bits
    {    
        SCL = 0;                                
        i2c_delay();                                
        if(i2c_wb & (0x80 >> a))
        {
            SDA = 1;                                
        }
        else
        {
            SDA = 0;                                
        }
        i2c_delay();                
        SCL    = 1;                                
        i2c_delay();
    }    
    
}

//----------------------------------------- I2C READ BYTE -----------------------------------------//

unsigned char i2c_rbyte(void)
{
    char a;
    unsigned char b;
    b=0;
                                                        
    for(a=0;a<8;a++)
    {
        SCL = 1;                                    
        i2c_delay();
        if(SDA)        
        {
            b |= (0x80 >> a);                        
        }
        i2c_delay();
        SCL    = 0;                                    
        i2c_delay();
    }
    return(b);
}

//-------------------------------------------- I2C ACK --------------------------------------------//

char i2c_ack(void)
{
    char a;
                                    
    i2c_delay();
    SCL    = 0;
    i2c_delay();
    SDA    = 1;
    i2c_delay();
    SCL = 1;
    i2c_delay();
                                
    i2c_delay();
    a = SDA;
    i2c_delay();
    SCL = 0;
    i2c_delay();
    return(a);
}

//------------------------------------------- I2C NACK --------------------------------------------//

void i2c_nack(void)
{
                                
    SDA    = 1;
    i2c_delay();
    SCL    = 1;
    i2c_delay();
    SCL = 0;
    i2c_delay();
}

//-------------------------------------------- I2C Read -------------------------------------------//

void i2c_read(unsigned char id,unsigned char add,unsigned char d[])
{
    
    i2c_start();
    i2c_wbyte(id);
    i2c_ack();
    i2c_wbyte(add);
    i2c_ack();
    i2c_start();
    i2c_wbyte(0x9f);
    i2c_ack();
    *d = i2c_rbyte();
    //i2c_ack();
    i2c_nack();
    i2c_stop();

}




void busy()
{
    D7=1;
    rs=0;
    rw=1;
    while(D7!=0)
    {
        en=0;
        en=1;
    }
}



void CMD_WRT(unsigned char val)
{
    busy();                                             ;

    LCD_PORT=val;
    rs=0;
    rw=0;
    en=1;
    en=0;
}

void LCD_WRT(unsigned char *string)
{
    while(*string)
        DATA_WRT(*string++);
}
void DATA_WRT(unsigned char ch)
{
    busy();
    LCD_PORT = ch;
    rs=1;
    rw=0;
    en=1;
    en=0;
}


Back to top