本系统是基于STM32F1系列的
电路原理图如下:
完整源码在下面附件
源码.7z
(277.75 KB, 售价: 1 E币)
部分源码
- #include "main.h"
- #include "usart.h"
- #include "stdio.h"
- #include "lcd.h"
- #include "GUI.h"
- #include "tu.h"
- #include "adc.h"
- #include "dht11.h"
- void BSP_Init(void)
- {
- ADC_Config();
- LED_Config();
- BEEP_Config();
-
- Usart1_Config(9600);
- LCD_Init();
- Paint_Bmp(20,10,64,64,gImage_tu);
- Show_Str(30,40,BRRED,RED,"环境传感器",16,11);
- LCD_Clear(WHITE);
-
-
-
- }
- #define TASK_PRIO 4 //设置优先级
- #define TASK_STK_SIZE 128 //堆栈空间大小
- OS_STK taskstk[TASK_STK_SIZE]; //定义堆栈空间
- void TASK_START(void *pdata);
- //#define LED_PRIO 9 //设置优先级
- //#define LED_STK_SIZE 64 //堆栈空间大小
- //OS_STK ledstk[LED_STK_SIZE]; //定义堆栈空间
- //void LED_TASK(void *pdata);
- //#define LED_PRIO1 8 //设置优先级
- //#define LED1_STK_SIZE 64 //堆栈空间大小
- //OS_STK led1stk[LED1_STK_SIZE]; //定义堆栈空间
- //void LED_TASK1(void *pdata);
- //#define USART_PRIO 7 //设置优先级
- //#define USART_STK_SIZE 64 //堆栈空间大小
- //OS_STK usartstk[USART_STK_SIZE]; //定义堆栈空间
- //void USART_TASK(void *pdata);
- #define ADC_PRIO 5 //设置优先级
- #define ADC_STK_SIZE 128 //堆栈空间大小
- OS_STK adcstk[ADC_STK_SIZE]; //定义堆栈空间
- void ADC_TASK(void *pdata);
- #define DHT11_PRIO 6 //设置优先级
- #define DHT11_STK_SIZE 128 //堆栈空间大小
- OS_STK dht11stk[ADC_STK_SIZE]; //定义堆栈空间
- void DHT11_TASK(void *pdata);
- /**
- * @brief Main program.
- * @param None
- * @retval None
- */
- int main(void)
- {
- BSP_Init();
- //while(1)
- {
- // BSP_Init();
- OSInit(); //初始化ucos-ii
- //创建任务
- OSTaskCreate(TASK_START,NULL,&taskstk[TASK_STK_SIZE-1],TASK_PRIO);
- OS_CPU_SysTickInit();
- OSStart(); //启动多任务环境
- }
- }
- void TASK_START(void *pdata)
- {
- pdata = pdata;
- OS_CPU_SR cpu_sr;
- while(1)
- {
- OS_ENTER_CRITICAL(); //进入临界段 --关中断
- // OSTaskCreate(LED_TASK,NULL,&ledstk[LED_STK_SIZE-1],LED_PRIO);
- //OSTaskCreate(USART_TASK,NULL,&usartstk[USART_STK_SIZE-1],USART_PRIO);
- OSTaskCreate(ADC_TASK,NULL,&adcstk[ADC_STK_SIZE-1],ADC_PRIO);
- // OSTaskCreate(LED_TASK1,NULL,&led1stk[LED1_STK_SIZE-1],LED_PRIO1);
- OSTaskCreate(DHT11_TASK,NULL,&dht11stk[DHT11_STK_SIZE-1],DHT11_PRIO);
- OS_EXIT_CRITICAL(); //退出临界段 --开中断
- OSTaskSuspend(TASK_PRIO);
- }
- }
- void LED_TASK(void *pdata)
- {
- pdata = pdata; //防止编译器报警告
- while(1)
- {
- LED1_Toggle();
- OSTimeDlyHMSM(0,0,0,500);
- }
- }
- void LED_TASK1(void *pdata)
- {
- pdata = pdata; //防止编译器报警告
- while(1)
- {
- LED2_Toggle();
- OSTimeDlyHMSM(0,0,0,500);
- }
- }
- void ADC_TASK(void *pdata)
- {
- u16 ADC_Val;
- pdata=pdata;
- char displsyData[20]={0};
- while(1)
- {
- ADC_Val=ADC_GetValue();
- printf("ADC_Value=%d\r\n",ADC_GetValue());
- sprintf(displsyData,"LCD_ADCValue=%d",ADC_Val);
- Show_Str(5,20,BRRED,YELLOW,(u8 *)displsyData,16,11);
- OSTimeDlyHMSM(0,0,0,500);
- }
- }
- void DHT11_TASK(void *pdata)
- {
- pdata=pdata;
- u8 temp,hum;
- char displsyData[20]={0};
- char displsyData1[20]={0};
- while(1)
- {
- DHT11_ReadTAndH(&temp,&hum);
- printf("temp = %d\r\n,hum=%d\r\n",temp,hum);
- if(temp>10) BEEP(1);
- sprintf(displsyData,"Temp=%d",temp);
-
- Show_Str(5,50,BRRED,YELLOW,(u8 *)displsyData,16,11);
- sprintf(displsyData1,"Hum=%d",hum);
- Show_Str(5,80,BRRED,YELLOW,(u8 *)displsyData1,16,11);
- OSTimeDlyHMSM(0,0,2,0);
-
-
- }
-
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|