久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于UCOSII+STM32的智能風扇源碼 分5種模式
[打印本頁]
作者:
51hei團團
時間:
2018-7-1 03:25
標題:
基于UCOSII+STM32的智能風扇源碼 分5種模式
這個智能風扇分5種模式
單片機源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "beep.h"
#include "key.h"
#include "touch.h"
#include "includes.h"
#include "remote.h"
#include "timer.h"
#include "pwm.h"
#include "wkup.h"
#include "rng.h"
#include "stdlib.h"
#include "stdio.h"
/////////////////////////UCOSII任務設置///////////////////////////////////
//START 任務
//設置任務優先級
#define START_TASK_PRIO 10 //開始任務的優先級設置為最低
//設置任務堆棧大小
#define START_STK_SIZE 64
//任務堆棧
OS_STK START_TASK_STK[START_STK_SIZE];
//任務函數
void start_task(void *pdata);
//觸摸屏任務
//設置任務優先級
#define TOUCH_TASK_PRIO 7
//設置任務堆棧大小
#define TOUCH_STK_SIZE 128
//任務堆棧
OS_STK TOUCH_TASK_STK[TOUCH_STK_SIZE];
//任務函數
void touch_task(void *pdata);
//LED任務
//設置任務優先級
#define LED_TASK_PRIO 6
//設置任務堆棧大小
#define LED_STK_SIZE 64
//任務堆棧
OS_STK LED_TASK_STK[LED_STK_SIZE];
//任務函數
void led_task(void *pdata);
//蜂鳴器任務
//設置任務優先級
#define BEEP_TASK_PRIO 5
//設置任務堆棧大小
#define BEEP_STK_SIZE 128
//任務堆棧
OS_STK BEEP_TASK_STK[BEEP_STK_SIZE];
//任務函數
void beep_task(void *pdata);
//主任務
//設置任務優先級
#define MAIN_TASK_PRIO 4
//設置任務堆棧大小
#define MAIN_STK_SIZE 128
//任務堆棧
OS_STK MAIN_TASK_STK[MAIN_STK_SIZE];
//任務函數
void main_task(void *pdata);
//按鍵掃描任務
//設置任務優先級
#define KEY_TASK_PRIO 3
//設置任務堆棧大小
#define KEY_STK_SIZE 64
//任務堆棧
OS_STK KEY_TASK_STK[KEY_STK_SIZE];
//任務函數
void key_task(void *pdata);
//////////////////////////////////////////////////////////////////////////////
OS_EVENT * msg_key; //按鍵郵箱事件塊指針
OS_EVENT * sem_beep; //蜂鳴器信號量指針
typedef struct wind
{
u8 fmode;
u8 ftime;
u8 fcnt;
struct wind *fnext;
}feng;
void ziranfeng();
void zhengchangfeng();
void shuimianfeng();
void wenkongfeng();
void zidingyifeng();
void TIM14_PWM_Init(u32 arr,u32 psc);
//void TIM2_Int_Init(u32 arr,u32 psc);
//加載主界面
void ucos_load_main_ui(void)
{
LCD_Clear(WHITE); //清屏
POINT_COLOR=RED; //設置字體為紅色
}
int main(void)
{
u8 de=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168); //初始化延時函數
uart_init(115200); //初始化串口波特率為115200
LED_Init(); //初始化LED
//BEEP_Init(); //蜂鳴器初始化
// KEY_Init(); //按鍵初始化
LCD_Init(); //LCD初始化
Remote_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR時鐘
PWR_BackupAccessCmd(ENABLE); //使能后備寄存器訪問
//de=RTC_ReadBackupRegister(RTC_BKP_DR0);
// RTC_WriteBackupRegister(RTC_BKP_DR0,1);
ucos_load_main_ui(); //加載主界面
LCD_ShowxNum(310,740,de,3,24,0);
OSInit(); //初始化UCOSII
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;
msg_key=OSMboxCreate((void*)0); //創建消息郵箱
sem_beep=OSSemCreate(0); //創建信號量
OSStatInit(); //初始化統計任務.這里會延時1秒鐘左右
OS_ENTER_CRITICAL(); //進入臨界區(無法被中斷打斷)
//OSTaskCreate(touch_task,(void *)0,(OS_STK*)&TOUCH_TASK_STK[TOUCH_STK_SIZE-1],TOUCH_TASK_PRIO);
//OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);
//OSTaskCreate(beep_task,(void *)0,(OS_STK*)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO);
OSTaskCreate(main_task,(void *)0,(OS_STK*)&MAIN_TASK_STK[MAIN_STK_SIZE-1],MAIN_TASK_PRIO);
OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //掛起起始任務.
OS_EXIT_CRITICAL(); //退出臨界區(可以被中斷打斷)
}
u8 tflag=0;
void main_task(void *pdata)
{
u8 keyw,err;
TIM2_Int_Init(50000-1,8400-1);//30000000=50min,,18000000=30min
LCD_ShowString(100,30,300,24,24,"Please select mode! ");
while(1)
{
keyw=(u32)OSMboxPend(msg_key,10,&err);
switch(keyw)
{
case 1:ziranfeng();break;
case 2:zhengchangfeng();break;
case 3:shuimianfeng();break;
case 4:wenkongfeng();break;
case 5:zidingyifeng();break;
default:break;
}
}
}
void ziranfeng()
{
u8 keyw,err;
u16 random,tr;
RNG_Init();
TIM14_PWM_Init(500-1,84-1);
while(1)
{
keyw=(u32)OSMboxPend(msg_key,10,&err);
switch(keyw)
{
// case 1:ziranfeng();break;
case 2:zhengchangfeng();break;
case 3:tflag=0;shuimianfeng();break;
case 4:wenkongfeng();break;
default:break;
}
//LED1=!LED1;
random=RNG_Get_RandomRange(0,499);
if(random<100)tr=1;
if(random<200&&random>=100)tr=100;
if(random<300&&random>=200)tr=200;
if(random<400&&random>=300)tr=300;
if(random<500&&random>=400)tr=400;
delay_ms(2000);
TIM_SetCompare2(TIM3,tr);
}
}
void zhengchangfeng()
{
u16 random=250,tr;
u8 keyq,err;
// RNG_Init();
TIM14_PWM_Init(500-1,84-1);
while(1)
{
//LED1=!LED1;
//keyq=(u32)OSMboxPend(msg_key,10,&err);
keyq=Remote_Scan();
switch(keyq)
{
case 1:ziranfeng();break;
// case 2:zhengchangfeng();break;
case 3:tflag=0;shuimianfeng();break;
case 4:wenkongfeng();break;
default:break;
}
if(keyq==17)
random++;
if(random==401)
random=400;
if(keyq==16)
random--;
if(random==0X0000)
random=1;
tr=random;
delay_ms(10);
TIM_SetCompare2(TIM3,tr);
}
}
void shuimianfeng()
{
u8 keyw,err;
u16 random,tr;
u8 keyq;
tflag=0;
TIM_Cmd(TIM2,ENABLE);
TIM14_PWM_Init(500-1,84-1);
while(1)
{
keyw=(u32)OSMboxPend(msg_key,10,&err);
switch(keyw)
{
case 1:
TIM_Cmd(TIM2,DISABLE);
TIM_SetCounter(TIM2,0);
ziranfeng();break;
case 2:
TIM_Cmd(TIM2,DISABLE);
TIM_SetCounter(TIM2,0);
zhengchangfeng();break;
// case 3:shuimianfeng();break;
case 4:TIM_Cmd(TIM2,DISABLE);
TIM_SetCounter(TIM2,0);wenkongfeng();break;
default:break;
}
switch(tflag)
{
case 0: TIM_SetCompare2(TIM3,1);break;
case 1: TIM_SetCompare2(TIM3,200);break;
case 2: TIM_SetCompare2(TIM3,400);break;
}
}
}
u8 DHT11_Init(void);
u8 DHT11_Read_Data(u8 *temp,u8 *humi);
void wenkongfeng()
{
u8 temperatur=0;
u8 keyw,err;
u8 humidity;
DHT11_Init();
TIM14_PWM_Init(500-1,84-1);
LCD_ShowString(30,150,200,16,16,"Temp: C");
while(1)
{
keyw=(u32)OSMboxPend(msg_key,10,&err);
switch(keyw)
{
case 1:ziranfeng();break;
case 2:zhengchangfeng();break;
case 3:shuimianfeng();break;
// case 4:wenkongfeng();break;
default:break;
}
delay_ms(100);
DHT11_Read_Data(&temperatur,&humidity); //讀取溫濕度值
LCD_ShowNum(30+40,150,temperatur,2,16); //顯示溫度
switch(temperatur)
{
case 20:TIM_SetCompare2(TIM3,345);break;
case 21:TIM_SetCompare2(TIM3,330);break;
case 22:TIM_SetCompare2(TIM3,315);break;
case 23:TIM_SetCompare2(TIM3,300);break;
case 24:TIM_SetCompare2(TIM3,285);break;
case 25:TIM_SetCompare2(TIM3,270);break;
case 26:TIM_SetCompare2(TIM3,255);break;
case 27:TIM_SetCompare2(TIM3,240);break;
case 28:TIM_SetCompare2(TIM3,225);break;
case 29:TIM_SetCompare2(TIM3,210);break;
case 30:TIM_SetCompare2(TIM3,195);break;
case 31:TIM_SetCompare2(TIM3,180);break;
case 32:TIM_SetCompare2(TIM3,165);break;
case 33:TIM_SetCompare2(TIM3,150);break;
case 34:TIM_SetCompare2(TIM3,135);break;
case 35:TIM_SetCompare2(TIM3,120);break;
case 36:TIM_SetCompare2(TIM3,105);break;
case 37:TIM_SetCompare2(TIM3,90);break;
case 38:TIM_SetCompare2(TIM3,75);break;
case 39:TIM_SetCompare2(TIM3,60);break;
case 40:TIM_SetCompare2(TIM3,45);break;
case 41:TIM_SetCompare2(TIM3,30);break;
case 42:TIM_SetCompare2(TIM3,15);break;
case 43:TIM_SetCompare2(TIM3,0);break;
default:break;
}
if(temperatur<20)TIM_SetCompare2(TIM3,360);
if(temperatur>43)TIM_SetCompare2(TIM3,0);
}
}
void zidingyifeng()
{
feng *head=NULL,*prev,*current;
u8 keyw,fm=0,fmc,cot=0,b[3];
u16 bz;
LCD_ShowString(100,130,300,24,24,"Please set mode! ");
LCD_ShowString(100,160,300,24,24,"qiang feng");
LCD_ShowString(100,190,300,24,24,"zhong feng");
LCD_ShowString(100,220,300,24,24,"ruo feng");
LCD_DrawRectangle(95,159+30*fm,225,185+30*fm);
while(1)
{
keyw=Remote_Scan();
switch(keyw)
{
case 11:fm--; POINT_COLOR=WHITE;
LCD_DrawRectangle(95,159+30*0,225,185+30*0);
LCD_DrawRectangle(95,159+30*1,225,185+30*1);
LCD_DrawRectangle(95,159+30*2,225,185+30*2);break;
case 15:fm++; POINT_COLOR=WHITE;
LCD_DrawRectangle(95,159+30*0,225,185+30*0);
LCD_DrawRectangle(95,159+30*1,225,185+30*1);
LCD_DrawRectangle(95,159+30*2,225,185+30*2);break;
case 14:
fmc=fm;
fm=0;
cot++;
// current= ( feng *) malloc(sizeof (feng));
if(head==NULL)
{
head=current;
}
else
{
prev->fnext=current;
}
current->fnext=NULL;current->fmode=fmc;current->fcnt=cot;
LED1=0;
LCD_ShowString(100,330,300,24,24,"Please set time! ");
while(1)
{
u8 ic1=0;
while(1)
{
keyw=Remote_Scan();
if(keyw==0||keyw==1||keyw==2||keyw==3||keyw==4||keyw==5||keyw==6||keyw==7||keyw==8||keyw==9)
{
b[ic1]=keyw;
LCD_ShowxNum(100+24*ic1,400,b[ic1],1,24,0);
}
if(keyw==18)
{
ic1=0;
}
if(keyw==14)
{
switch(ic1)
{
case 1:bz=b[0];break;
case 2:bz=b[0]*10+b[1];break;
case 3:bz=b[0]*100+b[1]*10+b[2];break;
}
LCD_ShowxNum(400,400,bz,3,24,0);
}
}
}
break;
default:break;
}
if(fm==255)fm=0;
if(fm==3)fm=2;
POINT_COLOR=RED;
LCD_DrawRectangle(95,159+30*fm,225,185+30*fm);
delay_ms(300);
// fm++;
// LCD_DrawRectangle(95,159+30*fm,225,185+30*fm);
// fm++;
// LCD_DrawRectangle(95,159+30*fm,225,185+30*fm);
}
}
//void main_task(void *pdata)
//{
// u16 led0pwmval=0;
// u8 dir=1,t=0,tt=0;
// TIM14_PWM_Init(16000-1,84-1); //84M/84=1Mhz的計數頻率,重裝載值500,所以PWM頻率為 1M/500=2Khz.
// WKUP_Init();
// TIM4 _Int_Init(5000-1,8400-1);//500ms
//
// while(1) //實現比較值從0-300遞增,到300后從300-0遞減,循環
// {
// delay_ms(10);
// t++;
// if(dir)led0pwmval++;//dir==1 led0pwmval遞增
// else led0pwmval--; //dir==0 led0pwmval遞減
// if(led0pwmval>300)dir=0;//led0pwmval到達300后,方向為遞減
// if(led0pwmval==0)dir=1; //led0pwmval遞減到0后,方向改為遞增
// if(t==100)
// {
// tt++;
// t=0;
// }
// LCD_ShowxNum(410,740,tt,3,24,0);
// RTC_WriteBackupRegister(RTC_BKP_DR0,tt);
// // LED1=!LED1;
// TIM_SetCompare2(TIM3,led0pwmval); //修改比較值,修改占空比
// }
//}
////主任務
//void main_task(void *pdata)
//{
// u32 key=0;
// u8 err;
// u8 semmask=0;
// u8 tcnt=0;
// while(1)
// {
// key=(u32)OSMboxPend(msg_key,10,&err);
// switch(key)
// {
// case 1://控制DS1
// LED1=!LED1;
// break;
// case 2://發送信號量
// semmask=1;
// OSSemPost(sem_beep);
// break;
// case 3://清除
// LCD_Fill(0,121,lcddev.width,lcddev.height,WHITE);
// break;
// case 4://校準
// OSTaskSuspend(TOUCH_TASK_PRIO); //掛起觸摸屏任務
// if((tp_dev.touchtype&0X80)==0)TP_Adjust();
// OSTaskResume(TOUCH_TASK_PRIO); //解掛
// ucos_load_main_ui(); //重新加載主界面
// break;
// }
// if(semmask||sem_beep->OSEventCnt)//需要顯示sem
// {
// POINT_COLOR=BLUE;
// LCD_ShowxNum(192,50,sem_beep->OSEventCnt,3,16,0X80);//顯示信號量的值
// if(sem_beep->OSEventCnt==0)semmask=0; //停止更新
// }
// if(tcnt==50)//0.5秒更新一次CPU使用率
// {
// tcnt=0;
// POINT_COLOR=BLUE;
// LCD_ShowxNum(192,30,OSCPUUsage,3,16,0); //顯示CPU使用率
// }
// tcnt++;
// delay_ms(10);
// }
//}
//按鍵掃描任務
void key_task(void *pdata)
{
u8 key,keyq=0;
while(1)
{
// key=KEY_Scan(0);
// if(key)OSMboxPost(msg_key,(void*)key);//發送消息
key=Remote_Scan();
if(key&&key!=keyq)OSMboxPost(msg_key,(void*)key);//發送消息
keyq=key;
delay_ms(10);
}
}
復制代碼
所有資料51hei提供下載:
智能風扇.rar
(669.48 KB, 下載次數: 53)
2018-7-1 03:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
http://www.zg4o1577.cn/bbs/dpj-124544-1.html
作者:
phang
時間:
2018-9-21 09:18
謝謝分享,下來參考
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
97视频在线观看网站
|
色婷婷综合成人av
|
av色站
|
在线黄
|
一区二区三区亚洲
|
成人免费观看男女羞羞视频
|
国产精品激情在线
|
日本精品999
|
久久精品一级
|
欧美成视频在线观看
|
欧美一a
|
亚洲协和影视
|
伊人网站视频
|
97av视频在线
|
黄色电影在线免费观看
|
亚洲毛片
|
久久久久国产一区二区三区
|
国产激情在线
|
伊人免费在线观看
|
亚洲高清视频在线
|
中文字幕91
|
欧美日韩成人
|
黄色小视频入口
|
日日夜精品视频
|
日韩欧美国产一区二区
|
亚洲欧洲日本国产
|
精品视频在线播放
|
精品乱子伦一区二区三区
|
95国产精品
|
久综合
|
久久久久久综合
|
毛片一区二区三区
|
波多野结衣中文字幕一区二区三区
|
国产a视频
|
成人一区av偷拍
|
精品国产一区二区三区四区在线
|
成人精品在线视频
|
综合精品在线
|
成人午夜电影在线观看
|
黄色国产视频
|
日韩成人在线观看
|