STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植

概述i2c总线硬件简单,资源消耗少,只有时钟和数据线。本例程主要讲解如何点亮0.96寸的oled屏幕,本例程采用的是stm32f030r8t6,64k大小的flash。
硬件准备首先需要准备一个开发板,这里我准备的是nucleo-f030r8的开发板:
oled显示屏就是淘宝上iic接口的12864模块。
选择芯片型号使用stm32cubemx选择芯片stm32f030r8,如下所示:
配置时钟源hse与lse分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择disable选项,如下所示:
配置时钟树stm32f0的最高主频到48m,所以配置48即可:
iic配置本次实验使用的iic与显示屏通信,配置如下。
生成工程设置注意在生产工程设置中不能出现中文,不然会报错。
生成代码
配置keil
驱动代码oled.c#include oled.h#include i2c.h#include oledfont.h //头文件uint8_t cmd_data[]={0xae, 0x00, 0x10, 0x40, 0xb0,0x81,0xff,0xa1,0xa6,0xa8,0x3f, 0xc8,0xd3,0x00,0xd5,0x80,0xd8,0x05,0xd9,0xf1,0xda,0x12,0xd8,0x30,0x8d,0x14, 0xaf }; //初始化命令void writecmd(void){ uint8_t i = 0; for(i=0; i<27; i++) { hal_i2c_mem_write(&hi2c1 ,0x78,0x00,i2c_memadd_size_8bit,cmd_data+i,1,0x100); }}//向设备写控制命令void oled_wr_cmd(uint8_t cmd){ hal_i2c_mem_write(&hi2c1 ,0x78,0x00,i2c_memadd_size_8bit,&cmd,1,0x100);}//向设备写数据void oled_wr_data(uint8_t data){ hal_i2c_mem_write(&hi2c1 ,0x78,0x40,i2c_memadd_size_8bit,&data,1,0x100);}//初始化oled屏幕void oled_init(void){ hal_delay(200); writecmd();}//清屏void oled_clear(void){ uint8_t i,n; for(i=0;i<8;i++) { oled_wr_cmd(0xb0+i);//设置页地址(0~7) oled_wr_cmd (0x00); //设置显示位置—列低地址 oled_wr_cmd (0x10); //设置显示位置—列高地址 for(n=0;n>4)|0x10); oled_wr_cmd(x&0x0f);} void oled_on(void) { uint8_t i,n; for(i=0;i<8;i++) { oled_wr_cmd(0xb0+i); //设置页地址(0~7) oled_wr_cmd(0x00); //设置显示位置—列低地址 oled_wr_cmd(0x10); //设置显示位置—列高地址 for(n=0;n<128;n++) oled_wr_data(1); } //更新显示}unsigned int oled_pow(uint8_t m,uint8_t n){ unsigned int result=1; while(n--)result*=m; return result;}//显示2个数字//x,y :起点坐标 //len :数字的位数//size:字体大小//mode:模式 0,填充模式;1,叠加模式//num:数值(0~4294967295); void oled_shownum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2){ uint8_t t,temp; uint8_t enshow=0; for(t=0;t取模由于单片机的flash比较吃紧,所以要显示汉字需要先进行取模。
取模软件下载地址:
https://download.csdn.net/download/qq_24312945/13687536
取模软件设置
设置完之后就可以取自己想要汉字的编码,输入完毕点击生成字模即可。
将取得的编码放入oledfont.h的hzk数组中即可。
主程序main.c中。
/* user code begin 2 */ oled_init(); oled_clear(); //清屏 oled_showchinese(0,0,0);//记 oled_showchinese(16,0,1);//贴 oled_shownum(0,2,2020,4,16);//2020 oled_showchinese(32,2,2);//年 oled_shownum(48,2,12,2,16);//12 oled_showchinese(64,2,3);//月 oled_shownum(80,2,15,2,16);//15 oled_showchinese(96,2,4);//日 oled_showstring(0,6,hello world!,12); /* user code end 2 */演示效果


荣耀v9play和华为畅享7哪个好? 区别对比分析,只有资深花粉才知道
韦尔股份完成3大收购,布局未来发展战略
华为云推出云原生分布式数据库GaussDB(for Redis)
基于仙知AMB的消毒机器人问世,将更安心更智能
浅谈AR技术落地现状以及未来发展方向
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
高压变频器与低压变频器的区别
采用全差分结构的高性能采样/保持电路的设计
戴尔科技集团第二财季经营汇总
基于SEP3203拉力试验机嵌入式测控系统设计
5G时代即将来临,你会更换手机吗
VQuad NetTest数据质量测试方案
没有对比就没有伤害,Flyme 6 对比 iOS 10
蔚来汽车恢复用户免费换电政策
欣奕华科技在平板显示用负性光刻胶领域实现量产 预计今年将有1000吨的光刻胶交付用户
GaN或成5G市场发展新动力
一言不合就玩跨界 昂达金色小马41二合一笔记本
电动汽车通过换电池实现续航升级有何利与弊
基于Altera FPGA的彩屏控制器的设计和实现
Win10 ipv6无网络访问权限的具体解决方案