写一个傻子都会的IIC屏

这是一个卑微电子信息学员的开始
3月27日工作记录

这是学习stm32的第n天

卑微电子信息学员开始了stm32的学习过程。

写一个傻子都会的IIC屏

我发现在网上使用Stm32G系列的人很少,没有什么参考的例子

IIC详解

我以前写过
https://blog.csdn.net/mohaoyuan/article/details/105345206
写的这么好没人看.jpg

给我划重点!!

CUBEMAX操作

1配置时钟和SW
在这里插入图片描述
2随便设置两个引脚
在这里插入图片描述
我这边引脚设置了OD 但其实默认的就可以

OLED.H和DELAY.H文件编写

delay.c文件

#include "delay.h"
//微秒级的延时
void delay_us(uint32_t delay_us)
{    
  volatile unsigned int num;
  volatile unsigned int t;

  
  for (num = 0; num < delay_us; num++)
  {
    t = 11;
    while (t != 0)
    {
      t--;
    }
  }
}
//毫秒级的延时
void delay_ms(uint16_t delay_ms)
{    
  volatile unsigned int num;
  for (num = 0; num < delay_ms; num++)
  {
    delay_us(1000);
  }
}

delay.h文件

#ifndef __DELAY_H
#define __DELAY_H 
#include "main.h"
void delay_ms(uint16_t delay_ms);
void delay_us(uint32_t delay_us);
#endif

给我划重点!这里delay函数用的是软件延时,其实时间是很不准确,但是,只要有延时就足够应对IIC,准确的延时嘛,自己设timer去。
olcd.c文件

#include "oled.h"
#include "stdlib.h"
#include "oledfont.h"  	 	   
//IIC Start
**********************************************/
void IIC_Start()
{

	OLED_SCLK_Set() ;
	OLED_SDIN_Set();
	OLED_SDIN_Clr();
	OLED_SCLK_Clr();
}

/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
	OLED_SCLK_Clr();
	OLED_SDIN_Clr();
	OLED_SDIN_Set();
	OLED_SCLK_Set() ;
}
/**********************************************
// IIC Write byte
**********************************************/


void Write_IIC_Byte(unsigned char IIC_Byte)
{
	unsigned char i;
	unsigned char m,da;
	da=IIC_Byte;
	for(i=0;i<8;i++)		
	{
			m=da;
			OLED_SCLK_Clr();
		m=m&0x80;
		if(m==0x80)
		{OLED_SDIN_Set();}
		else OLED_SDIN_Clr();
			da=da<<1;
		OLED_SCLK_Set();
		}

	OLED_SCLK_Clr();
	OLED_SCLK_Set() ;
}
/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
   IIC_Start();
   Write_IIC_Byte(0x

我随便给点意思一下,olcd.c文件你哪里来的屏问哪里要。
olcd.h文件

#ifndef __OLED_H
#define __OLED_H			  	 
#include "stdlib.h"
#include "main.h"
#include "delay.h"
#define OLED_MODE 0
#define SIZE 8
#define XLevelL		0x00
#define XLevelH		0x10
#define Max_Column	128
#define Max_Row		64
#define	Brightness	0xFF 
#define X_WIDTH 	128
#define Y_WIDTH 	64	    						  
//-----------------OLED IIC端口定义----------------  					   

#define OLED_SCLK_Clr() GPIOC->BSRR = (uint32_t)GPIO_PIN_12 << 16U;delay_us(1)
#define OLED_SCLK_Set() GPIOC->BSRR = GPIO_PIN_12;delay_us(1)

#define OLED_SDIN_Clr() GPIOC->BSRR = (uint32_t)GPIO_PIN_10 << 16U;delay_us(1)
#define OLED_SDIN_Set() GPIOC->BSRR = GPIO_PIN_10;delay_us(1)

#define OLED_CMD  0	//写命令
#define OLED_DATA 1	//写数据


//OLED控制用函数
void OLED_WR_Byte(unsigned dat,unsigned cmd);  
void OLED_Display_On(void);
void OLED_Display_Off(void);	   							   		    
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(uint8_t x,uint8_t y,uint8_t t);
void OLED_Fill(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t dot);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size);
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p,uint8_t Char_Size);	 
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
void Delay_50ms(unsigned int Del_50ms);
void Delay_1ms(unsigned int Del_1ms);
void fill_picture(unsigned char fill_Data);
void Picture();
void IIC_Start();
void IIC_Stop();
void Write_IIC_Command(unsigned char IIC_Command);
void Write_IIC_Data(unsigned char IIC_Data);
void Write_IIC_Byte(unsigned char IIC_Byte);
#endif  

oled.h文件就有一点小技巧
这是一般人家给你的垃圾:
在这里插入图片描述
在这里插入图片描述
这是你动了脑子的结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个main.h属于偷鸡小技巧,不懂嘛就多动脑子。
后面的嘛,我觉得但凡有点脑子都改懂了。
源文件嘛,给你个链接自个送钱去。
本文仅供学习使用,禁止一切转载或调用,最终解释权由作者本人享有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值