你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32CUBEMX--IIC,12864OLED(0.96寸)移植

[复制链接]
STMCU小助手 发布时间:2022-4-30 21:36
概述
I2C总线硬件简单,资源消耗少,只有时钟和数据线。本例程主要讲解如何点亮0.96寸的OLED屏幕,本例程采用的是STM32F030R8T6,64K大小的Flash。

硬件准备
首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:

9KQPF4MPW1JWM@BHVP2QS[F.png


选择芯片型号
使用STM32CUBEMX选择芯片stm32f030r8,如下所示:

20200604204408810.png

配置时钟源
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

20200604204644344.png

配置时钟树

STM32F0的最高主频到48M,所以配置48即可:

20200604204550406.png

IIC配置
本次实验使用的IIC与显示屏通信,配置如下。

20201214174722949.png

生成工程设置

注意在生产工程设置中不能出现中文,不然会报错。

20201214175352678.png

生成代码

20200604205807980.png

配置keil

20200604210002645.png

驱动代码
oled.c

  1. #include "oled.h"
  2. #include "i2c.h"
  3. #include "oledfont.h"          //头文件

  4. uint8_t CMD_Data[]={
  5. 0xAE,        
  6. 0x00,        
  7. 0x10,        
  8. 0x40,        
  9. 0xB0,
  10. 0x81,
  11. 0xFF,
  12. 0xA1,
  13. 0xA6,
  14. 0xA8,
  15. 0x3F,                                       
  16. 0xC8,
  17. 0xD3,
  18. 0x00,
  19. 0xD5,
  20. 0x80,
  21. 0xD8,
  22. 0x05,
  23. 0xD9,
  24. 0xF1,
  25. 0xDA,
  26. 0x12,
  27. 0xD8,
  28. 0x30,
  29. 0x8D,
  30. 0x14,        
  31. 0xAF        
  32. };      //初始化命令


  33. void WriteCmd(void)
  34. {
  35.         uint8_t i = 0;
  36.         for(i=0; i<27; i++)
  37.         {
  38.                 HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,CMD_Data+i,1,0x100);
  39.         }
  40. }
  41. //向设备写控制命令
  42. void OLED_WR_CMD(uint8_t cmd)
  43. {
  44.         HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100);
  45. }
  46. //向设备写数据
  47. void OLED_WR_DATA(uint8_t data)
  48. {
  49.         HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&data,1,0x100);
  50. }
  51. //初始化oled屏幕
  52. void OLED_Init(void)
  53. {         
  54.         HAL_Delay(200);

  55.         WriteCmd();
  56. }
  57. //清屏
  58. void OLED_Clear(void)
  59. {
  60.         uint8_t i,n;                    
  61.         for(i=0;i<8;i++)  
  62.         {  
  63.                 OLED_WR_CMD(0xb0+i);//设置页地址(0~7)
  64.                 OLED_WR_CMD (0x00); //设置显示位置—列低地址
  65.                 OLED_WR_CMD (0x10); //设置显示位置—列高地址
  66.                 for(n=0;n<128;n++)
  67.                         OLED_WR_DATA(0);//更新显示
  68.         }
  69. }
  70. //开启OLED显示   
  71. void OLED_Display_On(void)
  72. {
  73.         OLED_WR_CMD(0X8D);  //SET DCDC命令
  74.         OLED_WR_CMD(0X14);  //DCDC ON
  75.         OLED_WR_CMD(0XAF);  //DISPLAY ON
  76. }
  77. //关闭OLED显示     
  78. void OLED_Display_Off(void)
  79. {
  80.         OLED_WR_CMD(0X8D);  //SET DCDC命令
  81.         OLED_WR_CMD(0X10);  //DCDC OFF
  82.         OLED_WR_CMD(0XAE);  //DISPLAY OFF
  83. }        
  84. //坐标设置
  85. void OLED_Set_Pos(uint8_t x, uint8_t y)
  86. {         
  87.         OLED_WR_CMD(0xb0+y);
  88.         OLED_WR_CMD(((x&0xf0)>>4)|0x10);
  89.         OLED_WR_CMD(x&0x0f);
  90. }

  91. void OLED_On(void)  
  92. {  
  93.         uint8_t i,n;                    
  94.         for(i=0;i<8;i++)  
  95.         {  
  96.                 OLED_WR_CMD(0xb0+i);    //设置页地址(0~7)
  97.                 OLED_WR_CMD(0x00);      //设置显示位置—列低地址
  98.                 OLED_WR_CMD(0x10);      //设置显示位置—列高地址   
  99.                 for(n=0;n<128;n++)
  100.                         OLED_WR_DATA(1);
  101.         } //更新显示
  102. }
  103. unsigned int oled_pow(uint8_t m,uint8_t n)
  104. {
  105.         unsigned int result=1;         
  106.         while(n--)result*=m;   
  107.         return result;
  108. }
  109. //显示2个数字
  110. //x,y :起点坐标         
  111. //len :数字的位数
  112. //size:字体大小
  113. //mode:模式        0,填充模式;1,叠加模式
  114. //num:数值(0~4294967295);                           
  115. void OLED_ShowNum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2)
  116. {                 
  117.         uint8_t t,temp;
  118.         uint8_t enshow=0;                                                   
  119.         for(t=0;t<len;t++)
  120.         {
  121.                 temp=(num/oled_pow(10,len-t-1))%10;
  122.                 if(enshow==0&&t<(len-1))
  123.                 {
  124.                         if(temp==0)
  125.                         {
  126.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
  127.                                 continue;
  128.                         }else enshow=1;
  129.                           
  130.                 }
  131.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
  132.         }
  133. }
  134. //在指定位置显示一个字符,包括部分字符
  135. //x:0~127
  136. //y:0~63
  137. //mode:0,反白显示;1,正常显示                                 
  138. //size:选择字体 16/12
  139. void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)
  140. {              
  141.         unsigned char c=0,i=0;        
  142.                 c=chr-' ';//得到偏移后的值                        
  143.                 if(x>128-1)
  144.                 {
  145.                         x=0;
  146.                         y=y+2;
  147.                 }
  148.                 if(Char_Size ==16)
  149.                         {
  150.                         OLED_Set_Pos(x,y);        
  151.                         for(i=0;i<8;i++)
  152.                                 OLED_WR_DATA(F8X16[c*16+i]);
  153.                         OLED_Set_Pos(x,y+1);
  154.                         for(i=0;i<8;i++)
  155.                                 OLED_WR_DATA(F8X16[c*16+i+8]);
  156.                         }
  157.                         else {        
  158.                                 OLED_Set_Pos(x,y);
  159.                                 for(i=0;i<6;i++)
  160.                                 OLED_WR_DATA(F6x8[c]<i>);
  161.                                 
  162.                         }
  163. }

  164. //显示一个字符号串
  165. void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
  166. {
  167.         unsigned char j=0;
  168.         while (chr[j]!='\0')
  169.         {               
  170.                 OLED_ShowChar(x,y,chr[j],Char_Size);//一次显示一个字符
  171.                         x+=8;
  172.                 if(x>120){x=0;y+=2;}
  173.                         j++;
  174.         }
  175. }
  176. //显示汉字
  177. //hzk 用取模软件得出的数组
  178. void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no)
  179. {                                 
  180.         uint8_t t,adder=0;
  181. //定位(0xbx,x为第几行。0x1x ,x为列地址 高四位;0x0x,x为列地址第4位。
  182. //比如你想定 位到第3行,第126(0x7e)列,就要写WrCmd(0xb3);WrCmd(0x17);WrCmd(0x0e);)        
  183.         OLED_Set_Pos(x,y);        
  184.     for(t=0;t<16;t++)
  185.                 {
  186.                                 OLED_WR_DATA(Hzk[2*no][t]);
  187.                                 adder+=1;
  188.      }        
  189.                 OLED_Set_Pos(x,y+1);        
  190.     for(t=0;t<16;t++)
  191.                         {        
  192.                                 OLED_WR_DATA(Hzk[2*no+1][t]);
  193.                                 adder+=1;
  194.       }                                       
  195. }</i>
复制代码

oled.h
  1. #ifndef __OLED_H__
  2. #define __OLED_H__

  3. #include "stm32f0xx_hal.h"

  4. ///
  5. #define   OLED_GPIO_CLK_ENABLE()         __HAL_RCC_GPIOA_CLK_ENABLE()

  6. #define   GPIOx_OLED_PORT               GPIOB
  7. #define   OLED_SCK_PIN                  GPIO_PIN_6
  8. #define   OLED_SCK_ON()                 HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SCK_PIN, GPIO_PIN_SET)
  9. #define   OLED_SCK_OFF()                HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SCK_PIN, GPIO_PIN_RESET)
  10. #define   OLED_SCK_TOGGLE()             HAL_GPIO_TogglePin(GPIOx_OLED_PORT, OLED_SCK_PIN)
  11. #define   OLED_SDA_PIN                  GPIO_PIN_7
  12. #define   OLED_SDA_ON()                 HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SDA_PIN, GPIO_PIN_SET)
  13. #define   OLED_SDA_OFF()                HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SDA_PIN, GPIO_PIN_RESET)
  14. #define   OLED_SDA_TOGGLE()             HAL_GPIO_TogglePin(GPIOx_OLED_PORT, OLED_SDA_PIN)
  15. ///

  16. void WriteCmd(void);
  17. void OLED_WR_CMD(uint8_t cmd);
  18. void OLED_WR_DATA(uint8_t data);
  19. void OLED_Init(void);
  20. void OLED_Clear(void);
  21. void OLED_Display_On(void);
  22. void OLED_Display_Off(void);
  23. void OLED_Set_Pos(uint8_t x, uint8_t y);
  24. void OLED_On(void);
  25. void OLED_ShowNum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2);
  26. void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size);
  27. void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size);
  28. void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);

  29. #endif
复制代码

oledfont.h
  1. #ifndef __OLEDFONT_H__
  2. #define __OLEDFONT_H__

  3. #include "stm32f0xx_hal.h"

  4. //8*6 ASCII字符集点阵
  5. const unsigned char F6x8[][6] =               
  6. {
  7.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
  8.         0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
  9.         0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
  10.         0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
  11.         0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
  12.         0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
  13.         0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
  14.         0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
  15.         0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
  16.         0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
  17.         0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
  18.         0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
  19.         0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
  20.         0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
  21.         0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
  22.         0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
  23.         0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
  24.         0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
  25.         0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
  26.         0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
  27.         0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
  28.         0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
  29.         0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
  30.         0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
  31.         0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
  32.         0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
  33.         0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
  34.         0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
  35.         0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
  36.         0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
  37.         0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
  38.         0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
  39.         0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
  40.         0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
  41.         0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
  42.         0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
  43.         0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
  44.         0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
  45.         0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
  46.         0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
  47.         0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
  48.         0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
  49.         0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
  50.         0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
  51.         0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
  52.         0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
  53.         0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
  54.         0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
  55.         0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
  56.         0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
  57.         0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
  58.         0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
  59.         0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
  60.         0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
  61.         0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
  62.         0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
  63.         0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
  64.         0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
  65.         0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
  66.         0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
  67.         0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
  68.         0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
  69.         0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
  70.         0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
  71.         0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
  72.         0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
  73.         0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
  74.         0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
  75.         0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
  76.         0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
  77.         0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
  78.         0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
  79.         0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
  80.         0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
  81.         0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
  82.         0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
  83.         0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
  84.         0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
  85.         0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
  86.         0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
  87.         0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
  88.         0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
  89.         0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
  90.         0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
  91.         0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
  92.         0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
  93.         0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
  94.         0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
  95.         0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
  96.         0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
  97.         0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
  98.         0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
  99. };

  100. //16*8 ASCII字符集点阵
  101. const unsigned char F8X16[]=
  102. {
  103. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//sp /0
  104. 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!  /1
  105. 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"  /2
  106. 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//#  /3
  107. 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//nbsp; /4
  108. 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//%  /5
  109. 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//&  /6
  110. 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'  /7
  111. 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//(  /8
  112. 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//)  /9
  113. 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//*  /10
  114. 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+  /11
  115. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//,  /12
  116. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-  /13
  117. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.  /14
  118. 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,///  /15
  119. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0  /16
  120. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1  /17
  121. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2  /18
  122. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3  /19
  123. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4  /20
  124. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5  /21
  125. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6  /22
  126. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7  /23
  127. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8  /24
  128. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9  /25
  129. 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:  /26
  130. 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//;  /27
  131. 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//<  /28
  132. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//=  /29
  133. 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//>  /30
  134. 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//?  /31
  135. 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@  /32
  136. 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A  /33
  137. 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B  /34
  138. 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C  /35
  139. 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D  /36
  140. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E  /37
  141. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F  /38
  142. 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G  /39
  143. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H  /40
  144. 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I  /41
  145. 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J  /42
  146. 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K  /43
  147. 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L  /44
  148. 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M  /45
  149. 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N  /46
  150. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O  /47
  151. 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P  /48
  152. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q  /49
  153. 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R  /50
  154. 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S  /51
  155. 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T  /52
  156. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U  /53
  157. 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V  /54
  158. 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W  /55
  159. 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X  /56
  160. 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y  /57
  161. 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z  /58
  162. 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[  /59
  163. 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\  /60
  164. 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//]  /61
  165. 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^  /62
  166. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_  /63
  167. 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`  /64
  168. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a  /65
  169. 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b  /66
  170. 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c  /67
  171. 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d  /68
  172. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e  /69
  173. 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f  /70
  174. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g  /71
  175. 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h  /72
  176. 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i  /73
  177. 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j  /74
  178. 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k  /75
  179. 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l  /76
  180. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m  /77
  181. 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n  /78
  182. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o  /79
  183. 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p  /80
  184. 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q  /81
  185. 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r  /82
  186. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s  /83
  187. 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t  /84
  188. 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u  /85
  189. 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v  /86
  190. 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w  /87
  191. 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x  /88
  192. 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y  /89
  193. 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z  /90
  194. 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{  /91
  195. 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//}  /92
  196. 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00};//|  /93

  197. //部分汉字
  198. const unsigned char Hzk[][32]=
  199. {
  200. //记(0) 贴(1) 年(2) 月(3) 日(4)

  201. {0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00},
  202. {0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*"记",0*/

  203. {0x00,0xFE,0x02,0xFA,0x02,0xFE,0x00,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00},
  204. {0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00},/*"贴",1*/

  205. {0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00},
  206. {0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"年",2*/

  207. {0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},
  208. {0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*"月",3*/

  209. {0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00},
  210. {0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*"日",4*/

  211. };
  212. #endif
复制代码

写好的oled.c放入Src文件夹内,oled.h和oledfont.h放入Inc文件夹内,之后需要在keil中加入这三个文件。

2020121418231020.png

取模
由于单片机的flash比较吃紧,所以要显示汉字需要先进行取模。

取模软件设置
20201214182732914.png
设置完之后就可以取自己想要汉字的编码,输入完毕点击生成字模即可。

20201214183008660.png

将取得的编码放入oledfont.h的Hzk数组中即可。

20201214183318836.png

主程序
main.c中。

  1.   /* USER CODE BEGIN 2 */
  2.         OLED_Init();
  3.         OLED_Clear(); //清屏
  4.         OLED_ShowCHinese(0,0,0);//记
  5.         OLED_ShowCHinese(16,0,1);//贴
  6.         
  7.         
  8.         OLED_ShowNum(0,2,2020,4,16);//2020
  9.         OLED_ShowCHinese(32,2,2);//年
  10.         OLED_ShowNum(48,2,12,2,16);//12
  11.         OLED_ShowCHinese(64,2,3);//月
  12.         OLED_ShowNum(80,2,15,2,16);//15
  13.         OLED_ShowCHinese(96,2,4);//日

  14.         OLED_ShowString(0,6,"Hello World!",12);

  15.         
  16.   /* USER CODE END 2 */
复制代码

演示效果

[V@_HSD)QN61YWNE60B6G2N.png


收藏 评论0 发布时间:2022-4-30 21:36

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版