当前位置:   article > 正文

合泰HT32--4SPI驱动0.96英寸OLED显示实现_ht32vjp

ht32vjp

OLED模块(0.96inch)

驱动方式

OLED模块的外形大家都很清除了,能够找到这里的小伙伴,手上应该都有这样的一个模块。

本文用的通信方式是软件模拟4线SPI方式,优点就是可以随意选择IO口连接,特方便。

具体的驱动原理可以参考以下博文:

OLED(经典0.96英寸)_4SPI_SSD1306控制原理(含常用芯片_oled例程)

还有这篇:【常用模块】OLED显示模块(原理讲解、STM32实例操作)

以上两篇博文里面提到的工程都是以stm32为例的,可以下载把看看里面的oled.coled.h文件

工程创建

工程模板

模板1_链接1:
https://download.csdn.net/download/LiangWF22/14753847

模板1_链接2:
https://leoeinstein.lanzous.com/i5ZwLkbbe8j

模板2_链接1:
https://leoeinstein.lanzous.com/iAvS0kk79ij

oled文件添加

如果感觉下面步骤麻烦的小伙伴,请移步到文末,那里有完整的工程链接,下载即可用。

右键点击工程列表里的工程文件、在弹出框点击Manager Project Items、如下图添加oled文件项目。
在这里插入图片描述
在这里插入图片描述

出现如上图所示的OLED项目文件项就可以往里面添加oled.c 文件了。在模板2_链接1下载里面的文件之后,打开 “HARDWARE” 复制里面的OLED文件夹到模板1Hardware 里面,注意!是整个文件夹一起复制!

复制完成之后,在Keil的工程列表里面双击OLED,往里面添加oled.c文件,出现如下图所示即可。
在这里插入图片描述
最后点击“魔术棒”,选择“C/C++”在"Include Paths"里面添加刚刚复制过来的oled文件夹路径,点击“OK”即可。
在这里插入图片描述
在这里插入图片描述

代码实现

在oled.h文件下面修改oled链接的IO口,然后在oled.c里面修改oled的初始化函数,把它修改成符合合泰芯片IO初始化即可。其实和stm32的大同小异,一样的都需要启动时钟、IO输出/输入定义。

哦,对了,模板1里面是没有延时函数的,需要自己添加。

这篇博文里面有讲到怎么通过定时器延时的,大伙可以参考一下:合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)

oled.h

#ifndef __OLED_H
#define __OLED_H 
//#include "ht32.h"
#include "sys.h"
#include "stdlib.h"	
#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"

//-----------------OLED端口定义----------------

#define OLED_SCLK_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_2);//SCL
#define OLED_SCLK_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_2);

#define OLED_SDIN_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_9);//SDA
#define OLED_SDIN_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_9);


#define OLED_RES_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_5);//RES
#define OLED_RES_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_5);


#define OLED_DC_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_8);//DC
#define OLED_DC_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_8);


#define OLED_CS_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_0);//CS
#define OLED_CS_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_0);

#define OLED_IO  GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_9
#define AFIO_OLED_IO AFIO_PIN_0|AFIO_PIN_2|AFIO_PIN_5|AFIO_PIN_8|AFIO_PIN_9

#define OLED_CMD  0	//写命令
#define OLED_DATA 1	//写数据
#define u8 unsigned char
#define u32 unsigned int

void OLED_ClearPoint(u8 x,u8 y);
void OLED_ColorTurn(u8 i);
void OLED_DisplayTurn(u8 i);
void OLED_WR_Byte(u8 dat,u8 cmd);
void OLED_DisPlay_On(void);
void OLED_DisPlay_Off(void);
void OLED_Refresh(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y);
void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2);
void OLED_DrawCircle(u8 x,u8 y,u8 r);
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1);
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1);
void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1);
void OLED_ScrollDisplay(u8 num,u8 space);
void OLED_WR_BP(u8 x,u8 y);
void OLED_ShowPicture(u8 x0,u8 y0,u8 x1,u8 y1,u8 BMP[]);
void OLED_Init(void);

#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

oled初始化函数

void OLED_Init(void)
{
  //GPIO_InitTypeDef  GPIO_InitStructure;
	//HT_GPIO_TypeDef GPIO_InitStructure;
	
	
	CKCU_PeripClockConfig_TypeDef CLOCK={{0}};
	CLOCK.Bit.PC=1;
	//CLOCK.Bit.AFIO=1;
	CKCU_PeripClockConfig(CLOCK,ENABLE);

	//AFIO_GPxConfig(GPIO_PC,AFIO_WIFI_IO,AFIO_MODE_DEFAULT);
	
    GPIO_PullResistorConfig(HT_GPIOC,OLED_IO,GPIO_PR_UP);
   // GPIO_DriveConfig(HT_GPIOC,OLED_IO,GPIO_DV_8MA);
	GPIO_DirectionConfig(HT_GPIOC,OLED_IO,GPIO_DIR_OUT);
	
	OLED_RES_Clr();
	delay_ms(200);
	OLED_RES_Set();
	
	OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
	OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
	OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
	OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
	OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
	OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
	OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
	OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
	OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
	OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
	OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
	OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset	Shift Mapping RAM Counter (0x00~0x3F)
	OLED_WR_Byte(0x00,OLED_CMD);//-not offset
	OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
	OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
	OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
	OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
	OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
	OLED_WR_Byte(0x12,OLED_CMD);
	OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
	OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
	OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
	OLED_WR_Byte(0x02,OLED_CMD);//
	OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
	OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
	OLED_WR_Byte(0xA4,OLED_CMD);// Entire Display On (0xa4/0xa5)
	OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) 
	OLED_WR_Byte(0xAF,OLED_CMD);
	OLED_Clear();
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

图片取模

取模软件&字符码

非常好用的字符/图片取模软件:https://leoeinstein.lanzouo.com/iAPXvz5baef
在“模式”里面我们可以选择,是图片取模还是字符取模;

然后在“设置”里面按照下图2的一样的设置就行;

设置完成之后,选择一张bmp图片,点击生成字模;

复制字模数据到工程里的bmp.h文件里面就行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现效果

在这里插入图片描述
在这里插入图片描述

工程链接

工程链接:

https://download.csdn.net/download/LiangWF22/14753777

备份链接:

https://leoeinstein.lanzouo.com/iWuW9kjmtte

2021年1月19日,星期二

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/565940
推荐阅读
相关标签
  

闽ICP备14008679号