找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3242|回復: 0
收起左側

STM32+UCOSII+DHT11+DS1302源碼

[復制鏈接]
ID:324984 發(fā)表于 2018-5-8 13:51 | 顯示全部樓層 |閱讀模式
    μC/OS-II由Micrium公司提供,是一個可移植、可固化的、可裁剪的、占先式多任務實時內(nèi)核,它適用于多種微處理器,微控制器和數(shù)字處理芯片。
0.jpg

單片機源程序如下:

  1. #include "includes.h"
  2. #include "stdio.h"
  3. #include  "led.h"
  4. #include "pwm.h"
  5. #include "adc.h"
  6. #include "ds1302.h"
  7. #include "lcd.h"
  8. #include "lunar.h"
  9. #include "dht11.h"
  10. #include "delay.h"

  11. /////////////////////////UCOSII任務堆棧設置///////////////////////////////////
  12. //START 任務
  13. //設置任務優(yōu)先級
  14. #define START_TASK_PRIO                              15 //開始任務的優(yōu)先級設置為最低
  15. //設置任務堆棧大小
  16. #define START_STK_SIZE                                  64
  17. //創(chuàng)建任務堆?臻g        
  18. OS_STK START_TASK_STK[START_STK_SIZE];
  19. //任務函數(shù)接口
  20. void start_task(void *pdata);        
  21.                            

  22. #define LED_TASK_PRIO                              10
  23. OS_STK  LED_TASK_STK[64];
  24. void led_task(void * pdata);

  25. OS_STK  ALARM_TASK_STK[64];
  26. void alarm_task(void * pdata);

  27. OS_STK  TIME_TASK_STK[64];
  28. void time_task(void * pdata);

  29. OS_STK  TEMP_TASK_STK[64];
  30. void temp_task(void * pdata);

  31. OS_STK  ADC_TASK_STK[64];
  32. void adc_task(void * pdata);

  33. OS_EVENT *sem_led;
  34. OS_EVENT *sem_key;

  35. u16 light,sign;
  36. u8 temp=0,humi=0;
  37.         
  38. int main(void)
  39. {         
  40.         delay_init();
  41.         led_init();
  42.         adc_init();
  43.         pwm_init();
  44.         LCD_Init();
  45.         dht11_init();
  46.         ds1302_init();
  47.          
  48.         OSInit();   
  49.          OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創(chuàng)建起始任務
  50.         OSStart();
  51. }


  52.          
  53. //開始任務
  54. void start_task(void *pdata)
  55. {
  56.   OS_CPU_SR cpu_sr=0;
  57.         pdata = pdata;
  58. //        sem_led=OSSemCreate(0);
  59. //        sem_key=OSMboxCreate(0);
  60.         
  61.         OSStatInit();                                        //初始化統(tǒng)計任務.這里會延時1秒鐘左右        
  62.          OS_ENTER_CRITICAL();                        //進入臨界區(qū)(無法被中斷打斷)   
  63.                                                    
  64.          OSTaskCreate(time_task,(void *)0,(OS_STK*)&TIME_TASK_STK[63],5);
  65.         OSTaskCreate(adc_task,(void *)0,(OS_STK*)&ADC_TASK_STK[63],6);
  66.         OSTaskCreate(temp_task,(void *)0,(OS_STK*)&TEMP_TASK_STK[63],7);
  67.         
  68.         OSTaskCreate(alarm_task,(void *)0,(OS_STK*)&ALARM_TASK_STK[63],9);
  69.         OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[63],LED_TASK_PRIO);
  70.         
  71.         OSTaskSuspend(START_TASK_PRIO);        //掛起起始任務.
  72.         OSTaskSuspend(LED_TASK_PRIO);        
  73.         OS_EXIT_CRITICAL();                                //退出臨界區(qū)(可以被中斷打斷)
  74. }


  75. //LED2任務
  76. void time_task(void *pdata)
  77. {         
  78.         pdata=pdata;
  79.         while(1)
  80.         {
  81.                         POINT_COLOR=BLACK;
  82.                         display();                                                
  83.                         display_lunar();
  84.                         delay_ms(100);
  85.         };
  86. }

  87. void adc_task(void *pdata)
  88. {
  89.         while(1)
  90.         {
  91.                 POINT_COLOR=BLACK;
  92.                 LCD_ShowChinese(20,172,0,24,0);                                
  93.                 LCD_ShowChinese(44,172,1,24,0);
  94.                 light=Get_AD_Light(ADC_Channel_6,10);                                
  95.                 LCD_ShowNum(68,172,light,3,24);
  96.                
  97.                 delay_ms(100);
  98.         }
  99. }

  100. void temp_task(void * pdata )
  101. {
  102.         while(1)
  103.         {
  104.                         POINT_COLOR=BLACK;
  105.                         dht11_read_data(&temp,&humi);
  106.                         LCD_ShowChinese(20,196,23,24,0);                                
  107.                         LCD_ShowChinese(44,196,25,24,0);
  108.                         LCD_ShowNum(68,196,temp,2,24);
  109.                         LCD_ShowChar(96,196,'C',24,0);
  110.                         
  111.                         LCD_ShowChinese(120,196,24,24,0);                                
  112.                         LCD_ShowChinese(144,196,25,24,0);
  113.                         LCD_ShowNum(172,196,humi,2,24);
  114.                         
  115.                         delay_ms(100);
  116.         }        
  117. }

  118. void alarm_task(void * pdata)
  119. {
  120.                 while(1)
  121.                 {
  122.                                 if(((time_buf[3]<=7)&&(time_buf[3]>=0))||((time_buf[3]<24)&&(time_buf[3]>=20)))                        
  123.                                 {
  124.                                         sign = 1;
  125.                                 }
  126.                                 else
  127.                                         sign = 0;
  128.                                 if((sign==1)||(Sensor==1))                                       
  129.                                 {
  130.                                         TIM_SetCompare2(TIM3, (100-light)*20);                                
  131.                                         if(Sensor==1)
  132.                                         {
  133.                                                                 LCD_Fill(20,220,20,172,BACK_COLOR);
  134.                                                 //                POINT_COLOR=RED;
  135.                                                                 LCD_ShowChinese(20,220,5,24,0);
  136.                                                                 LCD_ShowChinese(44,220,6,24,0);
  137.                                         }                                
  138.                                 }
  139.                                 else if((Sensor==0)||(sign==0))
  140.                                 {
  141.                                                 TIM_SetCompare2(TIM3, 0);
  142.                                                 if(Sensor==0)
  143.                                                 {
  144.                                                                 LCD_Fill(20,220,20,172,BACK_COLOR);
  145.                                                 //                POINT_COLOR=GREEN;
  146.                                                                 LCD_ShowChinese(20,220,4,24,0);
  147.                                                                 LCD_ShowChinese(44,220,6,24,0);
  148.                                                 }                                       
  149.                                 }
  150.                         if((time_buf[2]==0)&&(time_buf[1]==0))                                                                                       
  151.                                                 OSTaskResume(LED_TASK_PRIO);
  152. ……………………

  153. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
ucosii源碼.rar (567.22 KB, 下載次數(shù): 109)




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表