智能控制风扇源程序c语言.docx

上传人:b****1 文档编号:512761 上传时间:2023-04-29 格式:DOCX 页数:22 大小:18.99KB
下载 相关 举报
智能控制风扇源程序c语言.docx_第1页
第1页 / 共22页
智能控制风扇源程序c语言.docx_第2页
第2页 / 共22页
智能控制风扇源程序c语言.docx_第3页
第3页 / 共22页
智能控制风扇源程序c语言.docx_第4页
第4页 / 共22页
智能控制风扇源程序c语言.docx_第5页
第5页 / 共22页
智能控制风扇源程序c语言.docx_第6页
第6页 / 共22页
智能控制风扇源程序c语言.docx_第7页
第7页 / 共22页
智能控制风扇源程序c语言.docx_第8页
第8页 / 共22页
智能控制风扇源程序c语言.docx_第9页
第9页 / 共22页
智能控制风扇源程序c语言.docx_第10页
第10页 / 共22页
智能控制风扇源程序c语言.docx_第11页
第11页 / 共22页
智能控制风扇源程序c语言.docx_第12页
第12页 / 共22页
智能控制风扇源程序c语言.docx_第13页
第13页 / 共22页
智能控制风扇源程序c语言.docx_第14页
第14页 / 共22页
智能控制风扇源程序c语言.docx_第15页
第15页 / 共22页
智能控制风扇源程序c语言.docx_第16页
第16页 / 共22页
智能控制风扇源程序c语言.docx_第17页
第17页 / 共22页
智能控制风扇源程序c语言.docx_第18页
第18页 / 共22页
智能控制风扇源程序c语言.docx_第19页
第19页 / 共22页
智能控制风扇源程序c语言.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

智能控制风扇源程序c语言.docx

《智能控制风扇源程序c语言.docx》由会员分享,可在线阅读,更多相关《智能控制风扇源程序c语言.docx(22页珍藏版)》请在冰点文库上搜索。

智能控制风扇源程序c语言.docx

智能控制风扇源程序c语言

/***********************************************************************

touwenjian.h

***********************************************************************/

typedefunsignedcharbyte;

typedefunsignedintword;

//以下管脚配置

//ds18b20部分

sbitDQ=P3^4;

//显示部分

sbitDB=P2^0;

sbitCP=P2^1;

//发光显示部分

sbitLED_dingshi=P0^0;

sbitLED_shoudong=P0^1;

sbitLED_zidong=P0^2;

sbitLED_kuai=P0^3;

sbitLED_zhong=P0^4;

sbitLED_man=P0^5;

//键盘定义部分

#definewujian0x3f

sbitKEY1=P1^0;//状态转换/启动

sbitKEY2=P1^1;//+10/1

sbitKEY3=P1^2;//-10/2

sbitKEY4=P1^3;//3

sbitKEY5=P1^4;//0确定

//继电器控制部分

sbitJDQ1=P2^4;//0表示开通,1表示关断

sbitJDQ2=P2^5;

sbitJDQ3=P2^6;

//蜂鸣器部分

sbitcall=P2^7;//低电平鸣叫

/***********************************************************************

ds18b20.c

***********************************************************************/

#include

#include"touwenjian.h"

/*****************************************************

延时子程序

*****************************************************/

externvoiddelay(worduseconds)

{

for(;useconds>0;useconds--);

}

/*****************************************************

复位子程序

******************************************************/

staticbyteow_reset(void)

{

bytepresence;

EA=0;

DQ=0;//pullDQlinelow

delay(45);//leaveitlowfor480us//551us

DQ=1;//allowlinetoreturnhigh

delay(4);//waitforpresence//61us

presence=DQ;//getpresencesignal

delay(40);//waitforendoftimeslot//491us

EA=1;

return(presence);//presencesignalreturned

}//0=presence,1=nopart

/*******************************************************

从1-wire总线上读取一个字节子程序

********************************************************/

staticbyteread_byte(void)

{

bytei;

bytevalue=0;

EA=0;

for(i=8;i>0;i--)

{

value>>=1;

DQ=0;//pullDQlowtostarttimeslot

DQ=1;//thenreturnhigh

{unsignedchari;

for(i=0;i<2;i++);}//11us

if(DQ)value|=0x80;

delay(6);//waitforrestoftimeslot

}

EA=1;

return(value);

}

/********************************************************

向1-WIRE总线上写一个字节

*********************************************************/

staticvoidwrite_byte(charval)

{

bytei;

EA=0;

for(i=8;i>0;i--)//writesbyte,onebitatatime

{

DQ=0;//pullDQlowtostarttimeslot

DQ=0;

DQ=val&0x01;//6US

delay(5);//holdvalueforremainderoftimeslot//74us

DQ=1;

val=val>>1;

}

EA=1;

delay(5);

}

/*******************************************************

读取温度

*******************************************************/

wordRead_Temperature(void)

{

union{

bytec[2];

wordx;

}temp;

ow_reset();

write_byte(0xCC);//SkipROM

write_byte(0xBE);//ReadScratchPad

temp.c[1]=read_byte();

temp.c[0]=read_byte();

ow_reset();

write_byte(0xCC);//SkipROM

write_byte(0x44);//StartConversion

returntemp.x;

}

/***************************************************************

求解温度

***************************************************************/

externbyteReal_Tem(void)

{

wordwen;

wen=Read_Temperature();

return((wen>>4)&0x00ff);

}

/***********************************************************************

Main.c

***********************************************************************/

#include

#include"touwenjian.h"

//数据区

#definetime_default41

bytedingshi_time=time_default;//存放定时时间''''''

bitflag_dingshi=0;//0表示没有定时

worddingshi_jishu3=1000;//1000*60=1分钟

//

bitflag_dingshi_delay=0;//1表示有

bytedingshi_delay=100;

//

#definehwx_delay_const3//人体感应延时时间

bytehwx_delay=hwx_delay_const;//用于保存红外线触发延长时间

wordhwx_jishu1=0;

//

bytewendu=0;//用于存放温度值''''''

//

#definelow_wen18

#definemid_wen20

#definehig_wen24

#definevhi_wen28

//

bytetime_stor=100;//存储主观时间//触发显示

bytewendu_stor=low_wen;//存储主观温度//触发显示

//

enumstation0{zidong,dingshi,shoudong,weak}state;

//函数说明区

externbyteReal_Tem(void);

externvoiddelay(worduseconds);

voidmingjiao(void);

voiddisplay(byteinput,bitkkl);

voidauto_speed(void);

voidweak_default(void);

/*******************************************************************

主程序

*******************************************************************/

voidmain()

{

//定时器0用于键盘扫描

TMOD=0x01|TMOD;//定时器0的1方式

TH0=0xd8;TL0=0xf0;//定时器0初始化10ms扫描一次

//定时器1用于显示

TMOD=0x10|TMOD;//定时器1的1方式

TH1=0x15;TL1=0xA0;//定时器1初始化60ms中断一次

//外部中断

TCON=TCON|0x01;//外部中断0都下降沿触发

//以下为开启部分

IP=0X01;//两个定时器同等优先级

IE=0x8b;//开启定时器0,1,外部中断0中断

//

while(Real_Tem()==85);

auto_speed();

LED_zidong=0;//刚开始为自动方式

P1=P1|0X7C;//拉高五个键盘

wendu_stor=100;//两个不可能值//用于启动显示

time_stor=100;//两个不可能值//用于启动显示

//

TR0=1;//开启定时器0

TR1=1;

while

(1)

{

wendu=Real_Tem();

}

}

/***********************************************************************************

定时器0中断服务子程序

功能:

进行键盘处理

说明:

键盘输入为P1.0到P1.4

***********************************************************************************/

voidtime0(void)interrupt1

{

bytejianpan;

TH0=0xd8;TL0=0xf0;

jianpan=P1&wujian;

if(jianpan!

=wujian)//如果还有键盘值提取键盘值

{

delay(500);//延时消抖

jianpan=P1&wujian;

if(jianpan==wujian)gototime_out;

switch(state)

{

casedingshi:

if(KEY1==0)//状态转换时做些相应的处理

{

state=shoudong;

LED_shoudong=0;

flag_dingshi_delay=0;dingshi_delay=100;

time_stor=100;wendu_stor=100;//触发

mingjiao();

while(KEY1==0);

}

elseif(KEY2==0)//加分

{

if(dingshi_time<90)

{dingshi_time+=10;}

dingshi_delay=100;//

mingjiao();

while(KEY2==0);

}

elseif(KEY3==0)//减分

{

if(dingshi_time>10)

{dingshi_time-=10;}

dingshi_delay=100;//

mingjiao();

while(KEY3==0);

}

elseif(KEY4==0)//定时与否

{

flag_dingshi=~flag_dingshi;

if(flag_dingshi==1){LED_dingshi=0;}

else{LED_dingshi=1;dingshi_jishu3=1000;}

dingshi_delay=100;//

//

mingjiao();

while(KEY4==0);

}

elseif(KEY5==0)

{

weak_default();

mingjiao();

while(KEY5==0);

}

break;

caseshoudong:

if(KEY1==0)//状态转换时做些相应的处理

{

state=zidong;

auto_speed();

LED_shoudong=1;LED_zidong=0;

mingjiao();

while(KEY1==0);

}

elseif(KEY2==0)//快1

{

JDQ2=1;JDQ3=1;JDQ1=0;//关断其它

LED_zhong=LED_man=1;LED_kuai=0;

mingjiao();

while(KEY2==0);

}

elseif(KEY3==0)//中2

{

JDQ1=1;JDQ3=1;JDQ2=0;//关断其它

LED_kuai=LED_man=1;LED_zhong=0;

mingjiao();

while(KEY3==0);

}

elseif(KEY4==0)//慢3

{

JDQ1=1;JDQ2=1;JDQ3=0;//关断其它

LED_zhong=LED_kuai=1;LED_man=0;

mingjiao();

while(KEY4==0);

}

elseif(KEY5==0)//停4

{

weak_default();

mingjiao();

while(KEY5==0);

}

break;

casezidong:

if(KEY1==0)//状态转换时做些相应的处理

{

state=dingshi;

LED_zidong=1;

flag_dingshi_delay=1;dingshi_delay=100;//开始延时

time_stor=100;//

mingjiao();

while(KEY1==0);

}

elseif(KEY2==0)//快1

{

JDQ2=1;JDQ3=1;JDQ1=0;//关断其它

LED_zhong=LED_man=1;LED_kuai=0;

state=shoudong;

LED_zidong=1;LED_shoudong=0;

mingjiao();

while(KEY2==0);

}

elseif(KEY3==0)//中2

{

JDQ1=1;JDQ3=1;JDQ2=0;//关断其它

LED_kuai=LED_man=1;LED_zhong=0;

state=shoudong;

LED_zidong=1;LED_shoudong=0;

mingjiao();

while(KEY3==0);

}

elseif(KEY4==0)//慢3

{

JDQ1=1;JDQ2=1;JDQ3=0;//关断其它

LED_zhong=LED_kuai=1;LED_man=0;

state=shoudong;

LED_zidong=1;LED_shoudong=0;

mingjiao();

while(KEY4==0);

}

elseif(KEY5==0)//停4

{

weak_default();

mingjiao();

while(KEY5==0);

}

break;

caseweak:

if(KEY1==0)

{

state=zidong;LED_zidong=0;

wendu_stor=100;//两个不可能值

time_stor=100;//两个不可能值

auto_speed();

mingjiao();

while(KEY1==0);

}

break;

}

}

time_out:

;

}

/*************************************************************************************

定时器1中断服务子程序

功能:

用于定时0.060s

*************************************************************************************/

voidtimer1(void)interrupt3

{

TH1=0x15;TL1=0xa0;

//

//红外线到记时

EX0=0;

if(hwx_jishu1<999){hwx_jishu1++;}

else

{

hwx_jishu1=0;hwx_delay--;

if(hwx_delay==0){weak_default();}

}

EX0=1;

//1分钟定时

if(flag_dingshi==1)

{

if(dingshi_jishu3>0){dingshi_jishu3--;}

else

{dingshi_jishu3=1000;

if(dingshi_time>1){dingshi_time--;}

else{weak_default();}

}

}

//5秒延时

if(flag_dingshi_delay==1)

{

if(dingshi_delay>1)dingshi_delay--;

else

{

state=shoudong;flag_dingshi_delay=0;dingshi_delay=100;

LED_shoudong=0;

time_stor=100;wendu_stor=100;//

mingjiao();

}

}

//显示和温控

switch(state)

{

casedingshi:

//在定时的时候只显示时间

if(time_stor!

=dingshi_time){display(dingshi_time,1);time_stor=dingshi_time;}

//

break;

caseshoudong:

casezidong:

//是否有定时,有则交替显示温度和时间,没有则只显示温度

if(flag_dingshi!

=0)//

{

staticbytejiaoti_jishu2=0;

staticbitflag_jiaoti=0;

if(jiaoti_jishu2<49){jiaoti_jishu2++;}

else{flag_jiaoti=~flag_jiaoti;jiaoti_jishu2=0;}

if(flag_jiaoti!

=0)

{

if(time_stor!

=dingshi_time)

{display(dingshi_time,1);time_stor=dingshi_time;wendu_stor=100;}//显示时间

}

else

{

if(wendu_stor!

=wendu)

{display(wendu,0);wendu_stor=wendu;time_stor=100;}//显示温度

}

}

else

{

if(wendu_stor!

=wendu){display(wendu,0);wendu_stor=wendu;}//显示温度

}

//温度控制速度

if(state=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2