当前位置:   article > 正文

STM32F103C8T6最小核心板+DHT11显示在0.96寸OLED的简单项目及代码分享_stm32c8t6 oled例程

stm32c8t6 oled例程

1,本期使用的硬件有如下三个

STM32F103C8T6最小核心板,也就是哔哩哔哩up主江协科技用的那一款

DHT11温湿度传感器三针脚版本

0.96寸OLED四针脚版本

2,本期硬件的注意事项及发现的问题

STM32F103C8T6:最小核心板有很多拆机片,买来之后建议先用mico usb进行供电,然后用万用表测试一下5v 和3.3v输出,博主在第一次实验时OLED和DHT11经常出现乱码,甚至闪烁,后来才发现是单片机3.3v输出仅仅是2.2v,甚至继电器都没办法正常吸合了,百度查下居然是单片机的问题,这一点我是真的无语了,立马找商家退货了。

0.96寸OLED:这个也是有很多不同的版本的一定注意正负极,而且在.c的代码修改上一定要看看GPIO的参数,代码上总共有四个地方需要改,才能成功修改单片机和显示屏的连线。

3,代码部分

main.c主函数部分

有一些代码被注释掉了,大家看注释应该能看懂的,

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "led.h"
  4. #include "jdq.h"
  5. #include "stm32f10x.h" // Device header
  6. #include "oled.h"
  7. #include "OLED.h"
  8. #include "DHT11.h"
  9. #include "key.h"
  10. /*
  11. 工作日志
  12. ======================================
  13. 目前这个版本OLED可以正常显示,继电器也可以正常工作,修改代码之前一定不要修改其他的数据
  14. DHT11
  15. // OLED_ShowNum(1,1,2,1); //显示屏测试
  16. // JDQ1_on();
  17. // LED1_ON();
  18. // Delay_ms(2000);
  19. // JDQ2_off();
  20. // LED1_OFF();
  21. // Delay_ms(2000);
  22. // OLED_ShowString(1, 8, ".");
  23. // OLED_ShowNum(1, 9, DHT11_Data.temp_deci, 1);
  24. // OLED_ShowString(2, 12, ".");
  25. // OLED_ShowNum(2, 13, DHT11_Data.humi_deci, 2);
  26. 四个按键分别连接在P9 -8 -7 6 -5 分别对应四个按键
  27. key1-PB8
  28. key2-PB7
  29. key3-PB6
  30. key4-PB5
  31. 目前PB9也是空闲的
  32. LED连接的PB9
  33. */
  34. int main(void)
  35. {
  36. //延时函数初始化
  37. LED_Init(); //初始化与LED连接的硬件接口
  38. JDQ_init();
  39. OLED_Init();
  40. Key_Init();
  41. OLED_Init(); //显示器初始化
  42. DHT11_GPIO_Config(); //传感器gpioa
  43. OLED_ShowChinese(1,1,"温度"); //第七个是空空白
  44. OLED_ShowChinese(2,1,"湿度");
  45. // OLED_ShowString(1,7,"℃");
  46. // OLED_ShowString(2,7,"%");符号没法正常显示
  47. OLED_ShowString(1,9,"|");
  48. OLED_ShowString(2,9,"|");
  49. OLED_ShowString(1,7,".");
  50. OLED_ShowString(2,7,".");
  51. while(1)
  52. {
  53. OLED_ShowNum(1, 5, DHT11_Data.temp_int, 2); //温度
  54. OLED_ShowNum(1, 8, DHT11_Data.temp_deci, 1); //目前并不需要温度的小数部分,第六个是一个小数点
  55. OLED_ShowNum(1, 12, temphingt, 2); //温度阈值
  56. OLED_ShowNum(2, 12, humihingt, 2); // 湿度阈值
  57. OLED_ShowNum(2, 5, DHT11_Data.humi_int, 2); // 湿度
  58. OLED_ShowNum(2, 8, DHT11_Data.humi_deci, 1);
  59. Delay_ms(100);
  60. }
  61. }

DHT11温湿度传感器.c文件

在这个库函数中修改端口需要在.h中改

  1. #include "stm32f10x.h" // Device header
  2. #include "Delay.h"
  3. #include "DHT11.h"
  4. //#define DHT11_Out_Pin GPIO_Pin_8
  5. //#define DHT11_Out_RCC RCC_APB2Periph_GPIOA
  6. //#define DHT11 GPIOA
  7. void DHT11_GPIO_Config(void)
  8. {
  9. GPIO_InitTypeDef GPIO_InitStructure;
  10. RCC_APB2PeriphClockCmd(DHT11_Out_RCC, ENABLE);
  11. GPIO_InitStructure.GPIO_Pin = DHT11_Out_Pin;
  12. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  13. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14. GPIO_Init(DHT11, &GPIO_InitStructure);
  15. GPIO_SetBits(DHT11, DHT11_Out_Pin);
  16. }
  17. static void DHT11_Mode_IPU(void)
  18. {
  19. GPIO_InitTypeDef GPIO_InitStructure;
  20. GPIO_InitStructure.GPIO_Pin = DHT11_Out_Pin;
  21. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
  22. GPIO_Init(DHT11, &GPIO_InitStructure);
  23. }
  24. static void DHT11_Mode_Out_PP(void)
  25. {
  26. GPIO_InitTypeDef GPIO_InitStructure;
  27. GPIO_InitStructure.GPIO_Pin = DHT11_Out_Pin;
  28. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  29. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  30. GPIO_Init(DHT11, &GPIO_InitStructure);
  31. }
  32. static uint8_t Read_Byte(void)
  33. {
  34. uint8_t i, temp=0;
  35. for (i=0; i<8; i++)
  36. {
  37. while (DHT11_DATA_IN() == Bit_RESET);
  38. Delay_us(40);
  39. if (DHT11_DATA_IN() == Bit_SET)
  40. {
  41. while(DHT11_DATA_IN() == Bit_SET);
  42. temp |= (uint8_t)(0x01 << (7 - i));
  43. }
  44. else
  45. {
  46. temp &= (uint8_t) ~ (0x01<<(7-i));
  47. }
  48. }
  49. return temp;
  50. }
  51. uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data)
  52. {
  53. DHT11_Mode_Out_PP();
  54. DHT11_DATA_OUT(LOW);
  55. Delay_ms(18);
  56. DHT11_DATA_OUT(HIGH);
  57. Delay_us(30);
  58. DHT11_Mode_IPU();
  59. if(DHT11_DATA_IN() == Bit_RESET)
  60. {
  61. while(DHT11_DATA_IN() == Bit_RESET);
  62. while(DHT11_DATA_IN() == Bit_SET);
  63. DHT11_Data -> humi_int = Read_Byte();
  64. DHT11_Data -> humi_deci = Read_Byte();
  65. DHT11_Data -> temp_int = Read_Byte();
  66. DHT11_Data -> temp_deci = Read_Byte();
  67. DHT11_Data -> check_sum= Read_Byte();
  68. DHT11_Mode_Out_PP();
  69. DHT11_DATA_OUT(HIGH);
  70. if (DHT11_Data -> check_sum == DHT11_Data -> humi_int + DHT11_Data -> humi_deci + DHT11_Data -> temp_int + DHT11_Data -> temp_deci)
  71. return SUCCESS;
  72. else
  73. return ERROR;
  74. }
  75. else
  76. {
  77. return ERROR;
  78. }
  79. }

DHT11的.h文件

可能对于初学者这个.h文件修改DHT11和核心板的连接口比较困难,不过没关系,大家可以直接复制这个代码发给CHAT -GPT

要将代码中的引脚修改为PA9,您需要进行以下更改:

  1. DHT11_Out_Pin宏定义更改为GPIO_Pin_9,即将GPIO引脚更改为PA9。
  2. DHT11_Out_RCC宏定义更改为RCC_APB2Periph_GPIOA,确保正确设置GPIOA外设时钟使能。
  3. DHT11宏定义更改为GPIOA,以便与所选的GPIO端口一致。

完成这些更改后,重新编译和上传代码,以确保代码正确使用了新的引脚PA9。请注意,在修改硬件连接之前,仔细检查电路图和硬件规格,确保将传感器正确连接到所需的GPIO引脚。

  1. #ifndef _DHT11_H
  2. #define __DHT11_H
  3. #define DHT11_Out_Pin GPIO_Pin_8 //改这个数和下面这个GPIOA即可,两个都得改,可以测试测试
  4. #define DHT11_Out_RCC RCC_APB2Periph_GPIOA
  5. #define DHT11 GPIOA
  6. #define HIGH 1
  7. #define LOW 0
  8. #define DHT11_DATA_OUT(a) if (a) \
  9. GPIO_SetBits(DHT11, DHT11_Out_Pin);\
  10. else \
  11. GPIO_ResetBits(DHT11, DHT11_Out_Pin)
  12. #define DHT11_DATA_IN() GPIO_ReadInputDataBit(DHT11, DHT11_Out_Pin)
  13. typedef struct
  14. {
  15. uint8_t humi_int; //湿度的整数部分
  16. uint8_t humi_deci; //湿度的小数部分
  17. uint8_t temp_int; //温度的整数部分
  18. uint8_t temp_deci; //温度的小数部分
  19. uint8_t check_sum; //校验和
  20. }DHT11_Data_TypeDef;
  21. void DHT11_GPIO_Config(void);
  22. static void DHT11_Mode_IPU(void);
  23. static void DHT11_Mode_Out_PP(void);
  24. uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data);
  25. static uint8_t Read_Byte(void);
  26. #endif

后续的OLED显示函数我就不放了,大家可以直接在我分享的连接里面去下载。就是用的江科大的,汉字的取模我后续还会再发一下,大家也可以去别人博主那里找找看看。

鸣谢:OLED显示屏库函数的提供者江协科技(原名:江科大自动化协)我目前的课程也都是从他那里学习的,DHT11库函数也是从网络上找的,感谢,希望我今天分享的资源对大家有所帮助。

资源连接(永久有效):阿里云盘分享icon-default.png?t=N7T8https://www.aliyundrive.com/s/CLyerqN1etV

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号