单片机学习小组
直播中

地瓜

13年用户 445经验值
擅长:模拟与电源 能源/照明/显示
私信 关注

STM32核心板I2C通信驱动oled代码学习过程记录

STM32核心板I2C通信驱动oled代码学习过程记录

回帖(2)

阮盛婧

2022-1-21 13:57:18
我是从零开始学习stm32单片机的,写这篇记录学习过程,也希望可以帮助正在学习的小伙伴们。
淘宝买的stm32核心板,0.96寸I2C通信的oled屏幕,下载程序是用的st-link,这个比串口下载好用。
存放字符串,图片16进制的头文件
codetab.h

#ifndef __CODETAB_H
#define __CODETAB_H
/1616µÄµãÕó×ÖÌåÈ¡Ä£·½Ê½£º¹²Òõ¡ª¡ªÁÐÐÐʽ¡ª¡ªÄæÏòÊä³ö/
//unsigned char F16x16[] =//{ 0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x42,0x4A,0xD2,0x6A,0x46,0xC0,0x00,
// 0x40,0xC4,0x44,0x44,0x3F,0x24,0x24,0x24,0x00,0x40,0x80,0x7F,0x00,0x01,0x00,0x00,/
“Ò°”,0
/// 0x00,0x00,0xC0,0x38,0x00,0x00,0x00,0xFF,0x00,0x00,0x40,0x20,0x18,0x00,0x00,0x00,
// 0x80,0x81,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/"»ð",1/// 0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
// 0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00,/"¿Æ",2/// 0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,
// 0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00/“¼¼”,3/
//};
unsigned char F16x16[] =
{0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0xC0,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0x60,0x30,0x0C,0x03,0x43,0x4E,0x34,0x1C,0x07,0x01,0x0E,0x18,0x70,0x40,0x00,/“´Ó”,0/0x00,0x00,0x00,0x00,0x00,0x06,0x8C,0xF8,0x70,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x60,0x60,0x30,0x1C,0x06,0x03,0x00,0x00,0x01,0x07,0x1C,0x38,0x30,0x20,0x00,/“Èë”,1/0x00,0x00,0xF0,0x06,0x0C,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x00,0x00,/“ÃÅ”,2/0x00,0xC4,0xC4,0xB4,0x9C,0xC4,0x44,0x74,0xC4,0x80,0xF8,0x00,0x00,0xFE,0xFE,0x00,
0x00,0x64,0x64,0x24,0x3F,0x3F,0x24,0x24,0x24,0x00,0x0F,0x40,0xC0,0x7F,0x3F,0x00,/“µ½”,3/0x00,0x10,0x10,0xF6,0x9C,0x90,0x90,0x90,0xC0,0xF8,0x16,0x10,0xF0,0x70,0x10,0x00,
0x00,0x60,0x38,0x0F,0x40,0x40,0x7F,0x40,0x40,0x61,0x3E,0x18,0x27,0x40,0xC0,0x00,/"·Å",4*/0x00,0x08,0x08,0xC8,0x48,0x68,0x58,0x4E,0x4E,0x48,0x78,0x68,0xC8,0x08,0x08,0x00,
0x00,0x04,0x44,0x44,0x24,0x1F,0x05,0x04,0x04,0x04,0x7F,0x04,0x04,0x04,0x04,0x00,/“Æú”,5/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/",",6/
0x00,0x04,0x04,0xE4,0x24,0x24,0x24,0xFC,0xFC,0x24,0x24,0x24,0xE4,0x04,0x00,0x00,
0x00,0x08,0x08,0xFF,0x09,0x09,0x09,0x0F,0x0F,0x09,0x49,0xC9,0x7F,0x08,0x08,0x08,/“ÔÙ”,7/0x00,0xC4,0xC4,0xB4,0x9C,0xC4,0x44,0x74,0xC4,0x80,0xF8,0x00,0x00,0xFE,0xFE,0x00,
0x00,0x64,0x64,0x24,0x3F,0x3F,0x24,0x24,0x24,0x00,0x0F,0x40,0xC0,0x7F,0x3F,0x00,/“µ½”,8/0x00,0x00,0x00,0x00,0x00,0x06,0x8C,0xF8,0x70,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x60,0x60,0x30,0x1C,0x06,0x03,0x00,0x00,0x01,0x07,0x1C,0x38,0x30,0x20,0x00,/“Èë”,9/0x00,0x00,0x40,0x40,0x40,0x40,0x40,0xFE,0xFE,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x7F,0x60,0x60,0x60,0x60,0x60,0x60,0x00,/“ÍÁ”,10/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x28,0x28,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/".",11/
};/68µÄµãÕó*/
unsigned char F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ’
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ’
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};
举报

李婷婷

2022-1-21 13:57:47
main.c

#include “stm32f10x.h”
#include “i2c_gpio.h”
#include “oled_i2c.h”
#include “delay.h”
extern unsigned char BMP[];
int main ()
{
unsigned char i;
systick_init ();
i2c_CfgGpio();
OLED_Init();
while(1)
{
OLED_Fill(0xFF);//È«ÆÁµãÁÁ
delay_ms(200);
OLED_Fill(0x00);//È«ÆÁÃð
delay_ms(200);
for(i=0;i<8;i++)
{
OLED_ShowCN(0+i16,0,i);
}
for(i=8;i<12;i++)
{
OLED_ShowCN(0+i
16,3,i);
}
delay_ms(2000);
OLED_CLS();//ÇåÆÁ
OLED_OFF();//²âÊÔOLEDÐÝÃß
delay_ms(1000);
OLED_ON();//²âÊÔOLEDÐÝÃߺó»½ÐÑ
OLED_ShowStr(0,3,(unsigned char*)“never give up”,1);
OLED_ShowStr(0,5,(unsigned char*)“Hello world”,2);
delay_ms(2000);
OLED_CLS();
OLED_OFF();
delay_ms(1000);
OLED_ON();
OLED_DrawBMP(0,0,128,8,(unsigned char*)BMP);
delay_ms(2000);
}}
i2c_gpio.h

#ifndef __I2C_GPIO_H
#define __I2C_GPIO_H
#include “stm32f10x.h”
#define OLED_I2C_WR 0
#define OLED_I2C_RD 1
#define OLED_GPIO_PORT_I2C GPIOB
#define OLED_RCC_I2C_PORT RCC_APB2Periph_GPIOB
#define OLED_I2C_SCL_PIN GPIO_Pin_6
#define OLED_I2C_SDA_PIN GPIO_Pin_7
#if 0
#define OLED_I2C_SCL_1() GPIO_SetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SCL_PIN) /* SCL = 1 /
#define OLED_I2C_SCL_0() GPIO_ResetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SCL_PIN) /
SCL = 0 */
#define OLED_I2C_SDA_1() GPIO_SetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SDA_PIN) /* SDA = 1 /
#define OLED_I2C_SDA_0() GPIO_ResetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SDA_PIN) /
SDA = 0 */
#define OLED_I2C_SDA_READ() GPIO_ReadInputDataBit(OLED_GPIO_PORT_I2C, OLED_I2C_SDA_PIN)
#else
#define OLED_I2C_SCL_1() OLED_GPIO_PORT_I2C->BSRR = OLED_I2C_SCL_PIN /* SCL = 1 /
#define OLED_I2C_SCL_0() OLED_GPIO_PORT_I2C->BRR = OLED_I2C_SCL_PIN /
SCL = 0 */
#define OLED_I2C_SDA_1() OLED_GPIO_PORT_I2C->BSRR = OLED_I2C_SDA_PIN /* SDA = 1 /
#define OLED_I2C_SDA_0() OLED_GPIO_PORT_I2C->BRR = OLED_I2C_SDA_PIN /
SDA = 0 */
#define OLED_I2C_SDA_READ()
((OLED_GPIO_PORT_I2C->IDR & OLED_I2C_SDA_PIN) != 0)
#endif
void i2c_Start(void);
void i2c_Stop(void);
void i2c_SendByte(uint8_t _ucByte);
uint8_t i2c_ReadByte(void);
uint8_t i2c_WaitAck(void);
void i2c_Ack(void);
void i2c_NAck(void);void i2c_CfgGpio(void);
#endif
i2c_gpio.C

#include “i2c_gpio.h”
void i2c_Start(void)
{
OLED_I2C_SDA_1();
OLED_I2C_SCL_1();
delay_us (2);
OLED_I2C_SDA_0();
delay_us (2);
OLED_I2C_SCL_0();
delay_us (2);
}
void i2c_Stop(void)
{
OLED_I2C_SDA_0();
OLED_I2C_SCL_1();
delay_us (2);
OLED_I2C_SDA_1();
}
void i2c_SendByte(uint8_t _ucByte)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80)
{
OLED_I2C_SDA_1();
}
else
{
OLED_I2C_SDA_0();
}
delay_us (2);
OLED_I2C_SCL_1();
delay_us (2);
OLED_I2C_SCL_0();
if (i == 7)
{
OLED_I2C_SDA_1();
}
_ucByte <<= 1;
delay_us (2);
}
}
uint8_t i2c_ReadByte(void)
{
uint8_t i;
uint8_t value;
value = 0;
for (i = 0; i < 8; i++)
{
value <<= 1;
OLED_I2C_SCL_1();
delay_us (2);
if (OLED_I2C_SDA_READ())
{
value++;
}
OLED_I2C_SCL_0();
delay_us (2);
}
return value;
}
uint8_t i2c_WaitAck(void)
{
uint8_t re; OLED_I2C_SDA_1();
delay_us (2);
OLED_I2C_SCL_1();
delay_us (2);
if (OLED_I2C_SDA_READ())
{
re = 1;
}
else
{
re = 0;
}
OLED_I2C_SCL_0();
delay_us (2);
return re;
}
void i2c_Ack(void)
{
OLED_I2C_SDA_0();
delay_us (2);
OLED_I2C_SCL_1();
delay_us (2);
OLED_I2C_SCL_0();
delay_us (2);
OLED_I2C_SDA_1();
}
void i2c_NAck(void)
{
OLED_I2C_SDA_1();
delay_us (2);
OLED_I2C_SCL_1();
delay_us (2);
OLED_I2C_SCL_0();
delay_us (2);
}
void i2c_CfgGpio(void)
{
GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(OLED_RCC_I2C_PORT, ENABLE);
GPIO_InitStructure.GPIO_Pin = OLED_I2C_SCL_PIN | OLED_I2C_SDA_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(OLED_GPIO_PORT_I2C, &GPIO_InitStructure);
i2c_Stop();
}
oled_i2c.h

#ifndef __OLED_I2C_H
#define __OLED_I2C_H
#include “stm32f10x.h”
#define OLED_ADDRESS 0x78 uint8_t OLED_CheckDevice(uint8_t _Address);
void I2C_WriteByte(uint8_t addr,uint8_t data);
void WriteCmd(unsigned char I2C_Command);
void WriteDat(unsigned char I2C_Data);
void OLED_Init(void);
void OLED_SetPos(unsigned char x, unsigned char y);
void OLED_Fill(unsigned char fill_Data);
void OLED_CLS(void);
void OLED_ON(void);
void OLED_OFF(void);
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize);
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N);
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);
uint8_t OLED_Test(void) ;
#endif
oled_i2c.h

#include “oled_i2c.h”
#include “delay.h”
#include “i2c_gpio.h”
#include “codetab.h”
uint8_t OLED_CheckDevice(uint8_t _Address)
{
uint8_t ucAck;
i2c_Start();
i2c_SendByte(_Address|OLED_I2C_WR);
ucAck = i2c_WaitAck();
i2c_Stop();
return ucAck;
}
void I2C_WriteByte(uint8_t addr,uint8_t data)
{
i2c_Start();
i2c_SendByte(OLED_ADDRESS|OLED_I2C_WR);
if (i2c_WaitAck() != 0)
{
goto cmd_fail;
}
i2c_SendByte(addr);
if (i2c_WaitAck() != 0)
{
goto cmd_fail;
}
i2c_SendByte(data);
if (i2c_WaitAck() != 0)
{
goto cmd_fail;
}
i2c_Stop();
cmd_fail:
i2c_Stop();
}
void WriteCmd(unsigned char I2C_Command)
{
I2C_WriteByte(0x00, I2C_Command);
}
void WriteDat(unsigned char I2C_Data)
{
I2C_WriteByte(0x40, I2C_Data);
}
void OLED_Init(void)
{
delay_ms(1000);
WriteCmd(0xAE); //display off
WriteCmd(0x20); //Set Memory Addressing Mode
WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7
WriteCmd(0xc8); //Set COM Output Scan Direction
WriteCmd(0x00); //—set low column address
WriteCmd(0x10); //—set high column address
WriteCmd(0x40); //–set start line address
WriteCmd(0x81); //–set contrast control register
WriteCmd(0xff);
WriteCmd(0xa1); //–set segment re-map 0 to 127
WriteCmd(0xa6); //–set normal display
WriteCmd(0xa8); //–set multiplex ratio(1 to 64)
WriteCmd(0x3F); //
WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
WriteCmd(0xd3); //-set display offset
WriteCmd(0x00); //-not offset
WriteCmd(0xd5); //–set display clock divide ratio/oscillator frequency
WriteCmd(0xf0); //–set divide ratio
WriteCmd(0xd9); //–set pre-charge period
WriteCmd(0x22); //
WriteCmd(0xda); //–set com pins hardware configuration
WriteCmd(0x12);
WriteCmd(0xdb); //–set vcomh
WriteCmd(0x20); //0x20,0.77xVcc
WriteCmd(0x8d); //–set DC-DC enable
WriteCmd(0x14); //
WriteCmd(0xaf); //–turn on oled panel
}
void OLED_SetPos(unsigned char x, unsigned char y)
{
WriteCmd(0xb0+y);
WriteCmd(((x&0xf0)>>4)|0x10);
WriteCmd((x&0x0f)|0x01);
}
void OLED_Fill(unsigned char fill_Data)
{
unsigned char m,n;
for(m=0;m<8;m++)
{
WriteCmd(0xb0+m); //page0-page1
WriteCmd(0x00); //low column start address
WriteCmd(0x10); //high column start address
for(n=0;n<128;n++)
{
WriteDat(fill_Data);
}
}
}
void OLED_CLS(void)
{
OLED_Fill(0x00);
}void OLED_ON(void)
{
WriteCmd(0X8D);
WriteCmd(0X14);
WriteCmd(0XAF);
}void OLED_OFF(void)
{
WriteCmd(0X8D);
WriteCmd(0X10);
WriteCmd(0XAE);
}void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
{
unsigned char c = 0,i = 0,j = 0;
switch(TextSize)
{
case 1:
{
while(ch[j] != ‘’)
{
c = ch[j] - 32;
if(x > 126)
{
x = 0;
y++;
}
OLED_SetPos(x,y);
for(i=0;i<6;i++)
WriteDat(F6x8[c]);
x += 6;
j++;
}
}break;
case 2:
{
while(ch[j] != ‘’)
{
c = ch[j] - 32;
if(x > 120)
{
x = 0;
y++;
}
OLED_SetPos(x,y);
for(i=0;i<8;i++)
WriteDat(F8X16[c16+i]);
OLED_SetPos(x,y+1);
for(i=0;i<8;i++)
WriteDat(F8X16[c
16+i+8]);
x += 8;
j++;
}
}break;
}
}
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
{
unsigned char wm=0;
unsigned int adder=32*N;
OLED_SetPos(x , y);
for(wm = 0;wm < 16;wm++)
{
WriteDat(F16x16[adder]);
adder += 1;
}
OLED_SetPos(x,y + 1);
for(wm = 0;wm < 16;wm++)
{
WriteDat(F16x16[adder]);
adder += 1;
}
}
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y; if(y1%8==0)
y = y1/8;
else
y = y1/8 + 1;
for(y=y0;y {
OLED_SetPos(x0,y);
for(x=x0;x {
WriteDat(BMP[j++]);
}
}
}
uint8_t OLED_Test(void)
{
if (OLED_CheckDevice(OLED_ADDRESS) == 1)
{
return 0;
}
else
{
return 1;
}
}
delay.h

#ifndef __DELAY_H
#define __DELAY_H
#include “stm32f10x.h”
void systick_init (void);
void TimingDelay_Decrement(void);
void SysTick_Handler(void);
void delay_ms(__IO uint32_t nTime);
void delay_ms(unsigned int us);
#endif
delay.c

#include “delay.h”
__IO uint32_t TimingDelay;
void systick_init (void)
{
if( SysTick_Config (72) == 1)
{
while(1);
}
}
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay–;
}
}
void SysTick_Handler(void)
{
TimingDelay_Decrement( );
}
void delay_us(__IO uint32_t nTime)
{
TimingDelay = nTime ;
while(TimingDelay != 0);
}
void delay_ms(unsigned int us)
{
unsigned char i;
for(i=0;i {
delay_us(1000);
}
}
通过以上几个文件就能驱动oled显示了,具体显示什么可以改改参数就行。
我是移植野火版本的代码,并不能完全套用他们的代码,还是要改改参数,一开始我也不懂,想得太简单了,直接复制过来完全没用。
oled淘宝那边的代码是完全不能用,可以用他的取自模软件。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分