找回密码
 注册

QQ登录

只需一步,快速开始

搜索

基于STM32和ucos系统的室内环境检测源程序

[复制链接]
路漫漫 发表于 2020-6-13 00:20:15 | 显示全部楼层 |阅读模式
本系统是基于STM32F1系列的
电路原理图如下:
162717lt3zwpj3ajoc9wzc.png
完整源码在下面附件
源码.7z (277.75 KB, 售价: 1 E币)

部分源码
  1. #include "main.h"
  2. #include "usart.h"
  3. #include "stdio.h"
  4. #include "lcd.h"
  5. #include "GUI.h"
  6. #include "tu.h"
  7. #include "adc.h"
  8. #include "dht11.h"


  9. void BSP_Init(void)
  10. {
  11.         ADC_Config();


  12.         LED_Config();
  13.         BEEP_Config();
  14.          
  15.         Usart1_Config(9600);
  16.         LCD_Init();
  17.         Paint_Bmp(20,10,64,64,gImage_tu);
  18.         Show_Str(30,40,BRRED,RED,"环境传感器",16,11);
  19.         LCD_Clear(WHITE);
  20.         
  21.         
  22.         
  23. }


  24. #define TASK_PRIO     4          //设置优先级
  25. #define TASK_STK_SIZE   128       //堆栈空间大小
  26. OS_STK  taskstk[TASK_STK_SIZE];       //定义堆栈空间
  27. void TASK_START(void *pdata);

  28. //#define LED_PRIO     9          //设置优先级
  29. //#define LED_STK_SIZE   64       //堆栈空间大小
  30. //OS_STK  ledstk[LED_STK_SIZE];       //定义堆栈空间
  31. //void LED_TASK(void *pdata);

  32. //#define LED_PRIO1     8         //设置优先级
  33. //#define LED1_STK_SIZE   64       //堆栈空间大小
  34. //OS_STK  led1stk[LED1_STK_SIZE];       //定义堆栈空间
  35. //void LED_TASK1(void *pdata);

  36. //#define USART_PRIO     7         //设置优先级
  37. //#define USART_STK_SIZE   64       //堆栈空间大小
  38. //OS_STK  usartstk[USART_STK_SIZE];       //定义堆栈空间
  39. //void USART_TASK(void *pdata);

  40. #define ADC_PRIO     5         //设置优先级
  41. #define ADC_STK_SIZE   128       //堆栈空间大小
  42. OS_STK  adcstk[ADC_STK_SIZE];       //定义堆栈空间
  43. void ADC_TASK(void *pdata);

  44. #define DHT11_PRIO     6         //设置优先级
  45. #define DHT11_STK_SIZE   128       //堆栈空间大小
  46. OS_STK  dht11stk[ADC_STK_SIZE];       //定义堆栈空间
  47. void DHT11_TASK(void *pdata);

  48. /**
  49.   * @brief  Main program.
  50.   * @param  None
  51.   * @retval None
  52.   */
  53. int main(void)
  54. {
  55.         BSP_Init();
  56. //while(1)
  57. {
  58.         // BSP_Init();
  59.         OSInit();   //初始化ucos-ii
  60.         //创建任务
  61.         OSTaskCreate(TASK_START,NULL,&taskstk[TASK_STK_SIZE-1],TASK_PRIO);
  62.         OS_CPU_SysTickInit();
  63.         OSStart(); //启动多任务环境
  64. }
  65. }

  66. void TASK_START(void *pdata)
  67. {
  68.         pdata = pdata;
  69.         OS_CPU_SR cpu_sr;
  70.         while(1)
  71.         {
  72.         OS_ENTER_CRITICAL();  //进入临界段  --关中断
  73. //        OSTaskCreate(LED_TASK,NULL,&ledstk[LED_STK_SIZE-1],LED_PRIO);

  74.         //OSTaskCreate(USART_TASK,NULL,&usartstk[USART_STK_SIZE-1],USART_PRIO);
  75.         OSTaskCreate(ADC_TASK,NULL,&adcstk[ADC_STK_SIZE-1],ADC_PRIO);
  76. //  OSTaskCreate(LED_TASK1,NULL,&led1stk[LED1_STK_SIZE-1],LED_PRIO1);
  77.         OSTaskCreate(DHT11_TASK,NULL,&dht11stk[DHT11_STK_SIZE-1],DHT11_PRIO);

  78.         OS_EXIT_CRITICAL();  //退出临界段  --开中断
  79.         OSTaskSuspend(TASK_PRIO);
  80.         }
  81. }


  82. void LED_TASK(void *pdata)
  83. {
  84.         pdata = pdata; //防止编译器报警告
  85.         while(1)
  86.         {
  87.                 LED1_Toggle();
  88.                 OSTimeDlyHMSM(0,0,0,500);
  89.         }
  90. }
  91. void LED_TASK1(void *pdata)
  92. {
  93.         pdata = pdata; //防止编译器报警告
  94.         while(1)
  95.         {
  96.                 LED2_Toggle();
  97.                 OSTimeDlyHMSM(0,0,0,500);
  98.         }
  99. }

  100. void ADC_TASK(void *pdata)
  101. {
  102.         u16 ADC_Val;
  103.         pdata=pdata;
  104.         char displsyData[20]={0};
  105.         while(1)
  106.         {
  107.                 ADC_Val=ADC_GetValue();
  108.                 printf("ADC_Value=%d\r\n",ADC_GetValue());
  109.                 sprintf(displsyData,"LCD_ADCValue=%d",ADC_Val);
  110.                 Show_Str(5,20,BRRED,YELLOW,(u8 *)displsyData,16,11);
  111.                 OSTimeDlyHMSM(0,0,0,500);
  112.         }
  113. }
  114. void DHT11_TASK(void *pdata)
  115. {
  116.         pdata=pdata;
  117.         u8 temp,hum;
  118.         char displsyData[20]={0};
  119.         char displsyData1[20]={0};
  120.         while(1)
  121.         {
  122.                 DHT11_ReadTAndH(&temp,&hum);
  123.                 printf("temp = %d\r\n,hum=%d\r\n",temp,hum);
  124.                 if(temp>10) BEEP(1);
  125.                 sprintf(displsyData,"Temp=%d",temp);
  126.                
  127.                 Show_Str(5,50,BRRED,YELLOW,(u8 *)displsyData,16,11);
  128.                 sprintf(displsyData1,"Hum=%d",hum);
  129.                 Show_Str(5,80,BRRED,YELLOW,(u8 *)displsyData1,16,11);
  130.                 OSTimeDlyHMSM(0,0,2,0);
  131.                
  132.                
  133.         }
  134.         
  135. }
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-25 22:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表