本系統是基于STM32F1系列的
電路原理圖如下:
162717lt3zwpj3ajoc9wzc.png (79.94 KB)
下載附件
2020-6-13 00:17 上傳
完整源碼在下面附件
源碼.7z
(277.75 KB, 售價: 1 E幣)
2020-6-13 00:18 上傳
點擊文件名下載附件
售價: 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)指出,本站將立即改正。
|