微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 三轴角度检测(倾角传感器MMA7455(加速度传感器))

三轴角度检测(倾角传感器MMA7455(加速度传感器))

时间:11-29 来源:互联网 点击:
#include
#include  //要用到_nop_();函数#define uchar unsigned char#define uint  unsigned int/***************************************************************************//***********               单片机引脚定义                       ************//***************************************************************************/sbit sda=P1^0;              //I2C 数据传送位sbit scl=P1^1;              //I2C 时钟传送位char x,y,z,num[9]={0,0,0};/******************************************************************************//**********                     数据部分                            ***********//******************************************************************************/#define IIC_READ  0x1D      //定义读指令#define IIC_WRITE 0x1D      //定义写指令#define LCD_data  P0             //数据口sbit inter_0=P3^2;sbit LCD_RS  =  P2^7;            //寄存器选择输入 sbit LCD_RW  =  P2^6;            //液晶读/写控制sbit LCD_EN  =  P2^5;            //液晶使能控制sbit LCD_PSB =  P2^4;            //串/并方式控制void delay_1ms(uint x) { uint i,j; for(j=0;j0;t--)for(j=19;j>0;j--);}void delay_50ms(uchar t){uint j;for(;t>0;t--)for(j=6245;j>0;j--);}/*********************************************************************//**************               I2C通信部分              ***************//*********************************************************************/void iic_start()               //函数功能:I2C通信开始{sda=1;iic_delay();scl=1;iic_delay();sda=0;iic_delay();}void iic_stop()                //函数功能:I2C通信停止{sda=0;iic_delay();scl=1;iic_delay();sda=1;iic_delay();}void iic_ack()                 //函数功能:I2C通信查应答位{ sda=1;scl=1;iic_delay();ack_sign=sda;scl=0;    }void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节{uchar i,temp,temp1;temp1=wdata;for(i=0;i<8;i++){scl = 0;iic_delay();temp=temp1;temp=temp&0x80;if(temp==0x80)sda=1;    elsesda=0;iic_delay();scl=1;iic_delay();scl=0;iic_delay();temp1=temp1<1;}}char iic_read_byte(void)    //函数功能:从I2C从机中读出一个字节{uchar x;char data_data;for (x=0;x<8;x++){ data_data=data_data<1;sda=1;iic_delay();scl=0;iic_delay();scl=1;iic_delay();if(sda==1)data_data|=0x01; //else  //   data_data&=0xfe;}return data_data;}void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据{uchar t;t=(IIC_WRITE<1);iic_start();iic_write_byte(t);iic_ack();iic_write_byte(byte_add);iic_ack();iic_write_byte(wdata);iic_ack();iic_stop();}char iic_read(uchar byte_add)            //函数功能:按地址读出一字节数据{uchar t;char x;t=(IIC_WRITE<1);iic_start();iic_write_byte(t);iic_ack();iic_write_byte(byte_add);iic_ack();t=((IIC_READ<1)|0x01);iic_start();iic_write_byte(t);iic_ack();x=iic_read_byte();iic_ack();iic_stop();return x;}void main(){delay_1ms(10);                 //延时lcd_init();delay_1ms(5);iic_write(0x16,0x5);iic_write(0x10,0x32);//校正X值iic_write(0x12,0x62);//校正Y值delay_50ms(20);while(1){x=iic_read(0x06);y=iic_read(0x07);z=iic_read(0x08);num[0]=x/100;num[1]=x/10%10;num[2]=x%10;num[3]=y/100;num[4]=y/10%10;num[5]=y%10;num[6]=z/100;num[7]=z/10%10;num[8]=z%10;lcd_pos(0,0);write_dat(num[0]+48);delay_1ms(5);      write_dat(num[1]+48);delay_1ms(5);write_dat(num[2]+48);delay_1ms(5);lcd_pos(1,0);write_dat(num[3]+48);delay_1ms(5);      write_dat(num[4]+48);delay_1ms(5);write_dat(num[5]+48);delay_1ms(5);lcd_pos(2,0);write_dat(num[6]+48);delay_1ms(5);      write_dat(num[7]+48);delay_1ms(5);write_dat(num[8]+48);delay_1ms(5);}} 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top