我是靠谱客的博主 甜蜜橘子,最近开发中收集的这篇文章主要介绍STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏2.硬件准备3.CubeMX配置5、Keil5代码6.效果本例程源码下载:点击跳转 ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.软件准备

 

(1)编程平台:Keil5

(2)CubeMX

(3)程序:点击下载

2.硬件准备

(1)1.3寸带字库OLED

        注意,成品模块无RES引脚,模块正常工作时RES置于高电平,成品模块是硬件直接拉高RES引脚。本次例程我使用的是仿制的模块,我将RES引脚引了出来,所以Cubemx我会多配置一个RES引脚。直接用如下模块的到最后接线时可不用管RES引脚。

 

(2)F1的板子,本例使用经典F103C8T6

(3)ST-link 下载器

(4)杜邦线若干

3.CubeMX配置

(1)芯片选择

 (2)配置RCC、SYS、时钟树

配置RCC

配置SYS

配置时钟树

 (3)配置IIC

  (4)配置GPIO

  (5)设置路径、生成代码工程 

5、Keil5代码

(1)添加文件_____(按图操作即可)

1

2

3

 添加工程文件

4
5

 添加头文件路径

6

(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.效果

 肉眼看是没有刷新条的,手机拍就拍出来这效果

本例程源码下载:点击跳转 

最后

以上就是甜蜜橘子为你收集整理的STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏2.硬件准备3.CubeMX配置5、Keil5代码6.效果本例程源码下载:点击跳转 的全部内容,希望文章能够帮你解决STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏2.硬件准备3.CubeMX配置5、Keil5代码6.效果本例程源码下载:点击跳转 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部