|
μC/OS-II由Micrium公司提供,是一個(gè)可移植、可固化的、可裁剪的、占先式多任務(wù)實(shí)時(shí)內(nèi)核,它適用于多種微處理器,微控制器和數(shù)字處理芯片。
單片機(jī)源程序如下:
- #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任務(wù)堆棧設(shè)置///////////////////////////////////
- //START 任務(wù)
- //設(shè)置任務(wù)優(yōu)先級(jí)
- #define START_TASK_PRIO 15 //開始任務(wù)的優(yōu)先級(jí)設(shè)置為最低
- //設(shè)置任務(wù)堆棧大小
- #define START_STK_SIZE 64
- //創(chuàng)建任務(wù)堆?臻g
- OS_STK START_TASK_STK[START_STK_SIZE];
- //任務(wù)函數(shù)接口
- 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 );//創(chuàng)建起始任務(wù)
- OSStart();
- }
-
-
- //開始任務(wù)
- void start_task(void *pdata)
- {
- OS_CPU_SR cpu_sr=0;
- pdata = pdata;
- // sem_led=OSSemCreate(0);
- // sem_key=OSMboxCreate(0);
-
- OSStatInit(); //初始化統(tǒng)計(jì)任務(wù).這里會(huì)延時(shí)1秒鐘左右
- OS_ENTER_CRITICAL(); //進(jìn)入臨界區(qū)(無法被中斷打斷)
-
- 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); //掛起起始任務(wù).
- OSTaskSuspend(LED_TASK_PRIO);
- OS_EXIT_CRITICAL(); //退出臨界區(qū)(可以被中斷打斷)
- }
- //LED2任務(wù)
- 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);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
ucosii源碼.rar
(567.22 KB, 下載次數(shù): 109)
2018-5-8 17:34 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|