标题: 51单片机温控风扇(含程序+原理图+仿真+PCB) [打印本页]
作者: 一个好学生 时间: 2016-11-10 16:19
标题: 51单片机温控风扇(含程序+原理图+仿真+PCB)
· 1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机
· 2.采用DS18B20温度传感器测温,74HC573驱动数码管显示温度和风扇的档位。
· 3.共3个按键:设置、加、减。按一下设置可以设置上限,再按下设置下限,均可以按键加减调整。
· 4.利用PWM调速,当温度低于下限时,风扇不转动,当温度处于上、下限之间时1档转动(50%的转速),当温度超过上限时,全速转动。
使用说明:
一共3个按键:设置、加、减
按下设置键的时候才可以加减。
按一下设置键,是设置温度的上限,再按下设置键,是设置温度的下限,再按下设置键是退出并保存。
元件清单:
1) 7*9万用板
2) 风扇
3) STC89C51单片机
4) 74hc573
5) 40脚IC座
6) 20脚IC座
7) 0.56四位一体共阴数码管
8) 10k电阻*3
9) 1k电阻*2
10) 103排阻
11) DS18B20
12) 10uf电容
13) 12M晶振
14) 30pf瓷片电容*2
15) 8550三极管
16) 8050三极管
17) 3p排针
18) 按键*3
19) DC电源接口
20) 自锁开关
21) 导线若干
22) 焊锡若干
23) 电源线或电池盒+DC电源插头
- <font color="#000000">#include<reg51.h>
- #include<intrins.h> //包含头文件
- #define uchar unsigned char
- #define uint unsigned int //宏定义
- ////////////////////
- sbit dj=P1^0;//电机控制端接口
- sbit DQ=P1^6;//温度传感器接口
- //////////按键接口/////////////////////////////////
- sbit key1=P3^5;//设置温度
- sbit key2=P3^6;//温度加
- sbit key3=P3^7;//温度减
- //////////////////////////////////////////////////////
- sbit w1=P2^4;
- sbit w2=P2^5;
- sbit w3=P2^6;
- sbit w4=P2^7; //数码管的四个位
- /////共阴数码管段选//////////////////////////////////////////////
- uchar table[22]=
- {0x3F,0x06,0x5B,0x4F,0x66,
- 0x6D,0x7D,0x07,0x7F,0x6F,
- 0x77,0x7C,0x39,0x5E,0x79,0x71,
- 0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n 16-21
- uint wen_du; //温度变量
- uint shang,xia; //对比温度暂存变量
- uchar dang;//档位显示
- uchar flag;
- uchar d1,d2,d3;//显示数据暂存变量
- void delay(uint ms) //延时函数,大约延时25us
- {
- uchar x;
- for(ms;ms>0;ms--)
- for(x=10;x>0;x--);
- }
- /***********ds18b20延迟子函数(晶振12MHz )*******/
- void delay_18B20(uint i)
- {
- while(i--);
- }
- /**********ds18b20初始化函数**********************/
- void Init_DS18B20()
- {
- uchar x=0;
- DQ=1; //DQ复位
- delay_18B20(8); //稍做延时
- DQ=0; //单片机将DQ拉低
- delay_18B20(80); //精确延时 大于 480us
- DQ=1; //拉高总线
- delay_18B20(14);
- x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
- delay_18B20(20);
- }
- /***********ds18b20读一个字节**************/
- uchar ReadOneChar()
- {
- uchar i=0;
- uchar dat=0;
- for (i=8;i>0;i--)
- {
- DQ=0; // 给脉冲信号
- dat>>=1;
- DQ=1; // 给脉冲信号
- if(DQ)
- dat|=0x80;
- delay_18B20(4);
- }
- return(dat);
- }
- /*************ds18b20写一个字节****************/
- void WriteOneChar(uchar dat)
- {
- uchar i=0;
- for (i=8;i>0;i--)
- {
- DQ=0;
- DQ=dat&0x01;
- delay_18B20(5);
- DQ=1;
- dat>>=1;
- }
- }
- /**************读取ds18b20当前温度************/
- void ReadTemperature()
- {
- uchar a=0;
- uchar b=0;
- uchar t=0;
- Init_DS18B20();
- WriteOneChar(0xCC); // 跳过读序号列号的操作
- WriteOneChar(0x44); // 启动温度转换
- delay_18B20(100); // this message is wery important
- Init_DS18B20();
- WriteOneChar(0xCC); //跳过读序号列号的操作
- WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
- delay_18B20(100);
- a=ReadOneChar(); //读取温度值低位
- b=ReadOneChar(); //读取温度值高位
- wen_du=((b*256+a)>>4); //当前采集温度值除16得实际温度值
- }
- void display()//显示温度
- {
- w1=0;P0=table[d1];delay(10); //第1位
- P0=0x00;w1=1;delay(1);
-
- w2=0;P0=table[16];delay(10);//第2位
- P0=0x00;w2=1;delay(1);
- w3=0;P0=table[d2]; delay(10);//第3位
- P0=0x00;w3=1;delay(1);
- w4=0;P0=table[d3];delay(10);//第4位
- P0=0x00;w4=1;delay(1);
- }
- void zi_keyscan()//自动模式按键扫描函数
- {
- if(key1==0) //设置键按下
- {
- delay(30); //延时去抖
- if(key1==0)flag=1; //再次判断按键,按下的话进入设置状态
- while(key1==0);//松手检测 //按键释放
- }
- while(flag==1) //进入设置上限状态
- {
- d1=18;d2=shang/10;d3=shang%10; //显示字母H 和上限温度值
- display(); //调用显示函数
- if(key1==0) //判断设置键是否按下
- {
- delay(30); //延时去抖
- if(key1==0)flag=2; //按键按下,进入设置下限模式
- while(key1==0);//松手检测
- }
- if(key2==0) //加键按下
- {
- delay(30); //延时去抖
- if(key2==0) //加键按下
- {
- shang+=5; //上限加5
- if(shang>=100)shang=100; //上限最大加到100
- }while(key2==0);//松手检测
- }
- if(key3==0) //减键按下
- {
- delay(30); //延时去抖
- if(key3==0) //减键按下
- {
- shang-=1; //上限减1
- if(shang<=10)shang=10; //上限最小减到10
- }while(key3==0);//松手检测
- }
- }
- while(flag==2) //设置下限
- {
- d1=17;d2=xia/10;d3=xia%10; //显示字母L 显示下限温度值
- display(); //以下注释同上
- if(key1==0)
- {
- delay(30);
- if(key1==0)flag=0;
- while(key1==0);//松手检测
- }
- if(key2==0)
- {
- delay(30);
- if(key2==0)
- {
- xia+=5;
- if(xia>=95)xia=95;
- }while(key2==0);//松手检测
- }
- if(key3==0)
- {
- delay(30);
- if(key3==0)
- {
- xia-=1;
- if(xia<=0)xia=0;
- }while(key3==0);//松手检测
- }
- }
- }
- void zi_dong()//自动温控模式
- {
- uchar i;
- d1=dang;d2=wen_du/10;d3=wen_du%10; //显示档位,显示当前温度值
- zi_keyscan();//按键扫描函数
- display(); //调用显示函数
- if(wen_du<xia){dj=0;dang=0;}//低于下限 档位为0 电机停止
- if((wen_du>=xia)&&(wen_du<=shang))//温度大于下限,小于上限 1挡
- {
- dang=1; //档位置1
- for(i=0;i<3;i++){dj=0;display();zi_keyscan();} //PWM通过延时得到
- for(i=0;i<6;i++){dj=1;display();zi_keyscan();}
- }
- if(wen_du>shang){dj=1;dang=2;}//高温全速
- }
- void main() //主函数
- {
- uchar j;
- dj=0; //电机开
- shang=30;
- xia=20; //初始上下限值
- for(j=0;j<80;j++) //先读取温度值,防止开机显示85
- ReadTemperature();
- while(1) //进入while循环
- {
- ReadTemperature(); //读取温度值
- for(j=0;j<100;j++)zi_dong();//自动温控模式
- }
- }</font>
复制代码
-
照片 761.jpg
(1.59 MB, 下载次数: 426)
实物图正面
-
照片 762.jpg
(1.76 MB, 下载次数: 349)
实物图反面
-
-
温控风扇.zip
790.79 KB, 下载次数: 1780, 下载积分: 黑币 -5
作者: 修车找我 时间: 2016-11-10 17:25
做得不错,精致,支持一下。继续努力!
作者: 越快乐越堕落 时间: 2016-11-13 16:01
DS18B20温控时序有问题。显示2- 5是啥意思???我知道5是表示按一次可以加5,那个2是什么鬼
作者: yanyang 时间: 2017-3-14 15:34
感谢资源共享!
作者: liner 时间: 2017-3-14 20:51
非常好的资料,学习中
作者: MeMine 时间: 2017-3-15 09:22
顶不错的 学习了。 感谢楼主分享
作者: 音响王鸠摩智 时间: 2017-3-31 12:14
太好了学习学习
作者: 柳zkf 时间: 2017-4-5 10:01
厉害666666666666666666666
作者: jiliguala 时间: 2017-4-5 16:51
感谢,正在学习
作者: 安的子时明月 时间: 2017-4-5 17:08
非常好的资料,学习了,谢谢。![](static/image/smiley/default/em02.gif)
作者: 我不认识你 时间: 2017-4-5 17:41
好资料,学习学习
作者: 杨海健 时间: 2017-4-6 13:57
好资料值得分享
作者: waas1987 时间: 2017-4-9 06:44
嗯嗯,回个
作者: zhangsan 时间: 2017-4-9 16:00
感谢分享。
作者: zhangsan 时间: 2017-4-9 16:02
亲们能把原理图帖出来吗,积分不够下载不了。。。
作者: lolop 时间: 2017-4-9 16:54
顶不错的 学习了。 感谢楼主分享
作者: 哈哈哈哈1234 时间: 2017-4-10 21:57
赞赞赞
作者: 519762768 时间: 2017-4-10 22:10
好精简,易学,感谢楼主:)ㄟ(▔=▔)ㄏ
作者: jamyg 时间: 2017-4-19 09:29
赞!很好的资料
作者: zqy181818 时间: 2017-4-20 15:25
很给力
作者: 221lnmmkl 时间: 2017-4-29 22:36
好东西
作者: tnovicet 时间: 2017-4-30 01:51
感谢资源共享!学习了。
作者: wqz 时间: 2017-4-30 11:53
原理图在哪看吗、
作者: tututu 时间: 2017-4-30 16:07
感谢共享资源
作者: 陌雨烟1 时间: 2017-4-30 16:29
谢谢分享!!!
作者: 陌雨烟1 时间: 2017-4-30 16:30
谢谢分享,继续努力!!!
作者: demonli 时间: 2017-5-4 15:12
谢谢分享!
作者: 世说鑫宇 时间: 2017-5-6 22:50
感谢分享
作者: 星星一眨眼 时间: 2017-5-7 07:13
十分感谢楼主分享这么详细的资料![](static/image/smiley/default/em17.gif)
,
作者: 五号守门员 时间: 2017-5-7 09:55
果断下载‘,每天都来打点鸡血
作者: 15857153110 时间: 2017-5-7 11:29
不错,谢谢分享!!
作者: 西电小强 时间: 2017-5-8 19:53
很厉害,准备做一个试试
作者: 胡霸霸 时间: 2017-5-20 15:30
666、顶一下
作者: linnyshow 时间: 2017-5-21 20:47
不错。值得试试。
作者: zhn123 时间: 2017-5-25 07:50
要好好学习
作者: zhn123 时间: 2017-5-25 10:14
值得学习
作者: 呵呵杨 时间: 2017-5-26 15:19
谢谢楼主分享
作者: yonghu 时间: 2017-5-27 23:10
不用单片机直接驱动电机应该怎么控制速度?
作者: zhn123 时间: 2017-5-27 23:29
可以用proteus仿真吗?
作者: 单片机真有趣 时间: 2017-6-8 13:56
做得不错,精致,支持一下。继续努力!
作者: dashabi123 时间: 2017-6-8 22:10
谢谢楼主分享
作者: yongge 时间: 2017-6-9 16:34
新人来学习
作者: 小桥O流水 时间: 2017-6-10 11:51
谢谢楼主
作者: luodandelang 时间: 2017-6-23 18:14
仿真图中 74hc573的作用是什么?程序中感觉并没有用到锁存器
作者: hzlsw1 时间: 2017-6-25 15:46
仿真打不开
作者: cwsinglan 时间: 2017-7-1 19:29
访制一个看看
作者: 每一分每一秒 时间: 2017-7-5 16:18
很给力
作者: 天宇vh 时间: 2017-7-8 17:41
线路布得不是很合理
作者: yyyyl 时间: 2017-7-24 21:37
好可惜,黑币不够
作者: psswcx 时间: 2017-7-25 20:49
谢谢楼主
作者: psswcx 时间: 2017-7-26 10:10
谢谢大佬
作者: 懒羊羊and灰太狼 时间: 2017-7-27 15:10
一个新人路过
作者: mmss11 时间: 2017-10-1 21:35
必须学习一下,谢谢分享了
作者: 小小乱世 时间: 2017-10-8 21:54
非常值得学习,很好用
作者: mccca 时间: 2017-10-8 23:07
很好
作者: yuemky 时间: 2017-10-10 11:32
谢谢分享
作者: yyfpy 时间: 2017-10-19 13:39
谢谢楼主分享好资料!
作者: XDQ 时间: 2017-10-20 15:52
很不错
作者: Z禁肥 时间: 2017-10-24 08:58
很适合初学者学习
作者: 弹丸大哥 时间: 2017-10-28 19:03
风扇的话如果是12v的可以接上用吗
作者: wuxishun 时间: 2017-10-28 20:55
非常感谢不错的资料,多谢大神
作者: wakalaca 时间: 2017-10-30 14:06
仿真软件有吗
作者: mccca 时间: 2017-10-31 21:42
真的很好,非常有用
作者: 清扬化二海 时间: 2017-11-1 17:46
线有点乱了,在合理布局下就更好了
作者: TIANGEYIFANG 时间: 2017-11-18 12:56
正好需要需要这个,谢谢谢谢
作者: TIANGEYIFANG 时间: 2017-11-18 13:09
好厉害,做的很不错,下下来模范一下,666
作者: TIANGEYIFANG 时间: 2017-11-22 12:55
黑币不够下载不了,有什么办法挣的嘛,想下载这个学习,挺急的。
作者: 梦魂 时间: 2017-11-23 11:49
非常感谢大佬分享
作者: 梦魂 时间: 2017-11-23 14:07
非常感谢大佬分享
作者: DUANS 时间: 2017-11-27 11:48
咋没见原理图啊
作者: yyfpy 时间: 2017-11-27 14:30
谢谢!新手学习!
作者: Bright_Zhang 时间: 2017-12-3 15:41
好,感谢你的资料
作者: 1335191367 时间: 2017-12-5 10:31
这个资料很给力
作者: 1335191367 时间: 2017-12-5 11:02
这个有相对应的毕业设计吗
作者: 李啦啦啦 时间: 2017-12-5 14:22
厉害 学习了
作者: 浩然电脑 时间: 2017-12-5 14:28
学习学习,谢谢
作者: Coca_Cora 时间: 2017-12-14 15:37
蛮好的,正好在用呢~
作者: 2411753671 时间: 2017-12-17 20:49
好东西
作者: ray372liu 时间: 2017-12-18 15:32
谢谢楼主
作者: Sinp102 时间: 2018-1-5 12:00
这温控做的 我也是醉了 用软件延时做PWM 浪费黑币下载
作者: 九纹龙 时间: 2018-1-5 16:10
谢谢楼主
作者: hui001 时间: 2018-3-12 17:23
感谢楼主分享
作者: bb1982 时间: 2018-4-25 16:07
不错不错
作者: yzh123 时间: 2018-4-25 19:05
谢谢楼主,
作者: 戚嘉丶 时间: 2018-4-27 14:41
顶一个![](static/image/smiley/default/em01.gif)
作者: 守候枫林红叶时 时间: 2018-4-30 21:49
感谢分享,学习一下
作者: krate 时间: 2018-5-2 20:39
膜拜了,厉害!!!!1
作者: 566666123 时间: 2018-5-3 17:39
感谢资源共享!
作者: z894194853 时间: 2018-5-17 14:21
好资料,学习了
作者: a6103121 时间: 2018-5-19 12:01
拿来学习
作者: LanYan 时间: 2018-5-20 16:19
楼主写的很棒!赞!
作者: 草棚 时间: 2018-5-22 15:39
厉害了
作者: 吴奔 时间: 2018-5-28 01:08
仿真图好像不能在软件上运行啊
作者: 荷下垂柳 时间: 2018-5-28 09:16
学习了
作者: 魔菲音电子 时间: 2018-5-28 11:24
好贴,参考学习一下
作者: 单片机研究51 时间: 2018-5-30 17:21
赞一个,看来不错
作者: 想方设法 时间: 2018-5-30 17:26
哇牛逼
作者: 犀牛圣斧魔王 时间: 2018-5-31 15:15
好棒啊,我也想要
作者: liwen711 时间: 2018-6-12 22:02
请问一下,我在调试时候数码管上总是8888怎么办
作者: 二白白 时间: 2018-6-19 18:34
很给力
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |