为JY61加入OLED显示系统

之前学习I2C时尝试实现OLED显示电机速度以观测pid的功能,但受困于难以在OLED上实时更新数字,最终只能做到显示一些图片或汉字。今天结合野火和正点原子的资料,融合二者的代码,实现了在0.96i2c四针屏幕上实时显示JY61反馈角度的功能。


 

有点懒,还是先记一下代码,过几天空闲了添加解读,方便以后复习。

主函数:

/**
  ******************************************************************************
  * @author  YCHEN
  * @version V1.5
  * @date    2021-10-24
  * @brief   备战电赛
  ******************************************************************************
  *
  * 型号   	  :STM32F103VET6 
  * 博客    	:https://blog.csdn.net/YANGCHEN144?spm=1000.2115.3001.5343
  * 参考资料	:野火教程
	* 程序功能  :
							1.LED灯
							2.配置了USART1,USART2,USART3,其中1用来与JY61通信,2用来监视串口
							3.200ms的定时
							4.两个按键中断
							5.加入了OLED显示角度系统
  ******************************************************************************
  */ 
	
#include "stm32f10x.h"
#include "bsp_led.h"
#include "./usart/bsp_usart.h"
#include <string.h>
#include <stdio.h>
#include "./JY61/JY61.h"
#include "./TimBase/bsp_TiMbase.h"
#include "./EXTI/bsp_exti.h" 
#include "./SysTick/bsp_SysTick.h"
//#include "./oled/OLED_I2C.h"
#include "./sys/sys.h"
#include "./oled/oled.h"

#define SOFT_DELAY Delay(0x00FFFF);
void Delay(__IO u32 nCount); 

struct SAcc 		stcAcc;
struct SGyro 		stcGyro;
struct SAngle 	stcAngle;

//用串口1给JY模块发送指令
void sendcmd(char cmd[])
{
	char i;
	for(i=0;i<3;i++)
		UART1_Put_Char(cmd[i]);
}

void sendcmd5(char cmd[])
{
	char i;
	for(i=0;i<10;i++)
		UART1_Put_Char(cmd[i]);
}

//CopeSerialData为串口2中断调用函数,串口每收到一个数据,调用一次这个函数。
void CopeSerial2Data(unsigned char ucData)
{
	static unsigned char ucRxBuffer[250];
	static unsigned char ucRxCnt = 0;	
	//Usart_SendByte( DEBUG_USARTx2, ucData);
	//printf("欢迎使用\n\n");
	ucRxBuffer[ucRxCnt++]=ucData;	//将收到的数据存入缓冲区中
	if (ucRxBuffer[0]!=0x55) //数据头不对,则重新开始寻找0x55数据头
	{
		ucRxCnt=0;
		return;
	}
	if (ucRxCnt<11) {return;}//数据不满11个,则返回
	else
	{

		switch(ucRxBuffer[1])//判断数据是哪种数据,然后将其拷贝到对应的结构体中,有些数据包需要通过上位机打开对应的输出后,才能接收到这个数据包的数据
		{
			//memcpy为编译器自带的内存拷贝函数,需引用"string.h",将接收缓冲区的字符拷贝到数据结构体里面,从而实现数据的解析。
			case 0x51:	memcpy(&stcAcc,&ucRxBuffer[2],8);break;
			case 0x52:	memcpy(&stcGyro,&ucRxBuffer[2],8);break;
			case 0x53:	memcpy(&stcAngle,&ucRxBuffer[2
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AWELA144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值