标题:
STM32+UCOSII+DHT11+DS1302源码
[打印本页]
作者:
lemon_c
时间:
2018-5-8 13:51
标题:
STM32+UCOSII+DHT11+DS1302源码
μ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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1