ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:18.99KB ,
资源ID:512761      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-512761.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能控制风扇源程序c语言.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、智能控制风扇源程序c语言/*touwenjian.h*/typedef unsigned char byte; typedef unsigned int word;/以下管脚配置/ds18b20部分sbit DQ =P34; /显示部分sbit DB=P20;sbit CP=P21;/发光显示部分sbit LED_dingshi=P00;sbit LED_shoudong =P01;sbit LED_zidong=P02;sbit LED_kuai =P03;sbit LED_zhong =P04;sbit LED_man =P05;/键盘定义部分#define wujian 0x3fsbit

2、 KEY1=P10 ; /状态转换 /启动sbit KEY2=P11 ; /+10 / 1sbit KEY3=P12 ; /-10 / 2sbit KEY4=P13 ; / 3sbit KEY5=P14 ; / 0 确定/继电器控制部分sbit JDQ1=P24; /0表示开通,1表示关断sbit JDQ2=P25;sbit JDQ3=P26;/蜂鸣器部分sbit call=P27; /低电平鸣叫/* ds18b20.c*/#include #includetouwenjian.h/* 延时子程序*/extern void delay(word useconds) for(;useconds0

3、;useconds-); /* 复位子程序 */static byte ow_reset(void) byte presence;EA=0; DQ = 0; / pull DQ line low delay(45); / leave it low for 480us /551usDQ = 1; / allow line to return high delay(4);/ wait for presence /61uspresence = DQ; / get presence signal delay(40); / wait for end of timeslot /491usEA=1;retu

4、rn(presence); / presence signal returned / 0=presence, 1 = no part /* 从 1-wire 总线上读取一个字节子程序*/ static byte read_byte(void) byte i; byte value = 0;EA=0; for (i=8;i0;i-) value=1; DQ = 0; / pull DQ low to start timeslot DQ = 1; / then return high unsigned char i; for(i=0;i0; i-) / writes byte, one bit a

5、t a time DQ = 0; / pull DQ low to start timeslotDQ=0; DQ = val&0x01; /6USdelay(5);/ hold value for remainder of timeslot /74usDQ = 1; val=val1; EA=1; delay(5); /*读取温度 */ word Read_Temperature(void) union byte c2; word x; temp; ow_reset(); write_byte(0xCC); / Skip ROM write_byte(0xBE); / Read Scratch

6、 Pad temp.c1=read_byte(); temp.c0=read_byte(); ow_reset(); write_byte(0xCC); /Skip ROM write_byte(0x44); / Start Conversion return temp.x; /*求解温度*/extern byte Real_Tem(void) word wen; wen=Read_Temperature(); return(wen4)&0x00ff);/* Main.c*/#include #includetouwenjian.h/数据区#define time_default 41byte

7、 dingshi_time=time_default;/存放定时时间bit flag_dingshi=0; /0表示没有定时word dingshi_jishu3=1000;/1000*60=1分钟/bit flag_dingshi_delay=0;/1表示有byte dingshi_delay=100;/#define hwx_delay_const 3 /人体感应延时时间byte hwx_delay=hwx_delay_const;/用于保存红外线触发延长时间word hwx_jishu1=0;/byte wendu=0;/用于存放温度值/#define low_wen 18#define

8、 mid_wen 20#define hig_wen 24#define vhi_wen 28/byte time_stor=100; /存储主观时间/触发显示byte wendu_stor=low_wen;/存储主观温度/触发显示/enum station0zidong,dingshi,shoudong,weakstate;/函数说明区extern byte Real_Tem(void );extern void delay(word useconds);void mingjiao(void);void display(byte input,bit kkl);void auto_speed(

9、void);void weak_default(void);/*主程序*/void main() /定时器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);

10、 auto_speed(); LED_zidong=0; /刚开始为自动方式 P1=P1|0X7C; /拉高五个键盘 wendu_stor=100; /两个不可能值/用于启动显示 time_stor=100; /两个不可能值/用于启动显示 /TR0=1; /开启定时器0TR1=1;while(1) wendu=Real_Tem(); /* 定时器0中断服务子程序 功能:进行键盘处理 说明:键盘输入为P1.0到P1.4*/ void time0(void) interrupt 1 byte jianpan; TH0=0xd8;TL0=0xf0; jianpan = P1 & wujian; if

11、(jianpan != wujian) /如果还有键盘值提取键盘值 delay(500);/延时消抖 jianpan = P1 & wujian; if(jianpan=wujian)goto time_out; switch(state) case dingshi: 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); else if(K

12、EY2=0)/加分 if(dingshi_time10) dingshi_time-=10; dingshi_delay=100;/ mingjiao(); while(KEY3=0); else if(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); else if(KEY5=0) weak_default(); ming

13、jiao(); while(KEY5=0); break; case shoudong:if(KEY1=0) /状态转换时做些相应的处理 state=zidong; auto_speed(); LED_shoudong=1;LED_zidong=0; mingjiao(); while(KEY1=0); else if(KEY2=0)/快1 JDQ2=1;JDQ3=1;JDQ1=0;/关断其它 LED_zhong=LED_man=1;LED_kuai=0; mingjiao(); while(KEY2=0); else if(KEY3=0)/中2 JDQ1=1;JDQ3=1;JDQ2=0;/关

14、断其它 LED_kuai=LED_man=1;LED_zhong=0; mingjiao(); while(KEY3=0); else if(KEY4=0)/慢3 JDQ1=1;JDQ2=1;JDQ3=0;/关断其它 LED_zhong=LED_kuai=1;LED_man=0; mingjiao(); while(KEY4=0); else if(KEY5=0)/停4 weak_default(); mingjiao(); while(KEY5=0); break; case zidong: if(KEY1=0) /状态转换时做些相应的处理 state=dingshi; LED_zidong

15、=1; flag_dingshi_delay=1;dingshi_delay=100;/开始延时 time_stor=100;/ mingjiao(); while(KEY1=0); else if(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); else if(KEY3=0)/中2 JDQ1=1;JDQ3=1;JDQ2=0;/关断其它 LED_kuai=LED

16、_man=1;LED_zhong=0; state=shoudong; LED_zidong=1;LED_shoudong=0; mingjiao(); while(KEY3=0); else if(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); else if(KEY5=0)/停4 weak_default(); mingjiao(); while(KEY5=

17、0); break; case weak: 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*/void timer1(void) interrupt 3 TH1=0x15;TL1=0xa0;/ /红外线到记时 EX0=0; if(hwx_jishu10)dingshi_jishu3-; else din

18、gshi_jishu3=1000; if(dingshi_time1)dingshi_time-; elseweak_default(); /5秒延时 if(flag_dingshi_delay=1) if(dingshi_delay1)dingshi_delay-; else state=shoudong;flag_dingshi_delay=0;dingshi_delay=100; LED_shoudong=0; time_stor=100;wendu_stor=100; / mingjiao(); /显示和温控 switch(state) case dingshi:/在定时的时候只显示时

19、间 if(time_stor!=dingshi_time)display(dingshi_time,1);time_stor=dingshi_time; / break; case shoudong: case zidong: /是否有定时,有则交替显示温度和时间,没有则只显示温度 if(flag_dingshi!=0)/ static byte jiaoti_jishu2=0; static bit flag_jiaoti=0; if(jiaoti_jishu249)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