1.软件准备
(1)编程平台:Keil5
(2)CubeMX
(3)程序:点击下载
2.硬件准备
(1)1.3寸带字库OLED
?
(2)F1的板子,本例使用经典F103C8T6
(3)ST-link?下载器
(4)杜邦线若干
3.CubeMX配置
(1)芯片选择
?(2)配置RCC、SYS、时钟树
配置RCC
配置SYS
配置时钟树
?(3)配置IIC
??(4)配置GPIO
??(5)设置路径、生成代码工程?
(1)添加文件_____(按图操作即可)
?
?
?添加工程文件
?添加头文件路径
(2)全编译编译一次
会提示如下报错,双击错误跳转到oled.h
(3)修改oled.h??
#ifndef __OLED_H
#define __OLED_H
#include "main.h"
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
#define OLED_RES_Clr() HAL_GPIO_WritePin(OLED_RES_GPIO_Port, OLED_RES_Pin, GPIO_PIN_RESET)//RES
#define OLED_RES_Set() HAL_GPIO_WritePin(OLED_RES_GPIO_Port, OLED_RES_Pin, GPIO_PIN_SET)
#define OLED_DC_Clr() HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, GPIO_PIN_RESET)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, GPIO_PIN_SET)
#define OLED_CS_Clr() HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, GPIO_PIN_RESET)//CS
#define OLED_CS_Set() HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, GPIO_PIN_SET)
#define ZK_CS_Clr() HAL_GPIO_WritePin(ZK_CS_GPIO_Port,ZK_CS_Pin, GPIO_PIN_RESET)//CS2
#define ZK_CS_Set() HAL_GPIO_WritePin(ZK_CS_GPIO_Port,ZK_CS_Pin, GPIO_PIN_SET)
?(4)修改oled.c
①①①修改头文件
?
#include "oled.h"
#include "stdlib.h"
//#include "delay.h
#include "spi.h"
②②②修改写字节函数
?
//向SSD1306写入一个字节。
//mode:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
// for(i=0;i<8;i++)
// {
// OLED_SCLK_Clr();
// if(dat&0x80)
// OLED_MOSI_Set();
// else
// OLED_MOSI_Clr();
// OLED_SCLK_Set();
// dat<<=1;
// }
HAL_SPI_Transmit(&hspi1, &dat, 1, 0X100);
OLED_CS_Set();
OLED_DC_Set();
}
③③③修改初始化函数
?
HAL_Delay(10);
(5)修改zk.c
①①①修改写字节函数
?
//送指令到晶联讯字库IC
void Send_Command_to_ROM(u8 dat)
{
// u8 i;
// for(i=0;i<8;i++)
// {
// ZK_SCLK_Clr();
// if(dat&0x80)
// {
// ZK_MOSI_Set();
// }
// else
// {
// ZK_MOSI_Clr();
// }
// dat<<=1;
// ZK_SCLK_Set();
// }
HAL_SPI_Transmit(&hspi1, &dat, 1, 0X100);
}
②②②修改读字节函数
?
//从晶联讯字库IC中取汉字或字符数据(1个字节)
u8 Get_data_from_ROM(void)
{
u8 read=0;
// for(i=0;i<8;i++)
// {
// ZK_SCLK_Clr();
// read<<=1;
// if(ZK_MISO())
// {
// read++;
// }
// ZK_SCLK_Set();
// }
HAL_SPI_Receive(&hspi1, &read, 1, 0X100);
return read;
}
(6)main.c
①添加头文件
#include "oled.h"
#include "bmp.h"
②whlie循环前添加:
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(1);//0正常显示 1 屏幕翻转显示
OLED_Clear();
?③while中添加:
OLED_Display_128x64(bmp1);
HAL_Delay(500);
OLED_Display_GB2312_string(0,0,"12864,带中文字库"); /*在第1页,第1列,显示一串16x16点阵汉字或8x16的ASCII字*/
OLED_Display_GB2312_string(0,2,"16X16简体汉字库,"); /*显示一串16x16点阵汉字或8x16的ASCII字.以下雷同*/
OLED_Display_GB2312_string(0,4,"或8X16点阵ASCII,");
OLED_Display_GB2312_string(0,6,"或5X7点阵ASCII码");
HAL_Delay(500);
OLED_Clear();
OLED_Display_GB2312_string(24,0,"中景园电子");
OLED_Display_GB2312_string(0,2,"主要生产OLED模块");
OLED_Display_GB2312_string(0,4,"顾客至上真诚服务");
OLED_Display_GB2312_string(0,6,"诚信与质量第一!");
HAL_Delay(500);
OLED_Clear();
OLED_Display_GB2312_string(0,0,"GB2312简体字库及");
OLED_Display_GB2312_string(0,2,"有图型功能,可自");
OLED_Display_GB2312_string(0,4,"编大字或图像或生");
OLED_Display_GB2312_string(0,6,"僻字,例如:");
OLED_Display_16x16(97,6,jiong1); /*在第7页,第81列显示单个自编生僻汉字“囧”*/
OLED_Display_16x16(113,6,lei1);
HAL_Delay(500);
OLED_Clear();
OLED_Display_GB2312_string(0,0,"<!@#$%^&*()_-+]/"); /*在第1页,第1列,显示一串16x16点阵汉字或8*16的ASCII字*/
OLED_Display_string_5x7(0,2,"<!@#$%^&*()_-+]/;.,?[");/*在第3页,第1列,显示一串5x7点阵的ASCII字*/
OLED_Display_string_5x7(0,3,"XY electronics Co., ");/*显示一串5x7点阵的ASCII字*/
OLED_Display_string_5x7(0,4,"Ltd. established at ");/*显示一串5x7点阵的ASCII字*/
OLED_Display_string_5x7(0,5,"year 2010.Focus OLED ");/*显示一串5x7点阵的ASCII字*/
OLED_Display_string_5x7(0,6,"Mobile:13265585975");/*显示一串5x7点阵的ASCII字*/
OLED_Display_string_5x7(0,7,"Tel:0755-32910715");/*显示一串5x7点阵的ASCII字*/
HAL_Delay(500);
OLED_Clear();
OLED_Display_GB2312_string(0,0,"啊阿埃挨哎唉哀皑"); /*在第1页,第1列,显示一串16x16点阵汉字或8x16的ASCII字*/
OLED_Display_GB2312_string(0,2,"癌蔼矮艾碍爱隘鞍"); /*显示一串16x16点阵汉字或8x16的ASCII字.以下雷同*/
OLED_Display_GB2312_string(0,4,"氨安俺按暗岸胺案");
OLED_Display_GB2312_string(0,6,"肮昂盎凹敖熬翱袄");
HAL_Delay(500);
OLED_Clear();
OLED_Display_GB2312_string(0,0,"鬟鬣麽麾縻麂麇麈");
OLED_Display_GB2312_string(0,2,"麋麒鏖麝麟黛黜黝");
OLED_Display_GB2312_string(0,4,"黠黟黢黩黧黥黪黯");
OLED_Display_GB2312_string(0,6,"齄鼬鼹鼷鼽鼾鼢鼯");
HAL_Delay(500);
OLED_Clear();
6.效果
?肉眼看是没有刷新条的,手机拍就拍出来这效果
本例程源码下载:点击跳转?
|