Toll-Free Customer Support 24/7

Force Sensor ATMEL Code


/*
* Project name:
Force 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;
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();

CMD_WRT(0X01);
CMD_WRT(0X80);
LCD_WRT("FORCE=");
CMD_WRT(0X87);
CONVERT_DISPLAY(ADC0);
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