μC/OS-II由Micrium公司提供,是一個可移植、可固化的、可裁剪的、占先式多任務實時內核,它適用于多種微處理器,微控制器和數字處理芯片。
0.jpg (32.51 KB, 下載次數: 22)
下載附件
2018-5-8 17:33 上傳
單片機源程序如下:
- #include "includes.h"
- #include "stdio.h"
- #include "led.h"
- #include "pwm.h"
- #include "adc.h"
- #include "ds1302.h"
- #include "lcd.h"
- #include "lunar.h"
- #include "dht11.h"
- #include "delay.h"
- /////////////////////////UCOSII任務堆棧設置///////////////////////////////////
- //START 任務
- //設置任務優先級
- #define START_TASK_PRIO 15 //開始任務的優先級設置為最低
- //設置任務堆棧大小
- #define START_STK_SIZE 64
- //創建任務堆棧空間
- OS_STK START_TASK_STK[START_STK_SIZE];
- //任務函數接口
- void start_task(void *pdata);
-
- #define LED_TASK_PRIO 10
- OS_STK LED_TASK_STK[64];
- void led_task(void * pdata);
- OS_STK ALARM_TASK_STK[64];
- void alarm_task(void * pdata);
- OS_STK TIME_TASK_STK[64];
- void time_task(void * pdata);
- OS_STK TEMP_TASK_STK[64];
- void temp_task(void * pdata);
- OS_STK ADC_TASK_STK[64];
- void adc_task(void * pdata);
- OS_EVENT *sem_led;
- OS_EVENT *sem_key;
- u16 light,sign;
- u8 temp=0,humi=0;
-
- int main(void)
- {
- delay_init();
- led_init();
- adc_init();
- pwm_init();
- LCD_Init();
- dht11_init();
- ds1302_init();
-
- OSInit();
- OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創建起始任務
- OSStart();
- }
-
-
- //開始任務
- void start_task(void *pdata)
- {
- OS_CPU_SR cpu_sr=0;
- pdata = pdata;
- // sem_led=OSSemCreate(0);
- // sem_key=OSMboxCreate(0);
-
- OSStatInit(); //初始化統計任務.這里會延時1秒鐘左右
- OS_ENTER_CRITICAL(); //進入臨界區(無法被中斷打斷)
-
- OSTaskCreate(time_task,(void *)0,(OS_STK*)&TIME_TASK_STK[63],5);
- OSTaskCreate(adc_task,(void *)0,(OS_STK*)&ADC_TASK_STK[63],6);
- OSTaskCreate(temp_task,(void *)0,(OS_STK*)&TEMP_TASK_STK[63],7);
-
- OSTaskCreate(alarm_task,(void *)0,(OS_STK*)&ALARM_TASK_STK[63],9);
- OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[63],LED_TASK_PRIO);
-
- OSTaskSuspend(START_TASK_PRIO); //掛起起始任務.
- OSTaskSuspend(LED_TASK_PRIO);
- OS_EXIT_CRITICAL(); //退出臨界區(可以被中斷打斷)
- }
- //LED2任務
- void time_task(void *pdata)
- {
- pdata=pdata;
- while(1)
- {
- POINT_COLOR=BLACK;
- display();
- display_lunar();
- delay_ms(100);
- };
- }
- void adc_task(void *pdata)
- {
- while(1)
- {
- POINT_COLOR=BLACK;
- LCD_ShowChinese(20,172,0,24,0);
- LCD_ShowChinese(44,172,1,24,0);
- light=Get_AD_Light(ADC_Channel_6,10);
- LCD_ShowNum(68,172,light,3,24);
-
- delay_ms(100);
- }
- }
- void temp_task(void * pdata )
- {
- while(1)
- {
- POINT_COLOR=BLACK;
- dht11_read_data(&temp,&humi);
- LCD_ShowChinese(20,196,23,24,0);
- LCD_ShowChinese(44,196,25,24,0);
- LCD_ShowNum(68,196,temp,2,24);
- LCD_ShowChar(96,196,'C',24,0);
-
- LCD_ShowChinese(120,196,24,24,0);
- LCD_ShowChinese(144,196,25,24,0);
- LCD_ShowNum(172,196,humi,2,24);
-
- delay_ms(100);
- }
- }
- void alarm_task(void * pdata)
- {
- while(1)
- {
- if(((time_buf[3]<=7)&&(time_buf[3]>=0))||((time_buf[3]<24)&&(time_buf[3]>=20)))
- {
- sign = 1;
- }
- else
- sign = 0;
- if((sign==1)||(Sensor==1))
- {
- TIM_SetCompare2(TIM3, (100-light)*20);
- if(Sensor==1)
- {
- LCD_Fill(20,220,20,172,BACK_COLOR);
- // POINT_COLOR=RED;
- LCD_ShowChinese(20,220,5,24,0);
- LCD_ShowChinese(44,220,6,24,0);
- }
- }
- else if((Sensor==0)||(sign==0))
- {
- TIM_SetCompare2(TIM3, 0);
- if(Sensor==0)
- {
- LCD_Fill(20,220,20,172,BACK_COLOR);
- // POINT_COLOR=GREEN;
- LCD_ShowChinese(20,220,4,24,0);
- LCD_ShowChinese(44,220,6,24,0);
- }
- }
- if((time_buf[2]==0)&&(time_buf[1]==0))
- OSTaskResume(LED_TASK_PRIO);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
ucosii源碼.rar
(567.22 KB, 下載次數: 109)
2018-5-8 17:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|