【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

这篇具有很好参考价值的文章主要介绍了【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

1、本设计是基于AT89C51/52单片机为核心的温控风扇系统,使用Proteus进行仿真分析。

2、由于上传后图片压缩,可以私信联系获取清晰图片。

3、本次为本人结课设计,整体比较简单,如有疑问欢迎大家交流讨论!

 目录

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

一、开发软件

二、硬件搭建

2.1、系统整体架构介绍

2.2、系统核心元件介绍(含原理简述)

2.3、Proteus原理图设计

三、编程设计

3.1、程序流程图

3.2、具体实现代码(含详细注释)

四、最终效果

4.1、调整设定温度

4.2、环境温度高于设定温度

4.3、环境温度低于设定温度


一、开发软件

软件编程环境:Keil uVision5

硬件仿真环境:Proteus 8 Professional(Proteus 8.12 SP0)

在这里我不介绍软件详细的下载流程(网上有比较详细的流程可以参考),只提供相应的百度网盘链接供大家自取。

Keil5(C51及MDK版本):百度网盘 请输入提取码

Proteus 8.12 SP0:百度网盘 请输入提取码

二、硬件搭建

2.1、系统整体架构介绍

整体系统框图如下图所示,系统的核心为AT89C51/52单片机,主要包括按键电路、数码管显示电路以及DS18B20温度传感器电路和LED报警和风扇电路四大模块。

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)
系统整体架构
  • 系统的工作原理如下:

1、利用温度传感器DS18B20检测环境温度并输出数字温度信号给单片机AT89C51/52进行处理,随后在LED数码管上显示当前环境温度值;

2、通过Proteus中的直流电机模拟风扇的转动;

3、通过三个按键来实现选择调节预设温度、提高预设温度值和降低预设温度值。

  • 系统的工作流程如下:

如果环境温度高于预设温度将会自动报警,这时LED灯亮起,风扇启动;当环境温度低于预设温度后将自动取消报警,这时LED灯熄灭,风扇停转。

2.2、系统核心元件介绍(含原理简述)

2.2.1、AT89C51/52单片机

控制系统模块主要采用的是AT89C51/52作为微处理单元进行控制。AT89C51/52是一款低功耗、高性能、COMS八位微处理器,片内有4K字节在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为10年。

AT89C51/52单片机引脚图如下图所示:

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

2.2.2、DS18B20数字温度传感器

  • DSB18B20的优势

DS18B20是常用的数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。

相比传统的热敏电阻以及其他温度测量元器件,DS18B20的数据可直接读出,能通过编程实现12位的数字值读数方式。当DS18B20模块接收到温度转换指令时,会立马启动转换。转换完成后,温度值会以二进制补码形式储存在高速暂存存储器的前两个字节。

  • DS18B20温度转换原理

AT89C51单片机可以通过单线接口按照由低位到高位的顺序读出该数据,由于寄存器中存储的是二进制环境温度值,因此还需要经过转换才能得到实际环境温度值。首先将二进制数值转换为十进制数值,随后根据该数据的正负对数据进行处理,如果是正数,直接乘以0.0625,如果是负数,则进行取反加1,即可得到实际的温度值。

2.2.3、LED数码管

  • LED数码管的结构

LED数码管主要是由8段发光二极管组成,其中a~g为数字和字符显示段,dp为小数点的显示,通过a~g共7段发光二极管,可以显示0~9和A~F共16个数字和字母。

LED数码管可以分为共阴极和共阳极两种结构。共阴极结构将8个发光二极管阴极连在一起,共阳极结构把8个发光二极管阳极连在一起。

  • LED数码管的原理

通过单片机引脚输出高低电平,可使数码管显示相应的数字或字母,这种使数码管显示字形的数据称为段选码,如下表所示。

显示字符 共阴极段码 共阳极段码 显示字符 共阴极段码 共阳极段码
0 0x3f 0xbf 8 0x7f 0xff
1 0x06 0x86 9 0x6f 0xef
2 0x5b 0xdb A 0x77 0xf7
3 0x4f 0xcf B 0x7c 0xfc
4 0x66 0xe6 C 0x39 0xb9
5 0x6d 0xed D 0x5e 0xde
6 0x7d 0xfd E 0x79 0xf9
7 0x07 0x87 F 0x71 0xf1

2.3、Proteus原理图设计

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

三、编程设计

3.1、程序流程图

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

3.2、具体实现代码(含详细注释)

  • main.c

#include<reg51.h>
#include"ds18b20.h"
#define uchar unsigned char
#define uint unsigned int         
​
​uint wendu;            //温度变量
​uint sheding=20;        //默认设定温度值
​uchar shi,ge;            //数码管显示数值
​uint flag;              //标记
​sbit motor=P3^7;        //直流电机接口
​sbit key1=P1^0;        //调整设定温度
​sbit key2=P1^3;        //温度+
​sbit key3=P1^6;        //温度-
​sbit w1=P2^0;
​sbit w2=P2^1;          //数码管接口
​sbit led=P3^4;          //LED接口
​
//共阴数码管段选
​uchar table[16]={
​    0x3f,0x06,0x5b,0x4f,        //0,1,2,3
​    0x66,0x6d,0x7d,0x07,       //4,5,6,7
    0x7f,0x6f,0x77,0x7c,        //8,9,A,b
​    0x39,0x5e,0x79,0x71,       //C,d,E,F
​};
​
//显示与报警函数
​void display(){
​    w1=0;
​    P0=table[shi];
​    delay(10);             //第1位数码管显示数据
​    P0=0x00;
​    w1=1;                //关闭显示消除动态扫描阴影
​​    w2=0;
​    P0=table[ge];
​    delay(10);             //第2位数码管显示数据
​    P0=0x00;
​    w2=1;                //关闭显示消除动态扫描阴影
​    //当温度高于设定值,LED灯亮起
​    if(wendu>sheding){
​       led=0;
​       motor=0;
​    }
​    else{
​       led=1;
​       motor=1;
​    }
​}
​
//按键事件
​void prebutton(){
​    if(key1==0){                 //按下key1,调整设定温度
​       delay(30);
​       if(key1==0)
​           flag=1;
​       while(key1==0);           //松手检测
​    }
​    while(flag==1){
​       shi=sheding/10;
​       ge=sheding%10;
​       display();                 //显示设定温度值
​       //再次按下key1时跳出循环
​       if(key1==0){
​           delay(30);
​           if(key1==0)
              flag=0;
​           while(key1==0);
​       }
​       //温度+
​       if(key2==0){
​           delay(30);                     
​           if(key2==0)
​              sheding+=1;
​           while(key2==0);
​       }
​       //温度-
​       if(key3==0){
​           delay(30);
​           if(key3==0)
​              sheding-=1;
           while(key3==0);
​       }        
​    }
​}
​
//主函数
​void main(){
​    uchar j;
​    while(1){
​       wendu=ReadTemperature();
​       shi=wendu/10;
​       ge=wendu%10;
​       for(j=0;j<80;j++){
​           prebutton();
​           display();          
​       }
​    }
​}
  • ds18b20.c

#include "ds18b20.h"
​​
sbit DQ=P3^1;         //数据传输线接单片机的相应的引脚
​
//延时函数
void delay(uint k){
    while(k--);
}
​
//DS18B20初始化函数
void ds18b20_init(){
    uchar x=0;
    DQ=1;       //DQ先置高
    delay(8);          //稍做延时
    DQ=0;       //发送复位脉冲
    delay(80);          //延时大于480us
    DQ=1;       //拉高总线
    delay(14);
    x=DQ;      //稍做延时后,若x=0则初始化成功,x=1则初始化失败
    delay(20);
}
​
//字节读取函数
uchar Read(){
    uchar i=0;
    uchar dat=0;
    for (i=8;i>0;i--){
       DQ=0;            //给脉冲信号
       dat>>=1;          //数据右移位
       DQ=1;            //给脉冲信号
       if(DQ)
           dat|=0x80;      //读取数据线得到对应状态
       delay(4);
    }
   return(dat);
}
​
//字节写入函数
void Write(uchar dat){
    uchar i=0;
    for(i=8;i>0;i--){
       DQ=0;
       DQ=dat&0x01;     //从低位开始发送数据
       delay(5);
       DQ=1;
       dat>>=1;
    }
}
​
//温度读取函数
uint ReadTemperature(){
    uint temp;                 //温度变量
    uchar a=0;                //寄存器温度低位
    uchar b=0;                //寄存器温度高位
    ds18b20_init();            //DS18B20初始化
    Write(0xcc);          //跳过读序列号的操作
    Write(0x44);       //启动温度转换
    delay(100);            //转换有一定的延时
    ds18b20_init();         //DS18B20初始化
    Write(0xCC);      //跳过读序列号的操作
    Write(0xBE);      //读取温度寄存器,前两位值分别为温度的低位和高位
    delay(100);        
    a=Read();       //读取温度值低位
    b=Read();       //读取温度值高位
//温度转换:实际上温度有正负之分,但是负温度的处理比较复杂,只完成了正温度的转换
    temp=((b*256+a)*0.0625);
    return temp;
}

四、最终效果

4.1、调整设定温度

按下调整设定温度按钮,将设定温度调整为30℃后,再次按下调整设定温度按钮,完成设定温度的设置。

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

4.2、环境温度高于设定温度

人为调整DS18B20测得的环境温度为35℃,此时环境温度高于设定温度30℃,系统会自动开启报警电路,此时LED灯亮起,直流电机开始转动。

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)

4.3、环境温度低于设定温度

随后人为调整DS18B20测得的环境温度为20℃,此时环境温度低于设定温度30℃,系统会自动关闭报警电路,此时LED灯熄灭,直流电机停止转动。

【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)文章来源地址https://www.toymoban.com/news/detail-467658.html

到了这里,关于【嵌入式开发-8051】详细:基于AT89C52单片机设计的温控风扇(Proteus仿真设计-含设计原理图、程序源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于AT89C51单片机的电子时钟设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87695258?spm=1001.2014.3001.5503 源码获取 主要内容: 1.设计出电子数字钟的电路,并用protus进行仿真画出对应的电路图 2.设计出电子数字钟的源程序,并用Keil进行编辑生成HEX文件 3.在protus中进行测试。

    2024年02月09日
    浏览(67)
  • 基于AT89C51单片机的温度计设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87773445 源码获取 主要内容: 设计一个简易温度计;要求电路实现如下功能: 设计通过单片机和数码管、led灯等组成,可以显示温度,并且可以显示大于零度的温度和小于零度的温度,还可以超出

    2024年02月05日
    浏览(59)
  • 基于AT89C52单片机的温度检测报警设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87708680?spm=1001.2014.3001.5503 源码获取 主要内容: 本系统的设计主要是了解了单片机微型计算机,根据现实生活的需要以及已掌握的理论知识,制定出单片微型计算机实时控制的温度报警系统设计方

    2024年02月09日
    浏览(66)
  • 基于AT89C51单片机的交通灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87779238?spm=1001.2014.3001.5503 源码获取 主要内容: 在日常生活中,交通灯是一项必不可少的公共设施,可 以维护道路的畅通和交通的秩序。如若交通灯发生故障,那 么后果可想而知。因此,交通灯

    2024年02月08日
    浏览(58)
  • 基于AT89C51单片机的温度检测报警设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87777752?spm=1001.2014.3001.5503 源码获取 主要内容: 基于51单片机设计一个温度检测报警器,至少具有以下功能:温度的检测和超过设定值时的报警功能 基本要求: 1、功能齐全,要配有功能说明;

    2024年02月03日
    浏览(60)
  • 基于AT89C52单片机的交通信号灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87772657 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功

    2024年02月10日
    浏览(63)
  • 【小作业】基于AT89C51的按键控制流水灯作业

    单片机与4个独立按键k1~k4及8个LED指示灯的一个独立式键盘。4个按键接在P1.0~P1.3引脚,P3口接8个LED指示灯,控制LED指示灯亮与灭。 按下k1键,P3口8个LED正向(由上至下,间隔1盏灯)流水点亮; 按下k2键,P3口8个LED反向(由下而上,间隔1盏灯)流水点亮; 按下k3键,P3口8个LE

    2024年02月06日
    浏览(36)
  • 基于AT89C51单片机的电子万年历系统

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87708258 源码获取 主要内容: 电子万年历系统以实时时钟芯片DS1302和AT89C52单片机为主要研究对象,着重进行51单片机控制系统的设计研究和如何读取DS1302内部时钟信息的研究。以及运用18B20进行实

    2024年02月09日
    浏览(51)
  • 基于AT89C51单片机的电子时钟设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87779867?spm=1001.2014.3001.5503 源码获取 主要内容: 使用DS1302芯片作为计时设备,用6个7段LED数码管或者LCD162作为显示设备,实现时钟功能; 基本要求: (1)可以分别设定小时、分钟和秒,复位后时

    2024年02月06日
    浏览(54)
  • 基于AT89C51单片机的简易计算机设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87715642?spm=1001.2014.3001.5503 源码获取 主要内容: 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运行来完成加、减、乘和除的简单计算功能。 基本要求: 1、采

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包