2026/3/28 23:32:25
网站建设
项目流程
做网站市场分析,俄语购物网站建设,电商平台网站开发,深圳网站设计x程序目录
一、所需主要硬件方案
二、电路原理图与实物制作
三、字模取字工具
四、程序设计
4.1 程序总体结构
4.2 主程序设计
4.3 OLED 驱动程序设计
4.4 字模数据位置
五、项目工程文件资料下载方式 演示视频#xff1a; 基于STM32标准库的OLED显示屏中文汉字显示实现 功…目录一、所需主要硬件方案二、电路原理图与实物制作三、字模取字工具四、程序设计4.1 程序总体结构4.2 主程序设计4.3 OLED 驱动程序设计4.4 字模数据位置五、项目工程文件资料下载方式演示视频基于STM32标准库的OLED显示屏中文汉字显示实现功能简介 实现基于STM32F103C8T6的OLED中文显示系统。系统 I²C 通信实现 OLED 初始化、字符与汉字显示等功能并结合字模取字工具生成中文汉字点阵数据完成中文信息的显示本系统采用的是标准库C语言程序设计。所需主要硬件STM32F103C8T6最小系统板、0.96寸OLED显示屏、电源模块等。一、所需主要硬件方案所需主要硬件STM32F103C8T6最小系统板、0.96寸OLED显示屏、电源模块等。STM32F103C8T6最小系统板https://detail.tmall.com/item.htm?ali_refida3_430582_1006%3A1256430174%3AH%3ACuqWaG9bmUYoTlT303GNf0r%2F%2Fymqmw0Erxow4qUDZaA%3D%3A0cf1cfc4db45703f050bd37e7a5eecc0ali_trackid282_0cf1cfc4db45703f050bd37e7a5eecc0id679197366447mi_id0000nlsmIFrF-fjh5f6WaXsPG5mCBRyHPSI5VcO4Kt_Ox7Emm_sceneid1_0_666480043_0priceTId213e08f517670839724436455e1a1dskuId5165714562578spma21n57.1.hoverItem.1utparam%7B%22aplus_abtest%22%3A%22f7f880a77ddb260f7321518481bf0184%22%7Dxxcad_ztc0.96寸OLED显示屏https://detail.tmall.com/item.htm?id42044259331mi_id0000U_VHNkP6TNhDzUxVArDC9DBnZkF1e1C2rofqkdyaMjgspmtbpc.boughtlist.suborder_itemtitle.1.1f422e8df0GNfG电源模块https://item.taobao.com/item.htm?abbucket1id16606969730mi_id0000dyYrz_b_NFkyeiBZn6FkpTxl9P9FAbZdIvqc17FEgQ4ns1priceTId213e01ae17673368357066213e1ad3spma21n57.1.hoverItem.4utparam%7B%22aplus_abtest%22%3A%2293ea4ba4fd969057feba379bd2268270%22%7DxxctaobaoSearch二、电路原理图与实物制作如下为本项目的电路原理图如下为STM32F103C8T6最小系统板用到的接线使用PB8和PB9与OLED显示屏进行接线。电源接3.3v和GND共地。如下为OLED显示屏的四个引脚接线引脚1接GND共地引脚2接电源正极3.3V引脚3为SCL引脚接STM32F103V8T6最小系统板的PB8引脚引脚4为SDA引脚接STM32F103V8T6最小系统板的PB9引脚。电源输入模块接俩根线分别为3.3V和GND。如下根据电路原理图进行洞洞板接线制作实物。电源模块用两根杜邦线引出3.3V和GND到洞洞板然后用飞线将STM32F103C8T6最小系统板和OLED显示屏的3V3和GND引脚接到电源输入处。然后拿两根杜邦线将OLED显示屏的SCL和SDA引脚分别接到STM32F103C8T6最小系统板的PB8和PB9引脚。即可完成洞洞板实物制作。三、字模取字工具字模取字工具可在网络获取。或者搜索作者的微信公众号“阿齐Archie”工具下载栏的开发工具选项自行下载获取“OLED显示屏128x64取字软件”压缩包。本软件工具来自网络仅供参考交流知识学习用途无其他用途双击打开exe文件弹出如下界面点击软件界面的“选项”按钮按照如下字模选项进行配置在如下红框处输入想要的中文汉字例如我输入“阿齐”随后点击“生成字模”按钮生成如下字模数据阿(0) 齐(1) {0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xF2,0x12,0x12,0xF2,0x02,0xFE,0x02,0x02,0x00}, {0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0x0F,0x04,0x04,0x4F,0x80,0x7F,0x00,0x00,0x00},//阿0 {0x00,0x04,0x84,0x84,0x4C,0x54,0x25,0x26,0x24,0x54,0x4C,0x84,0x84,0x04,0x00,0x00}, {0x01,0x01,0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,0x01,0x00},//齐1随后将字模数据进行简单调整调整成如下样式也就是删除了例如阿字两行中间的“}”和“{”{0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xF2,0x12,0x12,0xF2,0x02,0xFE,0x02,0x02,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0x0F,0x04,0x04,0x4F,0x80,0x7F,0x00,0x00,0x00},//阿0 {0x00,0x04,0x84,0x84,0x4C,0x54,0x25,0x26,0x24,0x54,0x4C,0x84,0x84,0x04,0x00,0x00,0x01,0x01,0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,0x01,0x00},//齐1以上即可完成“阿齐”字模数据的获取四、程序设计本系统的软件程序设计基于 STM32F103C8T6 单片机采用 C 语言进行编写程序主要由主函数文件和 OLED 显示驱动相关文件构成通过模块化设计实现 OLED 显示屏的初始化、通信控制以及字符显示功能。4.1 程序总体结构本系统的软件工程主要由以下几个源文件和头文件组成main.c系统主程序文件完成系统初始化及 OLED 显示功能调用OLED.cOLED 显示驱动源文件实现底层通信与显示控制功能OLED.hOLED 显示驱动头文件声明 OLED 相关函数接口OLED_Font.hOLED 字模数据文件用于存储汉字及字符的点阵数据。主函数负责系统初始化和显示内容的组织OLED 驱动文件负责底层显示实现字模文件则为显示内容提供数据支持各模块之间通过函数接口进行调用结构清晰便于维护和扩展4.2 主程序设计main.c是系统的核心控制程序主要完成以下功能系统初始化在主函数中首先对 STM32F103C8T6 单片机的系统时钟及相关外设进行初始化配置为后续程序运行提供稳定的工作环境。OLED 显示模块初始化主程序中调用 OLED 初始化函数对 OLED 显示屏进行初始化设置包括显示模式、地址设置及显示状态配置确保 OLED 处于正常工作状态。显示内容控制初始化完成后主程序通过调用 OLED 显示函数将指定的字符或汉字数据显示在 OLED 屏幕上。显示的数据来源于OLED_Font.h中定义的字模数组。主循环运行系统完成初始化与初始显示后进入主循环。由于本设计以显示功能为主主循环保持系统稳定运行确保 OLED 显示内容持续有效。如下为main.c文件#include stm32f10x.h // Device header #include Delay.h #include OLED.h #include sys.h //#include usart.h /* ***********接线 1.OLED接线3.3vSCL-单片机PB8SDA-单片机PB9 2.LED接线长-单片机3.3v短-单片机PA1/PA2 3.KEY接线PB1GNDPB11GND 4.USART1接线RX-单片机PA9TX-单片机PA10 本项目用OLED显示屏模块接线其余四个不用 *********** */ //extern u8 USART_RX_BUF[USART_REC_LEN]; //串口1接收缓冲,最大USART_REC_LEN个字节 200 //uint8_t keynum;//按键 int main(void) { /*模块初始化*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级2位响应优先级 sys_stm32_clock_init(9); /* 设置时钟, 72Mhz */ OLED_Init(); //OLED初始化 // uart_init(9600); /* 串口初始化为9600 */ // LED_Init(); // Key_Init(); /*OLED显示*/ //显示“阿齐:” OLED_ShowChinese(0,0,0,16,1); OLED_ShowChinese(16,0,1,16,1); OLED_ShowChar(32,0,:,16,1); while (1) { // printf(xxx\r\n);//串口1发送数据 // keynum Key_GetNum(); //获取按键键码 // if(keynum 1) //按键1按下,增加阈值 // { // } // else if(keynum 2) //按键2按下减小阈值 // { // } } }4.3 OLED 驱动程序设计OLED 显示驱动程序主要用于实现 STM32F103C8T6 与 0.96 寸 OLED 显示屏之间的通信及显示控制。OLED.c文件中具体实现了 OLED 显示屏的各项驱动功能主要包括通信控制实现通过软件方式模拟 I²C 通信时序利用 STM32F103C8T6 的 PB8 和 PB9 引脚分别作为 SCL 和 SDA实现与 OLED 显示屏的数据通信。OLED 初始化函数驱动程序中按照 OLED 显示屏的工作时序对其进行初始化配置包括显示模式、扫描方向及显示开启等操作。显示控制函数实现对 OLED 显示缓存的操作可完成清屏、指定位置显示字符或汉字等功能为上层应用提供基础显示支持。OLED 驱动程序采用函数封装的方式结构清晰具有良好的可移植性和可读性。如下为OLED.c文件#include OLED.h #include stdlib.h #include OLED_Font.h #include Delay.h u8 OLED_GRAM[144][8]; //反显函数 void OLED_ColorTurn(u8 i) { if(i0) { OLED_WR_Byte(0xA6,OLED_CMD);//正常显示 } if(i1) { OLED_WR_Byte(0xA7,OLED_CMD);//反色显示 } } //屏幕旋转180度 void OLED_DisplayTurn(u8 i) { if(i0) { OLED_WR_Byte(0xC8,OLED_CMD);//正常显示 OLED_WR_Byte(0xA1,OLED_CMD); } if(i1) { OLED_WR_Byte(0xC0,OLED_CMD);//反转显示 OLED_WR_Byte(0xA0,OLED_CMD); } } //延时 void IIC_delay(void) { u8 t3; while(t--); } //起始信号 void OLED_I2C_Start(void) { OLED_SDA_Set(); OLED_SCL_Set(); IIC_delay(); OLED_SDA_Clr(); IIC_delay(); OLED_SCL_Clr(); IIC_delay(); } //结束信号 void OLED_I2C_Stop(void) { OLED_SDA_Clr(); OLED_SCL_Set(); IIC_delay(); OLED_SDA_Set(); } //等待信号响应 void OLED_I2C_WaitAck(void) //测数据信号的电平 { OLED_SDA_Set(); IIC_delay(); OLED_SCL_Set(); IIC_delay(); OLED_SCL_Clr(); IIC_delay(); } //写入一个字节 void OLED_Send_Byte(u8 dat) { u8 i; for(i0;i8;i) { if(dat0x80)//将dat的8位从最高位依次写入 { OLED_SDA_Set(); } else { OLED_SDA_Clr(); } IIC_delay(); OLED_SCL_Set(); IIC_delay(); OLED_SCL_Clr();//将时钟信号设置为低电平 dat1; } } //发送一个字节 //mode:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 mode) { OLED_I2C_Start(); OLED_Send_Byte(0x78); OLED_I2C_WaitAck(); if(mode){OLED_Send_Byte(0x40);} else{OLED_Send_Byte(0x00);} OLED_I2C_WaitAck(); OLED_Send_Byte(dat); OLED_I2C_WaitAck(); OLED_I2C_Stop(); } //开启OLED显示 void OLED_DisPlay_On(void) { OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能 OLED_WR_Byte(0x14,OLED_CMD);//开启电荷泵 OLED_WR_Byte(0xAF,OLED_CMD);//点亮屏幕 } //关闭OLED显示 void OLED_DisPlay_Off(void) { OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能 OLED_WR_Byte(0x10,OLED_CMD);//关闭电荷泵 OLED_WR_Byte(0xAE,OLED_CMD);//关闭屏幕 } //更新显存到OLED void OLED_Refresh(void) { u8 i,n; for(i0;i8;i) { OLED_WR_Byte(0xb0i,OLED_CMD); //设置行起始地址 OLED_WR_Byte(0x00,OLED_CMD); //设置低列起始地址 OLED_WR_Byte(0x10,OLED_CMD); //设置高列起始地址 OLED_I2C_Start(); OLED_Send_Byte(0x78); OLED_I2C_WaitAck(); OLED_Send_Byte(0x40); OLED_I2C_WaitAck(); for(n0;n128;n) { OLED_Send_Byte(OLED_GRAM[n][i]); OLED_I2C_WaitAck(); } OLED_I2C_Stop(); } } //清屏函数 void OLED_Clear(void) { u8 i,n; for(i0;i8;i) { for(n0;n128;n) { OLED_GRAM[n][i]0;//清除所有数据 } } OLED_Refresh();//更新显示 } //画点 //x:0~127 //y:0~63 //t:1 填充 0,清空 void OLED_DrawPoint(u8 x,u8 y,u8 t) { u8 i,m,n; iy/8; my%8; n1m; if(t){OLED_GRAM[x][i]|n;} else { OLED_GRAM[x][i]~OLED_GRAM[x][i]; OLED_GRAM[x][i]|n; OLED_GRAM[x][i]~OLED_GRAM[x][i]; } // OLED_Refresh(); } //画线 //x1,y1:起点坐标 //x2,y2:结束坐标 void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode) { u16 t; int xerr0,yerr0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_xx2-x1; //计算坐标增量 delta_yy2-y1; uRowx1;//画线起点坐标 uColy1; if(delta_x0)incx1; //设置单步方向 else if (delta_x0)incx0;//垂直线 else {incx-1;delta_x-delta_x;} if(delta_y0)incy1; else if (delta_y0)incy0;//水平线 else {incy-1;delta_y-delta_x;} if(delta_xdelta_y)distancedelta_x; //选取基本增量坐标轴 else distancedelta_y; for(t0;tdistance1;t) { OLED_DrawPoint(uRow,uCol,mode);//画点 xerrdelta_x; yerrdelta_y; if(xerrdistance) { xerr-distance; uRowincx; } if(yerrdistance) { yerr-distance; uColincy; } } // OLED_Refresh(); } //x,y:圆心坐标 //r:圆的半径 void OLED_DrawCircle(u8 x,u8 y,u8 r) { int a, b,num; a 0; b r; while(2 * b * b r * r) { OLED_DrawPoint(x a, y - b,1); OLED_DrawPoint(x - a, y - b,1); OLED_DrawPoint(x - a, y b,1); OLED_DrawPoint(x a, y b,1); OLED_DrawPoint(x b, y a,1); OLED_DrawPoint(x b, y - a,1); OLED_DrawPoint(x - b, y - a,1); OLED_DrawPoint(x - b, y a,1); a; num (a * a b * b) - r*r;//计算画的点离圆心的距离 if(num 0) { b--; a--; } } // OLED_Refresh(); } //在指定位置显示一个字符,包括部分字符 //x:0~127 //y:0~63 //size1:选择字体 6x8/6x12/8x16/12x24 //mode:0,反色显示;1,正常显示 void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1,u8 mode) { u8 i,m,temp,size2,chr1; u8 x0x,y0y; if(size18)size26; else size2(size1/8((size1%8)?1:0))*(size1/2); //得到字体一个字符对应点阵集所占的字节数 chr1chr- ; //计算偏移后的值 for(i0;isize2;i) { if(size18) {tempasc2_0806[chr1][i];} //调用0806字体 else if(size112) {tempasc2_1206[chr1][i];} //调用1206字体 else if(size116) {tempasc2_1608[chr1][i];} //调用1608字体 else if(size124) {tempasc2_2412[chr1][i];} //调用2412字体 else return; for(m0;m8;m) { if(temp0x01)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp1; y; } x; if((size1!8)((x-x0)size1/2)) {xx0;y0y08;} yy0; } OLED_Refresh(); } //显示字符串 //x,y:起点坐标 //size1:字体大小 //*chr:字符串起始地址 //mode:0,反色显示;1,正常显示 void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1,u8 mode) { while((*chr )(*chr~))//判断是不是非法字符! { OLED_ShowChar(x,y,*chr,size1,mode); if(size18)x6; else xsize1/2; chr; } OLED_Refresh(); } //m^n u32 OLED_Pow(u8 m,u8 n) { u32 result1; while(n--) { result*m; } return result; } //显示数字 //x,y :起点坐标 //num :要显示的数字 //len :数字的位数 //size:字体大小 //mode:0,反色显示;1,正常显示 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1,u8 mode) { u8 t,temp,m0; if(size18)m2; for(t0;tlen;t) { temp(num/OLED_Pow(10,len-t-1))%10; if(temp0) { OLED_ShowChar(x(size1/2m)*t,y,0,size1,mode); } else { OLED_ShowChar(x(size1/2m)*t,y,temp0,size1,mode); } } OLED_Refresh(); } //显示汉字 //x,y:起点坐标 //num:汉字对应的序号 //mode:0,反色显示;1,正常显示 void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode) { u8 m,temp; u8 x0x,y0y; u16 i,size3(size1/8((size1%8)?1:0))*size1; //得到字体一个字符对应点阵集所占的字节数 for(i0;isize3;i) { if(size116) {tempHzk1[num][i];}//调用16*16字体 else if(size124) {tempHzk2[num][i];}//调用24*24字体 else if(size132) {tempHzk3[num][i];}//调用32*32字体 else if(size164) {tempHzk4[num][i];}//调用64*64字体 else return; for(m0;m8;m) { if(temp0x01)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp1; y; } x; if((x-x0)size1) {xx0;y0y08;} yy0; } OLED_Refresh(); } //num 显示汉字的个数 //space 每一遍显示的间隔 //mode:0,反色显示;1,正常显示 void OLED_ScrollDisplay(u8 num,u8 space,u8 mode) { u8 i,n,t0,m0,r; while(1) { if(m0) { OLED_ShowChinese(128,24,t,16,mode); //写入一个汉字保存在OLED_GRAM[][]数组中 t; } if(tnum) { for(r0;r16*space;r) //显示间隔 { for(i1;i144;i) { for(n0;n8;n) { OLED_GRAM[i-1][n]OLED_GRAM[i][n]; } } OLED_Refresh(); } t0; } m; if(m16){m0;} for(i1;i144;i) //实现左移 { for(n0;n8;n) { OLED_GRAM[i-1][n]OLED_GRAM[i][n]; } } OLED_Refresh(); } } //x,y起点坐标 //sizex,sizey,图片长宽 //BMP[]要写入的图片数组 //mode:0,反色显示;1,正常显示 void OLED_ShowPicture(u8 x,u8 y,u8 sizex,u8 sizey,u8 BMP[],u8 mode) { u16 j0; u8 i,n,temp,m; u8 x0x,y0y; sizeysizey/8((sizey%8)?1:0); for(n0;nsizey;n) { for(i0;isizex;i) { tempBMP[j]; j; for(m0;m8;m) { if(temp0x01)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp1; y; } x; if((x-x0)sizex) { xx0; y0y08; } yy0; } } OLED_Refresh(); } //OLED的初始化 void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(OLED_SCL_GPIO_CLK|OLED_SDA_GPIO_CLK, ENABLE); //使能A端口时钟 GPIO_InitStructure.GPIO_Pin OLED_SCL_PIN; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD; //推挽输出 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;//速度50MHz GPIO_Init(OLED_SCL_PROT, GPIO_InitStructure); //初始化PA0,1 GPIO_SetBits(OLED_SCL_PROT,OLED_SCL_PIN); GPIO_InitStructure.GPIO_Pin OLED_SDA_PIN; GPIO_Init(OLED_SDA_PROT, GPIO_InitStructure); //初始化PA0,1 GPIO_SetBits(OLED_SDA_PROT,OLED_SDA_PIN); Delay_ms(200); 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(0x30,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_Clear(); OLED_WR_Byte(0xAF,OLED_CMD); }在 OLED 显示驱动程序中为实现中文信息的正常显示系统设计了汉字显示函数OLED_ShowChinese。该函数基于预先生成的汉字点阵字模数据实现指定位置、指定字号及显示模式下的单个汉字显示功能是 OLED 中文显示的核心函数之一。函数原型如下所示void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode)函数功能说明OLED_ShowChinese函数主要用于在 0.96 寸 OLED 显示屏上显示单个汉字。函数通过索引字模文件中存储的汉字点阵数据将对应汉字按照指定的坐标位置写入 OLED 显示缓存并最终显示在屏幕上。该函数支持不同字号以及正常显示与反色显示两种显示模式能够满足多种中文显示需求。参数说明x汉字显示的横坐标起始位置。该参数用于指定汉字在 OLED 显示屏上的起始列坐标单位为像素点。OLED 屏幕的左上角为坐标原点不同的x值可实现汉字在水平方向上的位置调整。y汉字显示的纵坐标起始位置。该参数用于指定汉字在 OLED 显示屏上的起始页地址。由于 OLED 采用分页显示方式y的取值通常以页为单位通过改变该参数可控制汉字在垂直方向上的显示位置。num汉字字模序号。该参数用于指定所显示汉字在字模数组中的索引编号。汉字字模数据在OLED_Font.h文件中以数组形式顺序存储num参数用于准确定位对应汉字的点阵数据实现正确显示。size1汉字字号参数。该参数用于指定汉字的显示尺寸对应字模数据的点阵大小。通过该参数函数能够兼容不同规格的汉字字模数据增强显示的灵活性。mode显示模式选择参数。用于设置汉字的显示方式mode 1正常显示模式按照字模数据原始点阵进行显示mode 0反色显示模式对字模数据进行取反处理实现反色显示效果。函数实现原理说明在函数执行过程中程序首先根据num参数从字模数组中读取对应汉字的点阵数据然后结合size1参数确定汉字点阵所占用的显示区域。随后函数按照 OLED 的页寻址方式将汉字点阵数据逐字节写入 OLED 显示缓冲区。在写入数据过程中函数根据mode参数判断显示模式当选择反色显示时对字模数据进行逻辑取反处理从而实现反色显示效果。最终OLED 显示屏完成汉字的正确绘制。4.4 字模数据位置OLED_Font.h文件主要用于存放 OLED 显示所需的字模数据。本系统中的汉字字模数据通过 OLED 字模取字工具生成并按照 OLED 显示要求进行格式整理后存储在该文件中。每个汉字的字模数据以数组形式存储数据内容与 OLED 显示点阵一一对应。主程序在显示汉字时通过调用 OLED 显示函数将对应字模数据写入 OLED 显示缓存从而在屏幕上显示出相应的汉字内容。通过将字模数据独立存放在专用头文件中不仅提高了程序的可读性也便于后续增加或修改显示内容。五、项目工程文件资料下载方式下载链接基于STM32F103C8T6标准库的OLED显示屏中文汉字显示实现-资料编号39.zip项目工程文件资料包资源-CSDN下载https://download.csdn.net/download/m0_61712829/92527814本项目工程文件资料主要内容STM32程序源码工程、电路原理图工程、取字软件等资源具体内容以资料包为准。程序源码工程文件夹如下电路原理图工程文件夹如下本文为项目设计参考文章/案例演示视频、更多嵌入式项目、项目合集列表、说明链接见开头所示。用户请注意查阅声明/说明。可自行选择付费下载本项目的工程文件学生可优惠下方栏可联系。