找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2662|回复: 0
收起左侧

STM32+UCOSII+DHT11+DS1302源码

[复制链接]
ID:324984 发表于 2018-5-8 13:51 | 显示全部楼层 |阅读模式
    μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片。
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. //设置任务优先级
  14. #define START_TASK_PRIO                              15 //开始任务的优先级设置为最低
  15. //设置任务堆栈大小
  16. #define START_STK_SIZE                                  64
  17. //创建任务堆栈空间        
  18. OS_STK START_TASK_STK[START_STK_SIZE];
  19. //任务函数接口
  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 );//创建起始任务
  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();                                        //初始化统计任务.这里会延时1秒钟左右        
  62.          OS_ENTER_CRITICAL();                        //进入临界区(无法被中断打断)   
  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();                                //退出临界区(可以被中断打断)
  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, 下载次数: 108)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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