STM32学习笔记三(基于标准库)

一、0.96寸OLED显示屏及调试

二、常用函数

函数 解释
OLED_Init(); 初始化函数
OLED_Clear(); 清屏
OLED_Showchar(1,2,'A') 第1行,第2列,显示字符‘A’
OLED_ShowString(1,3,"Hello World!") 第1行,第3列,显示字符串“Hello World!”
OLE_ShowNum(2,1,12345,5) 第2行,第3列,显示十进制数字12345,显示数字长度为5,若显示长度为4,则只会显示1234,长度范围:1~10
OLE_ShowSignedNum(2,7,-45,2) 第2行,第7列,显示有符号十进制数字-45,显示数字长度为2,长度范围:1~10
OLE_ShowHexNum(3,1,0xABCD,4) 第3行,第1列,显示十六进制数字ABCD,长度范围:1~8
OLE_ShowBinNum(4,1,0xDCBA,4) 第4行,第1列,显示十六进制数字DCBA,长度范围:1~8

硬件接线图:

1.OLED的GND和VCC需要接电源的负极和正极

2.SCL(时钟线连接PB8)    SDA(数据线连接PB9)

int main()
{

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使用GPIOB端口

    GPIO_InitTypeDef GPIO_InitStructure;     //建立GPIO的结构体,用于储存GPIO_InitStructure的 配置信息(mode模式 pin端口 speed速度 )
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;// 通用推挽输出
 	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; //选择GPIOB 8和9脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//串口速度
 
    GPIO_Init(GPIOB,&GPIO_InitStructure);  //GPIO_B配置完成

}

三、OLED的相关函数

OLED的相关使用函数,常用函数中可了解

#include "stm32f10x.h"
#include "OLED_Font.h"
 
/*需要更改的只有'引脚配置'和'引脚初始化'*/
 
 
/*引脚配置, 选择的是你硬件电路把SCL和SDA这两个引脚接在了哪两个端口*/
#define OLED_W_SCL(x)		GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))
#define OLED_W_SDA(x)		GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))
 
/*引脚初始化*/
void OLED_I2C_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
 	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	OLED_W_SCL(1);
	OLED_W_SDA(1);
}
 
//下面为  I2C通信的基本时序   和后面OLED用户调用的代码
 
/**
  * @brief  I2C开始
  * @param  无
  * @retval 无
  */
void OLED_I2C_Start(void)
{
	OLED_W_SDA(1);
	OLED_W_SCL(1);
	OLED_W_SDA(0);
	OLED_W_SCL(0);
}
 
/**
  * @brief  I2C停止
  * @param  无
  * @retval 无
  */
void OLED_I2C_Stop(void)
{
	OLED_W_SDA(0);
	OLED_W_SCL(1);
	OLED_W_SDA(1);
}
 
/**
  * @brief  I2C发送一个字节
  * @param  Byte 要发送的一个字节
  * @retval 无
  */
void OLED_I2C_SendByte(uint8_t Byte)
{
	uint8_t i;
	for (i = 0; i < 8; i++)
	{
		OLED_W_SDA(Byte & (0x80 >> i));
		OLED_W_SCL(1);
		OLED_W_SCL(0);
	}
	OLED_W_SCL(1);	//额外的一个时钟,不处理应答信号
	OLED_W_SCL(0);
}
 
/**
  * @brief  OLED写命令
  * @param  Command 要写入的命令
  * @retval 无
  */
void OLED_WriteCommand(uint8_t Command)
{
	OLED_I2C_Start();
	OLED_I2C_SendByte(0x78);		//从机地址
	OLED_I2C_SendByte(0x00);		//写命令
	OLED_I2C_SendByte(Command); 
	OLED_I2C_Stop();
}
 
/**
  * @brief  OLED写数据
  * @param  Data 要写入的数据
  * @retval 无
  */
void OLED_WriteData(uint8_t Data)
{
	OLED_I2C_Start();
	OLED_I2C_SendByte(0x78);		//从机地址
	OLED_I2C_SendByte(0x40);		//写数据
	OLED_I2C_SendByte(Data);
	OLED_I2C_Stop();
}
 
/**
  * @brief  OLED设置光标位置
  * @param  Y 以左上角为原点,向下方向的坐标,范围:0~7
  * @param  X 以左上角为原点,向右方向的坐标,范围:0~127
  * @retval 无
  */
void OLED_SetCursor(uint8_t Y, uint8_t X)
{
	OLED_WriteCommand(0xB0 | Y);					//设置Y位置
	OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));	//设置X位置高4位
	OLED_WriteCommand(0x00 | (X & 0x0F));			//设置X位置低4位
}
 
/**
  * @brief  OLED清屏
  * @param  无
  * @retval 无
  */
void OLED_Clear(void)
{  
	uint8_t i, j;
	for (j = 0; j < 8; j++)
	{
		OLED_SetCursor(j, 0);
		for(i = 0; i < 128; i++)
		{
			OLED_WriteData(0x00);
		}
	}
}
 
/**
  * @brief  OLED显示一个字符
  * @param  Line 行位置,范围:1~4
  * @param  Column 列位置,范围:1~16
  * @param  Char 要显示的一个字符,范围:ASCII可见字符
  * @retval 无
  */
voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值