历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2021年12月31日 | 基于51单片机的智能温控风扇

2021-12-31 来源:eefocus

硬件设计

数码管作为显示器,按键设置温控范围,当环境温度低于最低值,风扇关闭,在温度范围内,风扇为1挡,环境高于最高值,风扇为2挡;


仿真图:
0挡
在这里插入图片描述
1挡
在这里插入图片描述
2挡
在这里插入图片描述

程序设计

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

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);//松手检测

}

}

}


文件仅供参考


链接:https://pan.baidu.com/s/1_VSqQ5gwOZOXW-CKN2XGXw

提取码:uk8s

推荐阅读

史海拾趣

启英泰伦(Chiplntelli)公司的发展小趣事

启英泰伦(Chiplntelli)公司成立于2015年,专注于人工智能语音芯片及配套应用解决方案的研发。在公司创立初期,团队面临了众多技术挑战和市场竞争。然而,他们凭借对技术的深刻理解和不懈追求,成功推出了第一代深度神经网络语音AI芯片CI1006,这款芯片在行业内被认定为首创。这一重要里程碑为启英泰伦的发展奠定了坚实的基础,也标志着公司在人工智能语音芯片领域的正式起步。

B+B SmartWorx公司的发展小趣事

2016年,B+B SmartWorx与研华达成合并协议,成为研华全球大家庭的一员。这次合并是双方战略发展的重要一步,研华看中了B+B SmartWorx在物联网和工业网通领域的深厚积累,而B+B SmartWorx则借助研华在亚洲的资源与经验,进一步拓展其全球市场。合并后,双方在产品开发、业务布局等方面进行了深度融合,共同推动工业物联网领域的发展。

Gruner AG公司的发展小趣事
可用于多种应用场景中,如电源隔离、信号处理、安全控制等。
ADMOS公司的发展小趣事

在电子行业竞争日益激烈的背景下,ADMOS公司始终坚守质量第一的原则。公司建立了完善的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。这种对质量的执着追求使得ADMOS的产品在市场上获得了广泛的认可和信任,也为公司赢得了众多长期合作伙伴。

广东华裕(GDHY)公司的发展小趣事

在电子行业竞争日益激烈的背景下,ADMOS公司始终坚守质量第一的原则。公司建立了完善的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。这种对质量的执着追求使得ADMOS的产品在市场上获得了广泛的认可和信任,也为公司赢得了众多长期合作伙伴。

Bomar公司的发展小趣事

Bomar公司成立于1963年,最初是一家专注于石英晶体制造的公司。在当时的电子行业,石英晶体作为频率控制元件,对于无线通信和电子设备的稳定运行至关重要。Bomar公司通过不断的研发和技术创新,成功突破了石英晶振在宽频率范围内的高稳定性问题,满足了严格的FCC规范。这一技术突破使得Bomar公司的石英晶振在市场上获得了广泛的认可,并为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

请教:wince下怎样调试directshow filter??

最近PB开发wince的directshow filter,我是在X86的模拟器下开发的,移植了几个simple ,现在遇到了几个问题,想请教大家: 1  MessageBox(NULL, L\"点击[OK]结束播放\", L\"Play MP3\", MB_OK); 在模拟器中不能用,返回值S_OK,   & ...…

查看全部问答>

电子钟程序问题

#include #define uchar unsigned char #define ON 0 #define OFF 1 sbit buzz=P2^1; sbit key_1=P1^0; sbit key_2=P1^1; sbit key_3=P1^2; sbit key_4=P1^3; uchar display_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}, ...…

查看全部问答>

关于磁体的两个疑问

1.电磁体和永磁体都能吸钢,铁之类的东西,请问它们所能附贴的东西都是一样的吗?有没有哪种物质电磁体不能吸而永磁体能吸,或者永磁体能吸而电磁体不能吸? 2.磁体能吸铁块,在铁块与磁体间放一绝缘体,磁体仍能吸住铁块,我想问一下,有没有这样一种物质, ...…

查看全部问答>

tBoolean" is undefined要在程序中怎么添加

C:\\Keil\\ARM\\INC\\Luminary\\uart.h(146): error:  #20: identifier \"tBoolean\" is undefined   应该怎么定义…

查看全部问答>

那位懂LIERDA 的 S2E21 板子啊,程序没有了,怎么也搞不好

那位懂LIERDA 的 S2E21 板子啊,程序没有了,怎么也搞不好,网上查了,BOOT 和程序要分开,BOOT 在0到3FF,程序在0X1000后面,但用LM 的烧写软件,怎么烧写都没有用,软件用的是 KEIL ARM ,不知道还有什么地方要注意的,谢谢,…

查看全部问答>

设计一个输入AC220V,输出DC24V,20W的开关电源

各位大侠请帮忙,开关电源要过认证的,帮忙推荐下!谢谢! …

查看全部问答>

【学习心得】+电池电量监测

   最近一直在做离网光伏逆变器,在这个项目中其中一项就是用光伏组件对蓄电池充电。在充电的过程中,就要判断蓄电池何时能够充满。目前采用的方法就是判断蓄电池的电压,当监测蓄电电压到达某个值,就判定充满。即使蓄电池充满后,使用 ...…

查看全部问答>

AVR MCU可否自己重新定义一个I/O口的名称啊

AVR MCU可否自己重新定义一个I/O口的名称啊,用汇编要如何操作。 …

查看全部问答>