[应用相关] ADX345获取加速度在LCD显示

[复制链接]
619|11
 楼主| condition 发表于 2020-7-22 20:46 | 显示全部楼层 |阅读模式
ADX345使用IIC读取数据
IIC配置
 楼主| condition 发表于 2020-7-22 20:47 | 显示全部楼层
方法一:使用IO模拟IIC操作
彩屏显示使用之前修改好的ili9325的程序(lcd.c,lcd.h,gui.c,gui.h),在main.c中直接添加lcd_init()初始化函数,就可以使用lcd和gui中的绘图或者显示字符的函数了,不过需要注意要重定向printf输出到串口。

IIC使用IO模拟,创建IIC初始化和读写函数
 楼主| condition 发表于 2020-7-22 20:48 | 显示全部楼层
DX345的相关操作
ADX345初始化操作
查看器件 ID。ADXL345 的 ID 寄存器为 0x00

设置 ADXL345 存储数据的方式和通信方式。寄存器地址为:0x31。

设置数据的输出速率设置的是 BW_RATE 寄存器,地址为:0x2C。

设置测量模式和链接模式

设置不启用中断,设置 INT_ENABLE 寄存器,设置它不使用中断模式。

初始化偏移量,设置 OFSX 寄存器、OFSY 寄存器、OFSZ 寄存器。
 楼主| condition 发表于 2020-7-22 20:48 | 显示全部楼层
读寄存器操作
1) 发送起始信号

2) 发送 I2C 写器件地址

3) 等待应答

4) 发送 I2C 要读的寄存器地址

5) 等待应答

6) 发送起始信号

7) 发送 I2C 读器件地址

8) 等待应答

9) 接收返回数据

10) 发送结束信号
 楼主| condition 发表于 2020-7-22 20:49 | 显示全部楼层
写寄存器操作
1) 发送起始信号

2) 发送 I2C 写器件地址

3) 等待应答

4) 发送要写入的寄存器地址

5) 等待应答

6) 发送要写入的数据

7) 等待应答

8) 发送结束信号
 楼主| condition 发表于 2020-7-22 20:50 | 显示全部楼层
注意读到的为8位,需要改成16位

uint8_t readValue[6];

|

*xValue = (uint16_t)(readValue[1] << 8) + readValue[0];

*yValue = (uint16_t)(readValue[3] << 8) + readValue[2];

*zValue = (uint16_t)(readValue[5] << 8) + readValue[4];
 楼主| condition 发表于 2020-7-22 20:50 | 显示全部楼层
STM32CubeMX配置

567595f18361e4ddd2.png
 楼主| condition 发表于 2020-7-22 20:51 | 显示全部楼层
需要添加得到文件

lcd
  1. void LCD_Init(void);

  2. void LCD_DisplayOn(void);

  3. void LCD_DisplayOff(void);

  4. void LCD_Clear(uint16_t Color);

  5. void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);

  6. void LCD_DrawPoint(uint16_t x,uint16_t y);//画点

  7. uint16_t  LCD_ReadPoint(uint16_t x,uint16_t y); //读点

  8. void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);

  9. void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);

  10. void LCD_SetWindows(uint16_t xStar, uint16_t yStar,uint16_t xEnd,uint16_t yEnd);

  11. void LCD_DrawPoint_16Bit(uint16_t color);

  12. uint16_t LCD_RD_DATA(void);//读取LCD数据

  13. void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue);

  14. void LCD_WR_DATA(uint16_t data);

  15. uint16_t LCD_ReadReg(uint8_t LCD_Reg);

  16. void LCD_WriteRAM_Prepare(void);

  17. void LCD_WriteRAM(uint16_t RGB_Code);

  18. uint16_t LCD_ReadRAM(void);

  19. uint16_t LCD_BGR2RGB(uint16_t c);

  20. void LCD_SetParam(void);
 楼主| condition 发表于 2020-7-22 20:52 | 显示全部楼层
gui

  1. void GUI_DrawPoint(uint16_t x,uint16_t y,uint16_t color);

  2. void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color);

  3. void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);

  4. void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);

  5. void Draw_Circle(uint16_t x0,uint16_t y0,uint16_t fc,uint8_t r);

  6. void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t fc, uint16_t bc, uint8_t num,uint8_t size,uint8_t mode);

  7. void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size);

  8. void LCD_Show2Num(uint16_t x,uint16_t y,uint16_t num,uint8_t len,uint8_t size,uint8_t mode);

  9. void LCD_ShowString(uint16_t x,uint16_t y,uint8_t size,uint8_t *p,uint8_t mode);

  10. void GUI_DrawFont16(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode);

  11. void GUI_DrawFont24(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode);

  12. void GUI_DrawFont32(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode);

  13. void Show_Str(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode);
 楼主| condition 发表于 2020-7-22 20:53 | 显示全部楼层
iic

  1. void IIC_Config(void);

  2. void IIC_Start(void);

  3. void IIC_Stop(void);

  4. void IIC_SendData(uint8_t dat);

  5. uint8_t IIC_ReceiveData(uint8_t ack);

  6. int8_t IIC_WaitAck(void);
 楼主| condition 发表于 2020-7-22 20:53 | 显示全部楼层
在mian函数中添加显示最终结果的程序,注意将获得的变量存入数组中,这样就可以使用原有函数显示变量了。
353615f1836d23956c.png
 楼主| condition 发表于 2020-7-22 20:54 | 显示全部楼层

作者:停下浮躁的心
链接:https://www.jianshu.com/p/f38bf5065826
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

256

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部