faguoduifangui

    1. ljj3166 发表于 2015-10-31 22:11 上位机有通信格式的,单片机符合这个格式吗
      大神,楼主在下楼给出了全部程序,帮忙看看可以吗
    2. michael_llh 发表于 2015-10-31 22:07 这个也不好说的程序有问题没有,再说你只有部分代码,6050的代码官方给的就是用430写的,你可以去看看
      这是IIC的 #ifndef __IIC_H #define __IIC_H #include "Delay.h" #define uint unsigned int #define uchar unsigned char //****端口定义--IIC时钟引脚定义P5^0;IIC数据引脚定义P5^1;************************** #define SCL1 P5OUT |=BIT0   #define SCL0 P5OUT &=~BIT0   #define SCLOUT P5DIR |= BIT0; #define SDA1 P5OUT |=BIT1   //IIC数据引脚 #define SDA0 P5OUT &=~BIT1   #define SDAIN P5DIR &=~BIT1 #define SDAOUT P5DIR |=BIT1   #define SDADATA P5IN & BIT1   //IIC数据SDA引脚定义P5^1,与运算,【取第1位】观察值; #define SlaveAddress 0xD0     //IIC写入时的地址字节数据?+1为读取 /*********I2C开始信号*****************************/ void I2C_Start() {     SDAOUT;     SDA1;                    //拉高数据线     //SCLOUT;     SCL1;                    //拉高时钟线     delayus(5);                 //延时     SDA0;                    //产生下降沿     delayus(5);                  //延时     SCL0;                    //拉低时钟线 } /*********I2C停止信号*****************************/ void I2C_Stop() {     SDAOUT;     SCL0;                    //拉低时钟线     SDA0;                    //拉低数据线     //SCLOUT;      delayus(5);                   //延时     SCL1;                    //拉高时钟线     //delayus(5);                   //延时     SDA1;                    //产生上升沿     delayus(5);                  //延时 }   void I2C_INIT()//? {   SCLOUT;   SDAIN;   SCL0;   I2C_Stop(); } //I2C发送应答信号 //入口参数:ack (0:ACK 1:NAK) ----I2C_SendACK(1);此时即为'非应答’信号 void I2C_SendACK(uchar ack) {     SDAOUT;     //SCLOUT;                   //---写应答信号     if(ack)          SDA1; //--判断,ack=1即为NAK,SDA为高     else       SDA0; //--判断,ack=0即为ACK,SDA为低 //    SDA = ack;                  //写应答信号     SCL1;                    //拉高时钟线     delayus(5);                  //延时     SCL0;                    //拉低时钟线     delayus(5);                  //延时 } //************************************** //I2C接收应答信号 //************************************** uchar I2C_RecvACK() {     uchar cy;     SCLOUT;     SCL1;                    //拉高时钟线     SDAIN; //--接收     delayus(5);              //延时         if(SDADATA)         //--读应答信号=1即SDA为高,置1         {           cy=1;         }     else         {           cy=0;         }     //    cy = SDA;                   //读应答信号     SCL0;                    //拉低时钟线     delayus(5);                //延时     SDAOUT;       return cy; } //************************************** //向I2C总线发送一个字节数据 //************************************** void I2C_SendByte(uchar dat) {     uchar i;     SDAOUT;                     //---发送     for (i=0; i
    3. michael_llh 发表于 2015-10-31 16:45 波形重要吗?数据对了就ok吧,不要去纠结这个
      #include #include "math.h" /*功能模块头文件*/ #include "1602.h" #include "mpu6050.h" #include "Delay.h" #define uint unsigned int #define uchar unsigned char #define pi 3.141592653 int ax,ay,az;             //---GetData()函数返回为int int gx,gy,gz;             //存储原始数据 float aax,aay,aaz,ggx,ggy,ggz;//存储量化后的数据 float Ax,Ay,Az;               //单位 g(9.8m/s^2) float Gx,Gy,Gz;               //单位 °/s float Angle_accX,Angle_accY,Angle_accZ;//存储加速度计算出的角度 //char str[20]; void main() {      WDTCTL = WDTPW + WDTHOLD;     delay(300);     //-上电延时   BCSCTL1 &=~XT2OFF;     do       {          IFG1 &=~OFIFG;          for(uint i=0xff;i>0;i--);        }      while((IFG1&OFIFG));                                   //等待时钟稳定      BCSCTL2 |=SELM_2+SELS;                              //主、从系统时钟均为高频   //CtrlDir |= 0x07;                 //控制线端口设为输出状态     //DataDir  = 0xFF;                 //数据端口设为输出状态       //DataPort  = 0x00;     P6DIR=0XFF;   P6OUT=0Xff;   //点亮液晶   LcdReset();                    //液晶初始化   //Delay1000ms();//----到底延时多久最好???    delay(500);   InitMPU6050();   delay(200);   while(1)       {                    Display10BitData(Angle_accX,2,0); //显示X轴加速度        delayms(250);*/        //Display10BitData('An',2,1); //显示Y轴加速度       Display10BitData(GetData(ACCEL_XOUT_H),2,0); //显示X轴加速度       Display10BitData(GetData(ACCEL_YOUT_H),7,0); //显示Y轴加速度       Display10BitData(GetData(ACCEL_ZOUT_H),12,0); //显示Z轴加速度              Display10BitData(GetData(GYRO_XOUT_H),2,1);         //显示X轴角速度       Display10BitData(GetData(GYRO_YOUT_H),7,1);         //显示Y轴角速度       Display10BitData(GetData(GYRO_ZOUT_H),12,1);       //显示Z轴角速度       delayms(250);     } } 主程序有错误吗???怎么lcd得到的数据也不对
    4. 楼主你的IIC从机地址写的是0x68,怎么可能???从机地址是0xD0才对啊,你的IIC通信成功了???不可能啊
    5. 楼主东西看起来很给力啊,下载看看

最近访客

< 1/1 >

统计信息

已有3人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:5

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言