51单片机温控风扇

发布者:runaway2000最新更新时间:2019-11-28 来源: 51hei关键字:51单片机  温控风扇  DS18B20 手机看文章 扫描二维码
随时随地手机看文章

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电源插头


#include

#include                         //包含头文件

#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);                                          //延时去抖

[1] [2]
关键字:51单片机  温控风扇  DS18B20 引用地址:51单片机温控风扇

上一篇:利用C51单片机模拟SPI进行双机通信
下一篇:AD9850与单片机波形生成程序及设计

推荐阅读最新更新时间:2024-11-12 10:52

基于51单片机的温度采集系统简单应用设计
Internet的快速发展和成功促进了以太网(Ethernet)技术的发展和应用的扩展,所涉及的领域十分广泛,如传统的工业控制、信息家电、智能家居、安全监控、楼宇自动化、医疗、环境监测等。大多数的数据采集设备的通信接口符合UART 通信标准。这种通信方式的数据传输半径十分有限,并不能满足远距离传输的需求,并且不能接入Internet.因此数据的交互接入Internet 就显得非常重要了。 1 系统的总体方案及各主要模块设计 系统以Microsemi(Actel)公司的基于FLASH 架构的SoC FPGA 产品SmartFusion2器件为核心 .系统通过Fabric架构实现多路UART对外相应数据进行采集,进行并/串转换写入Fa
[电源管理]
基于<font color='red'>51单片机</font>的温度采集系统简单应用设计
51单片机入门 - 学习笔记
什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。
[单片机]
<font color='red'>51单片机</font>入门 - 学习笔记
89C51单片机内部结构深度解析一
9C51单片机内部结构深度解析一:单片机内部资源ROM/RAM/CLOCK/RST 8位CPU:和32位处理器的意思一样,计算机中的位数指的是CPU一次能处理的最大位数。32位计算机的CPU一次最多能处理32位数据,同理,8位的CPU意味着89C51单片机只能够处理8位的数据。 4K ROM:4K字节闪烁可编程可擦除只读存储器(FPEROM Flash Programmable and Erasable Read Only Memory),主要用来存放程序和表格常数,地址是0000H~0FFFH,总线地址的宽度为16位,因此片内ROM最大为2^16次方=64K,片外的ROM最大也是64K,片内片外的ROM采用统一编址的方
[单片机]
基于AT89C51单片机的算术运算计算器系统设计
本设计是基于AT89C51单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除4 位无符号数字的简单四则运算,并在LED 上相应的显示结果。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51 单片机,输入采用4×4 矩阵键盘。显示采用4 位7 段共阳极LED 动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计,这里推荐大家看看十天学会单片机。 0 引言 本系统采用AT89C51单片机作为控制器,用来实现实现四位数的“+”,“-”,“*”,“/”运算,运算结果通过数码管显示,并具有有清零功能。AT89C51 具有如下特点:40 个引脚,4k BytesFlash 片内程
[单片机]
基于AT89C<font color='red'>51单片机</font>的算术运算计算器系统设计
适用于单片机的FFT快速傅里叶变换算法,51单片机都能用
源码 FFT.c /********************************************************************* 快速傅里叶变换C程序包 函数简介:此程序包是通用的快速傅里叶变换C语言函数,移植性强,以下部分不依 赖硬件。此程序包采用联合体的形式表示一个复数,输入为自然顺序的复 数(输入实数是可令复数虚部为0),输出为经过FFT变换的自然顺序的 复数.此程序包可在初始化时调用create_sin_tab()函数创建正弦函数表, 以后的可采用查表法计算耗时较多的sin和cos运算,加快可计算速度.与 Ver1.1版相比较,Ver1.2版在创建正弦表时只建立了1/4个正弦波的采样值, 相比
[单片机]
适用于单片机的FFT快速傅里叶变换算法,<font color='red'>51单片机</font>都能用
51单片机初学实践:用BME280模块获取温度、湿度和气压数据
我想为电子钟增加环境数据监测功能,主要是气温,湿度和气压这三项,BME280模块可以测量这三项数据,是一个不错的选择。 今天对照datasheet和之前坛友分享的资料,编写代码实现了气温,湿度和气压这三项数据的读取,并在LCD1602屏幕和UART打印显示, 效果如图所示: 在实践过程中,有以下心得: 1、BME280模块有三种工作模式,其中forced mode适合我的需要 2、我的需求,可以对照Weather Monitoring方式,文档上有详细说明 我对精度要求并不高,oversampleing选择x1即可,如此设置,功耗也最小。 3、读取的ADC数据,不能直接使用,必须进行补偿计算,
[单片机]
<font color='red'>51单片机</font>初学实践:用BME280模块获取温度、湿度和气压数据
51单片机上实时多任务操作系统-教程
RTX51是用与8051系列的实时多任务RTOS 1。 RTX 两个版本区别: RTX51 FULL:允许4个优先任务循环和切换,并行利用终端,支持邮箱系统的信号和消息传递 RTX TINY 子集,不支持占先式任务切换,不能进行信息处理 RTX的循环任务调度 准并行 利用内部定时器的中断实现定时 使用时不需要包含main()函数,自动从任务0开始 如果包含main()函数,则需要利用os-start-system 或 os-creat-task来启动 Example1: ps:注意事项: 关于Keil报错 *** FATAL ERROR L210: I/O ERROR ON INPUT FILE:缺少RTX51.LIB
[单片机]
DS18b20温度检测与显示库程序
************************************************************************************************** DS18b20.H ******************* DQ 接 p2.2 ******************* #ifndef __DS18b20_H__ #define __DS18b20_H__ #include msp430f2232.h ********************************* ** 引脚定义 ** ********************************* #de
[单片机]
<font color='red'>DS18b20</font>温度检测与显示库程序
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved