0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于51單片機的溫控風(fēng)扇

白茶茶668 ? 來源:白茶茶668 ? 作者:白茶茶668 ? 2023-08-01 00:57 ? 次閱讀

設(shè)計要求:

1.本設(shè)計基于STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機 ?

2.采用DS18B20溫度傳感器測溫(0-99.9°C),三極管驅(qū)動數(shù)碼管顯示溫度和風(fēng)扇的檔位。 ?

3.共3個按鍵:設(shè)置、加、減。按一下設(shè)置可以設(shè)置上限,再按下設(shè)置下限,均可以按鍵加減調(diào)整。 ?

4.利用PWM調(diào)速,當溫度低于下限時,風(fēng)扇不轉(zhuǎn)動,當溫度處于上、下限之間時1檔轉(zhuǎn)動(50%的轉(zhuǎn)速),當溫度超過上限時,全速轉(zhuǎn)動。

使用說明: 一共3個按鍵:設(shè)置、加、減 按下設(shè)置鍵的時候才可以加減。 按一下設(shè)置鍵,是設(shè)置溫度的上限,再按下設(shè)置鍵,是設(shè)置溫度的下限,再按下設(shè)置鍵是退出并保存。

部分程序:

#include

#include //包含頭文件

#define uchar unsigned char

#define uint unsigned int //宏定義


#include "eeprom52.h"

////////////////////

sbit dj=P1^0;//電機控制接口

sbit DQ=P1^6;//溫度傳感器接口

//////////按鍵接口/////////////////////////////////

sbit key1=P3^5;//設(shè)置溫度

sbit key2=P3^6;//溫度加

sbit key3=P3^7;//溫度減

//////////////////////////////////////////////////////

sbit w1=P2^4;

sbit w2=P2^5;

sbit w3=P2^6;

sbit w4=P2^7; //數(shù)碼管的四個位

/////共陰數(shù)碼管段選//////////////////////////////////////////////

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;//顯示數(shù)據(jù)暫存變量

uchar m;

uchar js;


/******************把數(shù)據(jù)保存到單片機內(nèi)部eeprom中******************/

void write_eeprom()

{

SectorErase(0x2000); //清除扇區(qū)

byte_write(0x2000, shang); //寫上限數(shù)值到扇區(qū)

byte_write(0x2001, xia); //寫下限數(shù)值到扇區(qū)

byte_write(0x2060, a_a); //寫初始變量到扇區(qū)指定位置

}


/******************把數(shù)據(jù)從單片機內(nèi)部eeprom中讀出來*****************/

void read_eeprom()

{

shang = byte_read(0x2000); //從扇區(qū)讀取上限數(shù)據(jù)

xia = byte_read(0x2001); //從扇區(qū)讀取下限數(shù)據(jù)

a_a = byte_read(0x2060); //從扇區(qū)讀取初始變量

}


/**************開機自檢eeprom初始化*****************/

void init_eeprom()

{

read_eeprom(); //先讀扇區(qū)的數(shù)據(jù)

if(a_a != 1) //判斷是否是新單片機(原理:新的單片機扇區(qū)里的數(shù)據(jù)都是0,這里判斷是否不等于1。如果是不等于1,就是等于0,那就是新單片機了,就會執(zhí)行下面的上下限值初始化數(shù)值的語句,并讓a_a變成1,下次開機就會知道是用過的單片機了就會讀取EEPROM里的上下限數(shù)據(jù)了)

{

shang = 30; //上限數(shù)值初始為30

xia = 20; //下限數(shù)值初始為20

a_a = 1; //初始值變量賦值1,下次開機就會直接讀取EEPROM內(nèi)的上下限數(shù)據(jù)

write_eeprom(); //將初始的數(shù)據(jù)保存進單片機的EEPROM

}

}


void delay(uint ms) //延時函數(shù),大約延時1ms

{

uchar x;

for(ms;ms>0;ms--)

for(x=121;x>0;x--);

}

/***********ds18b20延遲子函數(shù)(晶振12MHz )*******/

void delay_18B20(uint i)

{

while(i--);

}

/**********ds18b20初始化函數(shù)**********************/

void Init_DS18B20()

{

uchar x=0;

DQ=1; //DQ復(fù)位

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讀一個字節(jié)**************/

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寫一個字節(jié)****************/

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); // 啟動溫度轉(zhuǎn)換

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 zi_keyscan()//自動模式按鍵掃描函數(shù)

{

if(key1==0) //設(shè)置鍵按下

{

delay(80); //延時去抖

if(key1==0)

{

flag=1; //再次判斷按鍵,按下的話進入設(shè)置狀態(tài)

while(key1==0);//松手檢測 //按鍵釋放

}

}

while(flag==1) //進入設(shè)置上限狀態(tài)

{

d1=18;d2=shang/10;d3=shang%10; //顯示字母H 和上限溫度值

wKgZomTH5_-AJqGTAAOsFkeK-iY995.png

wKgaomTH6ACAIuObAAIt_G5BgGA739.png

wKgZomTH6ACADuL_AAVVfbZyj6o138.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2940

    瀏覽量

    156078
  • 51單片機
    +關(guān)注

    關(guān)注

    274

    文章

    5702

    瀏覽量

    123623
  • 溫控風(fēng)扇
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

    5106
收藏 人收藏

    評論

    相關(guān)推薦

    51單片機溫控風(fēng)扇(含程序+原理圖+仿真+PCB) 精選資料分享

    1.本設(shè)計基于STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機2.采用DS18B20溫度傳感器測溫,74HC573驅(qū)動數(shù)碼管顯示溫度和
    發(fā)表于 07-20 06:33

    怎樣去設(shè)計一種基于51單片機溫控風(fēng)扇系統(tǒng)

    146【畢設(shè)課設(shè)】基于51單片機溫控風(fēng)扇設(shè)計【資源下載】下載地址如下:覆銅板2017-271、51溫控
    發(fā)表于 09-08 06:18

    基于51單片機溫控風(fēng)扇lcd1602液晶設(shè)計仿真智能學(xué)習(xí)PWM資料 精選資料分享

    視頻演示:https://www.bilibili.com/video/BV1***4y1C7fm/功能操作說明:本設(shè)計包括四個按鍵,單片機復(fù)位按鍵,設(shè)置按鍵,加鍵,減鍵。 開機運行后讀取溫度值
    發(fā)表于 09-08 07:43

    基于51單片機溫控風(fēng)扇設(shè)計

    功能操作說明:本設(shè)計包括四個按鍵,單片機復(fù)位按鍵,設(shè)置按鍵,加鍵,減鍵。 開機運行后讀取溫度值,根據(jù)默認設(shè)置上下限決定電機運行檔位。沒有按鍵按下情況下會一直運行。 按下設(shè)置鍵后進入設(shè)置模式,第一次按
    發(fā)表于 09-08 07:19

    51單片機溫控風(fēng)扇仿真原理圖相關(guān)資料下載

    {shang-=1;//上限減1if(shang
    發(fā)表于 09-08 06:54

    基于51單片機溫控風(fēng)扇電路程序及說明

    基于51單片機溫控風(fēng)扇,供學(xué)弟學(xué)妹們學(xué)習(xí)用。感興趣可以根據(jù)下面的資料自己焊接一個電路。一、程序及說明#include#include //包含頭文件#define uchar uns
    發(fā)表于 09-08 07:58

    基于51單片機溫控風(fēng)扇設(shè)計

    基于51單片機溫控風(fēng)扇設(shè)計。
    發(fā)表于 04-28 11:34 ?125次下載

    基于51單片機溫控風(fēng)扇程序

    電子發(fā)燒友網(wǎng)站提供《基于51單片機溫控風(fēng)扇程序.zip》資料免費下載
    發(fā)表于 05-29 08:00 ?51次下載

    51單片機溫控應(yīng)用

    51單片機溫控應(yīng)用
    發(fā)表于 10-13 09:26 ?38次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>溫控</b>應(yīng)用

    使用51單片機控制數(shù)碼管顯示的溫控風(fēng)扇源代碼免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機控制數(shù)碼管顯示的溫控風(fēng)扇源代碼免費下載。
    發(fā)表于 12-30 08:00 ?13次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>控制數(shù)碼管顯示的<b class='flag-5'>溫控</b><b class='flag-5'>風(fēng)扇</b>源代碼免費下載

    使用51單片機實現(xiàn)溫控風(fēng)扇的程序和仿真資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機實現(xiàn)溫控風(fēng)扇的程序和仿真資料免費下載。
    發(fā)表于 01-14 08:00 ?13次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>實現(xiàn)<b class='flag-5'>溫控</b><b class='flag-5'>風(fēng)扇</b>的程序和仿真資料免費下載

    基于51單片機溫控風(fēng)扇系統(tǒng)控制設(shè)計(畢業(yè)設(shè)計資料)

    146【畢設(shè)課設(shè)】基于51單片機溫控風(fēng)扇設(shè)計【資源下載】下載地址如下:https://docs.qq.com/doc/DTlRSd01BZXNpRUxl覆銅板2017-271、
    發(fā)表于 11-04 19:36 ?20次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>溫控</b><b class='flag-5'>風(fēng)扇</b>系統(tǒng)控制設(shè)計(畢業(yè)設(shè)計資料)

    基于51單片機的智能溫控風(fēng)扇

    51單片機+DS18B20溫度傳感器+共陽四位數(shù)碼管+風(fēng)扇+獨立按鍵+DC電源構(gòu)成。
    的頭像 發(fā)表于 12-19 09:21 ?3133次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的智能<b class='flag-5'>溫控</b><b class='flag-5'>風(fēng)扇</b>

    基于51單片機溫控風(fēng)扇Proteus仿真設(shè)計

    基于51單片機溫控風(fēng)扇Proteus仿真設(shè)計,資料包含源程序及仿真
    發(fā)表于 04-20 16:12 ?48次下載

    基于STC89C51單片機溫控風(fēng)扇設(shè)計方案

    本設(shè)計基于STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機
    發(fā)表于 08-21 15:26 ?2053次閱讀
    基于STC89C<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>溫控</b><b class='flag-5'>風(fēng)扇</b>設(shè)計方案