打印
[STM32F1]

请问大侠们,液晶屏上只显示0,不动,问题出在哪里

[复制链接]
681|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
倾城军师|  楼主 | 2015-4-14 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "znz.h"
#include "delay.h"
#include "oled.h"
#include "math.h"
u8 BUF[8];
double angle1,angle2;
int X,Y,Z;

void Init_znz(void)
{
        IIC_Init();
        Write_znz(0x00, 0x31);                //连续测量模式
}

void Write_znz(u8 add, u8 da)
{
    IIC_Start();                  //起始信号
    IIC_Send_Byte(SlaveAddress);   //发送设备地址+写信号
          IIC_Wait_Ack();                 //应答

    IIC_Send_Byte(add);    //内部寄存器地址,请参考中文pdf
          IIC_Wait_Ack();              //应答

    IIC_Send_Byte(da);       //内部寄存器数据,请参考中文pdf
          IIC_Wait_Ack();           //应答

    IIC_Stop();                   //发送停止信号
}

u8 Read_znz(u8 REG_Address)
{   
          u8 REG_data;
    IIC_Start();                          //起始信号
    IIC_Send_Byte(SlaveAddress);           //发送设备地址+写信号
          IIC_Wait_Ack();                           //应答

    IIC_Send_Byte(REG_Address);                   //发送存储单元地址,从0开始       
          IIC_Wait_Ack();                             //应答

    IIC_Start();                          //起始信号
    IIC_Send_Byte(SlaveAddress+1);         //发送设备地址+读信号
          IIC_Wait_Ack();                      //应答

    REG_data=IIC_Read_Byte(0);              //读出寄存器数据
          IIC_Stop();                           //停止信号
    return REG_data;
}

//******************************************************
//
//连续读出指南针内部角度数据,地址范围
//
//******************************************************
void Multiple_read_znz(u8*BUF)
{   u8 i;
    IIC_Start();                          //起始信号
    IIC_Send_Byte(SlaveAddress);           //发送设备地址+写信号
    IIC_Wait_Ack();                        //应答
    IIC_Send_Byte(0x00);                   //发送存储单元地址,从0x3开始       
        IIC_Wait_Ack();                          //应答
        IIC_Send_Byte(0x31);
        IIC_Wait_Ack();
        IIC_Stop();
        delay_ms(55);

        IIC_Start();                          //起始信号
        IIC_Send_Byte(SlaveAddress);           //发送设备地址+写信号
        IIC_Wait_Ack();                        //应答
        IIC_Send_Byte(0x00);                   //发送存储单元地址,从
        IIC_Wait_Ack();                          //应答
        IIC_Send_Byte(0x35);
        IIC_Wait_Ack();
        IIC_Stop();
        delay_ms(30);

    IIC_Start();                          //起始信号
        IIC_Send_Byte(SlaveAddress);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x00);
        IIC_Wait_Ack();
        IIC_Start();
    IIC_Send_Byte(SlaveAddress+1);         //发送设备地址+读信号
        IIC_Wait_Ack();                         //应答
         for (i=0; i<8; i++)                      //连续读取个地址数据,存储中BUF
    {
        
        if (i == 7)
        {
           BUF[i] = IIC_Read_Byte(0);          //最后一个数据需要回NOACK
        }
        else
        {
          BUF[i] = IIC_Read_Byte(1);          //返回ACK
       }
   }
    IIC_Stop();          //停止信号
         delay_ms(50);
}

void get_angle()
{
        Multiple_read_znz(BUF);
  X=BUF[1] << 8 |BUF[2] ; //Combine MSB and LSB of X Data output register
  
  Z=BUF[3] << 8 | BUF[4]; //Combine MSB and LSB of Z Data output register
  Y=BUF[7];
/*  if(X>32768)
        X = -(0xFFFF - X + 1);
  if(Z>32768)
        Z = -(0xFFFF - Z + 1);
  if(Y>32768)
        Y = -(0xFFFF - Y + 1);          */
//  angle1= (atan2((double)Y,(double)X) * (180 / 3.14159265) + 180); // angle in degrees
//        angle=angle*10;
//                  conversion(angle);              //????                  
delay_ms(10);
}

void display_angle()
{
         OLED_ShowNum(80,52,X,3,12);
//         OLED_ShowNum(30,20,angle2,4,12);
         OLED_Refresh_Gram();
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝