[MM32硬件] STM32-通行闸机1(HAL库)

[复制链接]
904|34
 楼主| 梅花香自123 发表于 2023-6-29 20:22 | 显示全部楼层
其次在Core中的Src文件夹中创建OLED.c
20187649d7763c297d.png
 楼主| 梅花香自123 发表于 2023-6-29 20:22 | 显示全部楼层
完成后,我们打开MDK-ARM文件,打开项目工程

53462649d777687850.png
 楼主| 梅花香自123 发表于 2023-6-29 20:22 | 显示全部楼层
 楼主| 梅花香自123 发表于 2023-6-29 20:23 | 显示全部楼层
由于代码过于多,这里就直给到大家,将下面的代码添加到OLED.c
10728649d77aab0b25.png
 楼主| 梅花香自123 发表于 2023-6-29 20:23 | 显示全部楼层
OLED.c
  1. #include "stm32f1xx_hal.h"
  2. #include "OLED.h"
  3. #include "OLED_Font.h"
  4. #include "gpio.h"


  5. /*引脚配置*/
  6. #define OLED_W_SCL(x)                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, (GPIO_PinState)(x))
  7. #define OLED_W_SDA(x)                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, (GPIO_PinState)(x))

  8. /*引脚初始化*/
  9. void OLED_I2C_Init(void)
  10. {
  11.     MX_GPIO_Init();
  12. }

  13. /**
  14.   * [url=home.php?mod=space&uid=247401]@brief[/url]  I2C开始
  15.   * @param  无
  16.   * @retval 无
  17.   */
  18. void OLED_I2C_Start(void)
  19. {
  20.         OLED_W_SDA(1);
  21.         OLED_W_SCL(1);
  22.         OLED_W_SDA(0);
  23.         OLED_W_SCL(0);
  24. }

  25. /**
  26.   * @brief  I2C停止
  27.   * @param  无
  28.   * @retval 无
  29.   */
  30. void OLED_I2C_Stop(void)
  31. {
  32.         OLED_W_SDA(0);
  33.         OLED_W_SCL(1);
  34.         OLED_W_SDA(1);
  35. }

  36. /**
  37.   * @brief  I2C发送一个字节
  38.   * @param  Byte 要发送的一个字节
  39.   * @retval 无
  40.   */
  41. void OLED_I2C_SendByte(uint8_t Byte)
  42. {
  43.         uint8_t i;
  44.         for (i = 0; i < 8; i++)
  45.         {
  46.                 OLED_W_SDA(Byte & (0x80 >> i));
  47.                 OLED_W_SCL(1);
  48.                 OLED_W_SCL(0);
  49.         }
  50.         OLED_W_SCL(1);        //额外的一个时钟,不处理应答信号
  51.         OLED_W_SCL(0);
  52. }

  53. /**
  54.   * @brief  OLED写命令
  55.   * @param  Command 要写入的命令
  56.   * @retval 无
  57.   */
  58. void OLED_WriteCommand(uint8_t Command)
  59. {
  60.         OLED_I2C_Start();
  61.         OLED_I2C_SendByte(0x78);                //从机地址
  62.         OLED_I2C_SendByte(0x00);                //写命令
  63.         OLED_I2C_SendByte(Command);
  64.         OLED_I2C_Stop();
  65. }

  66. /**
  67.   * @brief  OLED写数据
  68.   * @param  Data 要写入的数据
  69.   * @retval 无
  70.   */
  71. void OLED_WriteData(uint8_t Data)
  72. {
  73.         OLED_I2C_Start();
  74.         OLED_I2C_SendByte(0x78);                //从机地址
  75.         OLED_I2C_SendByte(0x40);                //写数据
  76.         OLED_I2C_SendByte(Data);
  77.         OLED_I2C_Stop();
  78. }

  79. /**
  80.   * @brief  OLED设置光标位置
  81.   * @param  Y 以左上角为原点,向下方向的坐标,范围:0~7
  82.   * @param  X 以左上角为原点,向右方向的坐标,范围:0~127
  83.   * @retval 无
  84.   */
  85. void OLED_SetCursor(uint8_t Y, uint8_t X)
  86. {
  87.         OLED_WriteCommand(0xB0 | Y);                                        //设置Y位置
  88.         OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));        //设置X位置低4位
  89.         OLED_WriteCommand(0x00 | (X & 0x0F));                        //设置X位置高4位
  90. }

  91. /**
  92.   * @brief  OLED清屏
  93.   * @param  无
  94.   * @retval 无
  95.   */
  96. void OLED_Clear(void)
  97. {  
  98.         uint8_t i, j;
  99.         for (j = 0; j < 8; j++)
  100.         {
  101.                 OLED_SetCursor(j, 0);
  102.                 for(i = 0; i < 128; i++)
  103.                 {
  104.                         OLED_WriteData(0x00);
  105.                 }
  106.         }
  107. }
  108. /**
  109.   * @brief  OLED指定行清除
  110.   * @param  行  
  111.   * @retval 无
  112.   */
  113. void OLED_Clear_hang(uint8_t hang)
  114. {  
  115.         uint8_t i, j;
  116.         for (j = hang; j < 8; j++)
  117.         {
  118.                 OLED_SetCursor(j, 0);
  119.                 for(i = 0; i < 128; i++)
  120.                 {
  121.                         OLED_WriteData(0x00);
  122.                 }
  123.         }
  124. }

  125. /**
  126.   * @brief  OLED显示一个字符
  127.   * @param  Line 行位置,范围:1~4
  128.   * @param  Column 列位置,范围:1~16
  129.   * @param  Char 要显示的一个字符,范围:ASCII可见字符
  130.   * @retval 无
  131.   */
  132. void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char)
  133. {             
  134.         uint8_t i;
  135.         OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8);                //设置光标位置在上半部分
  136.         for (i = 0; i < 8; i++)
  137.         {
  138.                 OLED_WriteData(OLED_F8x16[Char - ' '][i]);                        //显示上半部分内容
  139.         }
  140.         OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8);        //设置光标位置在下半部分
  141.         for (i = 0; i < 8; i++)
  142.         {
  143.                 OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]);                //显示下半部分内容
  144.         }
  145. }




  146. /**
  147.   * @brief  OLED显示字符串
  148.   * @param  Line 起始行位置,范围:1~4
  149.   * @param  Column 起始列位置,范围:1~16
  150.   * @param  String 要显示的字符串,范围:ASCII可见字符
  151.   * @retval 无
  152.   */
  153. void OLED_ShowString(uint8_t Line, uint8_t Column, char *String)
  154. {
  155.         uint8_t i;
  156.         for (i = 0; String[i] != '\0'; i++)
  157.         {
  158.                 OLED_ShowChar(Line, Column + i, String[i]);
  159.         }
  160. }

  161. /**
  162.   * @brief  OLED次方函数
  163.   * @retval 返回值等于X的Y次方
  164.   */
  165. uint32_t OLED_Pow(uint32_t X, uint32_t Y)
  166. {
  167.         uint32_t Result = 1;
  168.         while (Y--)
  169.         {
  170.                 Result *= X;
  171.         }
  172.         return Result;
  173. }

  174. /**
  175.   * @brief  OLED显示数字(十进制,正数)
  176.   * @param  Line 起始行位置,范围:1~4
  177.   * @param  Column 起始列位置,范围:1~16
  178.   * @param  Number 要显示的数字,范围:0~4294967295
  179.   * @param  Length 要显示数字的长度,范围:1~10
  180.   * @retval 无
  181.   */
  182. void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
  183. {
  184.         uint8_t i;
  185.         for (i = 0; i < Length; i++)                                                       
  186.         {
  187.                 OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0');
  188.         }
  189. }

  190. /**
  191.   * @brief  OLED显示数字(十进制,带符号数)
  192.   * @param  Line 起始行位置,范围:1~4
  193.   * @param  Column 起始列位置,范围:1~16
  194.   * @param  Number 要显示的数字,范围:-2147483648~2147483647
  195.   * @param  Length 要显示数字的长度,范围:1~10
  196.   * @retval 无
  197.   */
  198. void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length)
  199. {
  200.         uint8_t i;
  201.         uint32_t Number1;
  202.         if (Number >= 0)
  203.         {
  204.                 OLED_ShowChar(Line, Column, '+');
  205.                 Number1 = Number;
  206.         }
  207.         else
  208.         {
  209.                 OLED_ShowChar(Line, Column, '-');
  210.                 Number1 = -Number;
  211.         }
  212.         for (i = 0; i < Length; i++)                                                       
  213.         {
  214.                 OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0');
  215.         }
  216. }

  217. /**
  218.   * @brief  OLED显示数字(十六进制,正数)
  219.   * @param  Line 起始行位置,范围:1~4
  220.   * @param  Column 起始列位置,范围:1~16
  221.   * @param  Number 要显示的数字,范围:0~0xFFFFFFFF
  222.   * @param  Length 要显示数字的长度,范围:1~8
  223.   * @retval 无
  224.   */
  225. void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
  226. {
  227.         uint8_t i, SingleNumber;
  228.         for (i = 0; i < Length; i++)                                                       
  229.         {
  230.                 SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16;
  231.                 if (SingleNumber < 10)
  232.                 {
  233.                         OLED_ShowChar(Line, Column + i, SingleNumber + '0');
  234.                 }
  235.                 else
  236.                 {
  237.                         OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A');
  238.                 }
  239.         }
  240. }

  241. /**
  242.   * @brief  OLED显示数字(二进制,正数)
  243.   * @param  Line 起始行位置,范围:1~4
  244.   * @param  Column 起始列位置,范围:1~16
  245.   * @param  Number 要显示的数字,范围:0~1111 1111 1111 1111
  246.   * @param  Length 要显示数字的长度,范围:1~16
  247.   * @retval 无
  248.   */
  249. void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
  250. {
  251.         uint8_t i;
  252.         for (i = 0; i < Length; i++)                                                       
  253.         {
  254.                 OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0');
  255.         }
  256. }

  257. /**********************************
  258. 显示一个文字
  259. 输入数据:
  260. Line----行
  261. Column----列
  262. no----字库数组文字对应的位置
  263. **********************************/
  264. void OLED_ShowCHinese(uint8_t Line,uint8_t Column,uint8_t no)
  265. {                                  
  266.         uint8_t t,adder=0;
  267.         OLED_SetCursor(Line,Column);       
  268.     for(t=0;t<16;t++)
  269.                 {
  270.                                 OLED_WriteData(Hzk[2*no][t]);
  271.                                 adder+=1;
  272.      }       
  273.                 OLED_SetCursor(Line+1,Column);       
  274.     for(t=0;t<16;t++)
  275.                         {       
  276.                                 OLED_WriteData(Hzk[2*no+1][t]);
  277.                                 adder+=1;
  278.       }                                       
  279. }

  280. /**
  281.   * @brief  OLED初始化
  282.   * @param  无
  283.   * @retval 无
  284.   */
  285. void OLED_Init(void)
  286. {
  287.         uint32_t i, j;
  288.        
  289.         for (i = 0; i < 1000; i++)                        //上电延时
  290.         {
  291.                 for (j = 0; j < 1000; j++);
  292.         }
  293.        
  294.         OLED_I2C_Init();                        //端口初始化
  295.        
  296.         OLED_WriteCommand(0xAE);        //关闭显示
  297.        
  298.         OLED_WriteCommand(0xD5);        //设置显示时钟分频比/振荡器频率
  299.         OLED_WriteCommand(0x80);
  300.        
  301.         OLED_WriteCommand(0xA8);        //设置多路复用率
  302.         OLED_WriteCommand(0x3F);
  303.        
  304.         OLED_WriteCommand(0xD3);        //设置显示偏移
  305.         OLED_WriteCommand(0x00);
  306.        
  307.         OLED_WriteCommand(0x40);        //设置显示开始行
  308.        
  309.         OLED_WriteCommand(0xA1);        //设置左右方向,0xA1正常 0xA0左右反置
  310.        
  311.         OLED_WriteCommand(0xC8);        //设置上下方向,0xC8正常 0xC0上下反置

  312.         OLED_WriteCommand(0xDA);        //设置COM引脚硬件配置
  313.         OLED_WriteCommand(0x12);
  314.        
  315.         OLED_WriteCommand(0x81);        //设置对比度控制
  316.         OLED_WriteCommand(0xCF);

  317.         OLED_WriteCommand(0xD9);        //设置预充电周期
  318.         OLED_WriteCommand(0xF1);

  319.         OLED_WriteCommand(0xDB);        //设置VCOMH取消选择级别
  320.         OLED_WriteCommand(0x30);

  321.         OLED_WriteCommand(0xA4);        //设置整个显示打开/关闭

  322.         OLED_WriteCommand(0xA6);        //设置正常/倒转显示

  323.         OLED_WriteCommand(0x8D);        //设置充电泵
  324.         OLED_WriteCommand(0x14);

  325.         OLED_WriteCommand(0xAF);        //开启显示
  326.                
  327.         OLED_Clear();                                //OLED清屏
  328. }
 楼主| 梅花香自123 发表于 2023-6-29 20:23 | 显示全部楼层
由于代码过于多,这里就直接给到大家,将下面的代码添加到OLED.h
63986649d77d11e2d2.png
 楼主| 梅花香自123 发表于 2023-6-29 20:23 | 显示全部楼层
OLED.h
  1. #ifndef __OLED_H
  2. #define __OLED_H
  3. #include "stm32f1xx_hal.h"

  4. //初始化OLED对应的GPIO
  5. void OLED_Init(void);
  6. //清屏
  7. void OLED_Clear(void);
  8. //显示一个字符
  9. void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);
  10. //显示一个字符串
  11. void OLED_ShowString(uint8_t Line, uint8_t Column, char *String);
  12. //显示数字(十进制,正数)
  13. void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
  14. //显示数字(十进制,带符号数)
  15. void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);
  16. //显示数字(十六进制,正数)
  17. void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
  18. //OLED显示数字(二进制,正数)
  19. void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
  20. //显示汉字
  21. void OLED_ShowCHinese(uint8_t Line,uint8_t Column,uint8_t no);
  22. //清除指定的行
  23. void OLED_Clear_hang(uint8_t hang);

  24. #endif

 楼主| 梅花香自123 发表于 2023-6-29 20:24 | 显示全部楼层
由于代码过于多,这里就直接给到大家,将下面的代码添加到OLED_Font.h

(这个是OLED所需的字模,对于汉字字模,这里我只给出了这个项目所需的汉字字模)

97363649d77ef52ca4.png
 楼主| 梅花香自123 发表于 2023-6-29 20:24 | 显示全部楼层
如果想绘制其他汉字的字模,软件可以在这里下载

链接:https://pan.baidu.com/s/19yyzMb9Os78AUcJ-afIXrQ

提取码:1234
 楼主| 梅花香自123 发表于 2023-6-29 20:24 | 显示全部楼层
汉字取模设置
45062649d78051241e.png
 楼主| 梅花香自123 发表于 2023-6-29 20:24 | 显示全部楼层
OLED_Font.c
  1. #ifndef __OLED_FONT_H
  2. #define __OLED_FONT_H

  3. #include "stm32f1xx_hal.h"

  4. /*OLED字模库,宽8像素,高16像素*/
  5. const uint8_t OLED_F8x16[][16]=
  6. {
  7.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  8.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//  0
  9.        
  10.         0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,
  11.         0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  12.        
  13.         0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,
  14.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  15.        
  16.         0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,
  17.         0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  18.        
  19.         0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,
  20.         0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  21.        
  22.         0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,
  23.         0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  24.        
  25.         0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,
  26.         0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  27.        
  28.         0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,
  29.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  30.        
  31.         0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,
  32.         0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  33.        
  34.         0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
  35.         0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  36.        
  37.         0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
  38.         0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  39.        
  40.         0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,
  41.         0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  42.        
  43.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  44.         0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  45.        
  46.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47.         0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  48.        
  49.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  50.         0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  51.        
  52.         0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,
  53.         0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  54.        
  55.         0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
  56.         0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  57.        
  58.         0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
  59.         0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  60.        
  61.         0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
  62.         0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  63.        
  64.         0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
  65.         0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  66.        
  67.         0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
  68.         0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  69.        
  70.         0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
  71.         0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  72.        
  73.         0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
  74.         0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  75.        
  76.         0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
  77.         0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  78.        
  79.         0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
  80.         0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  81.        
  82.         0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
  83.         0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  84.        
  85.         0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
  86.         0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  87.        
  88.         0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
  89.         0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  90.        
  91.         0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,
  92.         0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  93.        
  94.         0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  95.         0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  96.        
  97.         0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,
  98.         0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  99.        
  100.         0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,
  101.         0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  102.        
  103.         0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,
  104.         0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//[url=home.php?mod=space&uid=72445]@[/url] 32
  105.        
  106.         0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,
  107.         0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  108.        
  109.         0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,
  110.         0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  111.        
  112.         0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,
  113.         0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  114.        
  115.         0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,
  116.         0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  117.        
  118.         0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
  119.         0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  120.        
  121.         0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
  122.         0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  123.        
  124.         0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,
  125.         0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  126.        
  127.         0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
  128.         0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  129.        
  130.         0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,
  131.         0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  132.        
  133.         0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,
  134.         0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  135.        
  136.         0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,
  137.         0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  138.        
  139.         0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,
  140.         0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  141.        
  142.         0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,
  143.         0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  144.        
  145.         0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,
  146.         0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  147.        
  148.         0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
  149.         0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  150.        
  151.         0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,
  152.         0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  153.        
  154.         0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
  155.         0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  156.        
  157.         0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,
  158.         0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  159.        
  160.         0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,
  161.         0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  162.        
  163.         0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,
  164.         0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  165.        
  166.         0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
  167.         0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  168.        
  169.         0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
  170.         0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  171.        
  172.         0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,
  173.         0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  174.        
  175.         0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
  176.         0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  177.        
  178.         0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,
  179.         0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  180.        
  181.         0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,
  182.         0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  183.        
  184.         0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
  185.         0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  186.        
  187.         0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,
  188.         0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  189.        
  190.         0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
  191.         0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  192.        
  193.         0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,
  194.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  195.        
  196.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  197.         0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  198.        
  199.         0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,
  200.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  201.        
  202.         0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
  203.         0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  204.        
  205.         0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,
  206.         0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  207.        
  208.         0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
  209.         0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  210.        
  211.         0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,
  212.         0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  213.        
  214.         0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
  215.         0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  216.        
  217.         0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,
  218.         0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  219.        
  220.         0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
  221.         0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  222.        
  223.         0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,
  224.         0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  225.        
  226.         0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,
  227.         0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  228.        
  229.         0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,
  230.         0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  231.        
  232.         0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,
  233.         0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  234.        
  235.         0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,
  236.         0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  237.        
  238.         0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  239.         0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  240.        
  241.         0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,
  242.         0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  243.        
  244.         0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
  245.         0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  246.        
  247.         0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,
  248.         0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  249.        
  250.         0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,
  251.         0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  252.        
  253.         0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
  254.         0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  255.        
  256.         0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
  257.         0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  258.        
  259.         0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,
  260.         0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  261.        
  262.         0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,
  263.         0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  264.        
  265.         0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
  266.         0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  267.        
  268.         0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,
  269.         0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  270.        
  271.         0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
  272.         0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  273.        
  274.         0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
  275.         0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  276.        
  277.         0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  278.         0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  279.        
  280.         0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,
  281.         0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  282.        
  283.         0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
  284.         0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  285.        
  286.         0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,
  287.         0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  288.        
  289.         0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,
  290.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
  291. };

  292. //汉字
  293. char Hzk[][32]={


  294. {0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x42,0xA2,0x9E,0x82,0xA2,0xC2,0xBE,0x00,0x00},
  295. {0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40,0x4F,0x48,0x48,0x48,0x48,0x4F,0x40,0x00},/*"超",0*/
  296. {0x04,0x14,0xD4,0x54,0x54,0x54,0x54,0xDF,0x54,0x54,0x54,0x54,0xD4,0x14,0x04,0x00},
  297. {0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x03,0x00,0x00,0x00},/*"声",1*/
  298. {0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00},
  299. {0x04,0x04,0x7C,0x03,0x80,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"波",2*/
  300. {0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  301. {0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x00},/*"人",3*/
  302. {0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00},
  303. {0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00},/*"数",4*/
  304. {0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00},
  305. {0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"开",5*/
  306. {0x00,0xF8,0x01,0x06,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00},
  307. {0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00},/*"门",6*/
  308. {0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00},
  309. {0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00},/*"关",7*/
  310. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  311. {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",8*/
  312. {0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF0,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  313. {0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x3F,0x3F,0x20,0x20,0x20,0x20,0x00,0x00,0x00},/*"1",9*/
  314. {0x00,0x00,0x30,0x70,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0xD8,0xF0,0x20,0x00,0x00},
  315. {0x00,0x00,0x30,0x30,0x28,0x24,0x24,0x22,0x22,0x21,0x21,0x20,0x30,0x18,0x00,0x00},/*"2",10*/
  316. {0x10,0x10,0x10,0xFF,0x10,0x90,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00},
  317. {0x04,0x44,0x82,0x7F,0x01,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"打",11*/
  318. {0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00},
  319. {0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"开",12*/
  320. {0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00},
  321. {0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00},/*"关",13*/
  322. {0x00,0xF8,0x01,0x22,0x20,0x22,0x22,0xA2,0xFA,0x22,0x22,0x22,0x02,0xFE,0x00,0x00},
  323. {0x00,0xFF,0x00,0x08,0x04,0x02,0x11,0x20,0x1F,0x00,0x00,0x40,0x80,0x7F,0x00,0x00},/*"闭",14*/
  324. {0x40,0x30,0xEF,0x24,0x24,0x80,0xE4,0x9C,0x10,0x54,0x54,0xFF,0x54,0x7C,0x10,0x00},
  325. {0x01,0x01,0x7F,0x21,0x51,0x26,0x18,0x27,0x44,0x45,0x45,0x5F,0x45,0x45,0x44,0x00},/*"键",15*/
  326. {0x00,0x80,0x60,0xF8,0x07,0x04,0xE4,0xA4,0xA4,0xBF,0xA4,0xA4,0xE4,0x04,0x00,0x00},
  327. {0x01,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00},/*"值",16*/
  328. };

  329. #endif

 楼主| 梅花香自123 发表于 2023-6-29 20:25 | 显示全部楼层
在添加过OLED相关代码后,相信大家对添加自定义文件有了了解,现在我们添加自己编写的hw.c,hw.h文件,添加步骤不懂的,参考上述OLED的文件创建
首先在Core中的Inc文件夹中创建hw.h

这里就直接给到大家,将下面的代码添加到hw.h
 楼主| 梅花香自123 发表于 2023-6-29 20:25 | 显示全部楼层
hw.h
  1. #ifndef __HW_H
  2. #define __HW_H

  3. #include "stm32f1xx_hal.h"

  4. extern uint32_t number;

  5. void hw_git();//检测红外模块是否有人经过


  6. #endif /* __HW_H */
 楼主| 梅花香自123 发表于 2023-6-29 20:25 | 显示全部楼层
这里就直接给到大家,将下面的代码添加到****hw.c****
 楼主| 梅花香自123 发表于 2023-6-29 20:25 | 显示全部楼层
hw.c
  1. #include "stm32f1xx_hal.h"
  2. #include "hw.h"
  3. #include "gpio.h"

  4. uint32_t number=0;//计数
  5. void hw_git()
  6. {

  7.     //如果红外改了端口,只需要设置相同别名,即可
  8.     if(HAL_GPIO_ReadPin(hw_GPIO_Port,hw_Pin)==0)//有人经过
  9.     {
  10.             number++;
  11.             while(HAL_GPIO_ReadPin(hw_GPIO_Port,hw_Pin)==0);//等待完全经过
  12.     }
  13. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部