温控风扇的代码(开源) 新手写代码

博主分享了一篇关于使用51单片机制作温控风扇的项目,包括电机驱动、LCD1602显示、DS18B20温度传感器、红外遥控和蜂鸣器等功能。文章详细介绍了代码实现,并提及了代码效率和硬件调试的挑战。项目仍有改进空间,如添加PID模糊控制,未来计划涉及GPRS模块和ARDUINO项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近为了练习51单片机,便做了一个温控风扇的项目。

  先说一下温控风扇的功能吧,对于我来说,已经接触51单片机已经有一年的时间了,可是真正的开始做东西,却没有多长时间。我之前只是用51做过一个光立方。而光立方的代码却十分的简单(只是简单的光立方,,没有涉及更加复杂的原理,,,像神马傅里叶变换,,神马高大上的东西,,,我还是先学好高数吧),只是用了个74HC573进行锁存进而位控制。。。。。从这说起来,光立方基本都是队友焊接的,,我只是一个编程者(苦逼的程序员),而光立方也没有做的多么完美,但是已经尽力了,当时只接触51一个月便做完了光立方。

  最近因为一个比赛而接触了温控风扇,当时,,比赛没做出来(我实在是还太水),于是把未完成品带回去继续做,把上面的基本要求加拓展要求基本都做了出来,,唉 ,硬件调试的例程可真是艰辛啊,,代码更不用提  唉  ,说多了鼻子一把泪一把的。。好了,不扯太多东西,进入正题。

  此温控风扇的功能:大体来说,分为以下几类:1,电机驱动(不用多说)2,LCD1602(咦,这是做神马的?不用急,下面会提到)3,DS18B20(哎呀,温控啊温控,说实话,这个时序图到现在还没记住,哎呀,只能靠现查了,再copy一下别人的例程修改一下啦),,,,,,有点懒,,但是都看懂啦,也会修改啦。4,红外遥控器加发射器。。。唉,这个红外遥控从一开始到明白可是耗费了我一年的时间啊。5,蜂鸣器,,额外功能,没打算加了。

好了,开始贴贴代码啦啦啦~~~~~~~~~~~~~~~~~~~~~~~~~~·

#include <reg52.h>
#include "18B20.h"
#define e P0 //LCD1602的D0~D7    
/***************************************************************************** 
* TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;         * 
* TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器* 
* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 * 
* 间为1ms*65536=65.536ms                                                     * 
******************************************************************************/ 
#define V_TH0  0x0FC                  
#define V_TL0   0x18                  
#define V_TMOD 0X01 
#define T25 250
#define T30 300
#define T35 350
#define T40 400
sbit lcden=P1^4;//使能端
sbit lcdrs=P1^2;//读写选择端
sbit lcdrw=P1^5;//读写选择端
uchar num;
int result;
bit IrOK;
unsigned char IrValue[6];
unsigned char Time;
void IrInit();
void hongwai();
void deal(uint);
unsigned char ZKB1,ZKB2,ZKB3; 
sbit K1=P2^3;
sbit K2=P2^7;
sbit K3=P2^6;  
sbit K4=P2^5;    
void init_sys(void);            /*系统初始化函数*/ 
void delay(uint z);
sbit IRIN = P3^2;
//--定义全局变量--//
void jiema();
//--声明全局函数--//
extern void DelayMs(unsigned int );
sbit dianji=P1^1; 
/*******************************************************************************
* 函数名         : main
* 函数功能   : 主函数
* 输入           : 无
* 输出         : 无
*******************************************************************************/
/*******************************************************************************
* 函数名         : LCD延时
* 函数功能   : 延时
* 输入           : z
* 输出         : 无
*******************************************************************************/
void delay_lcd(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
 {
  for(y=110;y>0;y--);
 }
}
void write_com(uint com)//写命令
{  
    lcden=0;  
lcdrw=0;
lcdrs=0;

e=com;
delay_lcd(5);
lcden=1;
delay_lcd(5);
lcden=0;
}
void init()//进行初始化
{
lcden=0;
write_com(0x3c);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void write_data(uint date)//写数据
{
    lcden=0;
    lcdrw=0;
 lcdrs=1;
 e=date;
 delay_lcd(15);
 lcden=1;
 delay_lcd(15);
 lcden=0;
}
/*******************************************************************************
*函数名         :红外遥控
*函数功能       :红外遥控
*输入           ;无
*输出           ; 无                                                              
**********************************************************************************/


void hongwai()
{
   dianji=0;
// unsigned char i;
IrInit();
}  
/*******************************************************************************
* 函数名         : DelayMs()
* 函数功能   : 延时
* 输入           : x
* 输出   &

基于单片机温控风扇的设计 摘 要 温控风扇在现代社会中的生产以及人们的日常生活中都有广泛的应用,如工业生产中大型机械散热系统中的风扇、现在笔记本电脑上的广泛应用的智能CPU风扇等。本文设计了基于单片机温控风扇系统,采用单片机作为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度的比较实现风扇电机的自动启动和停止,并能根温度的变化自动改变风扇电机的转速,同时用LED八段数码管显示检测到的温度与设定的温度。 关键词:单片机、DS18B20、温控风扇 第一章 整体方案设计 1.1 前 言 在现代社会中,风扇被广泛的应用,发挥着举足轻重的作用,如夏天人们用的散热风扇、工业生产中大型机械中的散热风扇以及现在笔记本电脑上广泛使用的智能CPU风扇等。而随着温度控制技术的发展,为了降低风扇运转时的噪音以及节省能源等,温控风扇越来越受到重视并被广泛的应用。在现阶段,温控风扇的设计已经有了一定的成效,可以使风扇根据环境温度的变化进行自动无级调速,当温度升高到一定时能自动启动风扇,当温度降到一定时能自动停止风扇的转动,实现智能控制。 随着单片机在各个领域的广泛应用,许多用单片机作控制的温度控制系统也应运而生,如基于单片机温控风扇系统。它使风扇根据环境温度的变化实现自动启停,使风扇转速随着环境温度的变化而变化,实现了风扇的智能控制。它的设计为现代社会人们的生活以及生产带来了诸多便利,在提高人们的生活质量、生产效率的同时还能节省风扇运转所需的能量。 本文设计了由ATMEL公司的8052系列单片机AT89C52作为控制器,采用DALLAS公司的温度传感器DS18B20作为温度采集元件,并通过一个达林顿反向驱动器ULN2803驱动风扇电机的转动。同时使系统检测到得环境温度以及系统预设的温度动态的显示在LED数码管上。根据系统检测到得环境温度与系统预设温度的比较,实现风扇电机的自动启停以及转速的自动调节。 1.2 系统整体设计 本设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理,在LED数码管上显示当前环境温度值以及预设温度值。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。同时采用PWM脉宽调制方式来改变直流风扇电机的转速。并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。系统结构框图如下: 结 论 本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围能能实现转速的连续调节,LED数码管能连续稳定的显示环境温度和设置温度,并能通过两个独立按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。实现了基于单片机温控风扇的设计。 本系统设计可推广到各种电动机的控制系统中,实现电动机的转速调节。在生产生活中,本系统可用于简单的日常风扇的智能控制,为生活带来便利;在工业生产中,可以改变不同的输入信号,实现对不同信号输入控制电机的转速,进而实现生产自动化,如在电力系统中可以根据不同的负荷达到不同的电压信号,再由电压信号调节不同的发电机转速,进而调节发电量,实现电力系统的自动化调节。综上所述,该系统的设计和研究在社会生产和生活中具有重要地位。 附录2:程序代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P1^7; sbit key1=P1^3; sbit key2=P1^4; sbit dianji=P3^1; float ff; uint y3; uchar shi,ge,xiaoshu,sheding=20,gaonum,dinum; uchar code dispcode[]={ //段码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code tablel[]={ //带小数点的段码 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd, 0x87,0xff,0xef}; uchar dispbitcode[]={ //位选 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; uchar dispbuf[8]={0,0,0,0,0,0,0,0}; void Delay(uint num)// 延时函数 { while( --num ); } void digitalshow(uchar a4,uchar a3,uchar a2,uchar a1,uchar a0) { dispbuf[0]=a0; dispbuf[1]=a1; dispbuf[2]=a2; dispbuf[3]=a3; dispbuf[4]=a4; P2=0xff; P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; Delay(1);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值