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

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

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

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

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

//低电平鸣叫

ds18b20.c

#include<

REGX51.H>

#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;

for(i=8;

i>

i--)

value>

>

=1;

//pullDQlowtostarttimeslot

//thenreturnhigh

{unsignedchari;

for(i=0;

i<

2;

i++);

}//11us

if(DQ)value|=0x80;

delay(6);

//waitforrestoftimeslot

return(value);

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

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

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

staticvoidwrite_byte(charval)

i>

i--)//writesbyte,onebitatatime

//pullDQlowtostarttimeslot

DQ=0;

DQ=val&

0x01;

//6US

delay(5);

//holdvalueforremainderoftimeslot//74us

val=val>

1;

}

读取温度

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

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();

//SkipROM

write_byte(0x44);

//StartConversion

returntemp.x;

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

求解温度

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

externbyteReal_Tem(void)

{

wordwen;

wen=Read_Temperature();

return((wen>

4)&

0x00ff);

Main.c

//数据区

#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;

jianpan=P1&

wujian;

if(jianpan!

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

delay(500);

//延时消抖

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;

while(KEY2==0);

elseif(KEY3==0)//减分

if(dingshi_time>

10)

{dingshi_time-=10;

while(KEY3==0);

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

flag_dingshi=~flag_dingshi;

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

else{LED_dingshi=1;

dingshi_jishu3=1000;

//

while(KEY4==0);

elseif(KEY5==0)

weak_default();

while(KEY5==0);

break;

caseshoudong:

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

state=zidong;

auto_speed();

LED_shoudong=1;

LED_zidong=0;

mingjiao();

elseif(KEY2==0)//快1

JDQ2=1;

JDQ3=1;

JDQ1=0;

//关断其它

LED_zhong=LED_man=1;

LED_kuai=0;

elseif(KEY3==0)//中2

JDQ1=1;

JDQ2=0;

LED_kuai=LED_man=1;

LED_zhong=0;

elseif(KEY4==0)//慢3

JDQ2=1;

JDQ3=0;

LED_zhong=LED_kuai=1;

LED_man=0;

elseif(KEY5==0)//停4

casezidong:

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

state=dingshi;

LED_zidong=1;

flag_dingshi_delay=1;

//开始延时

state=shoudong;

LED_shoudong=0;

caseweak:

if(KEY1==0)

wendu_stor=100;

//两个不可能值

}

time_out:

;

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

定时器1中断服务子程序

功能:

用于定时0.060s

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

voidtimer1(void)interrupt3

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--;

{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;

LED_shoudong=0;

time_stor=100;

mingjiao();

//显示和温控

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)

=dingshi_time)

{display(dingshi_time,1);

}//显示时间

if(wendu_stor!

=wendu)

{display(wendu,0);

wendu_stor=wendu;

time_stor=100;

}//显示温度

}

else

if(wendu_stor!

=wendu){display(wendu,0);

}//显示温度

//温度控制速度

if(state=

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

当前位置:首页 > 经管营销 > 人力资源管理

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

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