分享
分销 收藏 举报 申诉 / 38
播放页_导航下方通栏广告

类型温控风扇专业系统设计.docx

  • 上传人:快乐****生活
  • 文档编号:3002005
  • 上传时间:2024-06-12
  • 格式:DOCX
  • 页数:38
  • 大小:980.22KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    温控 风扇 专业 系统 设计
    资源描述:
    自动化系统创意设计大赛作品说明书 作品名称:温控风扇系统设计 队 员 : 4月 目录 1、引言 3 2、背景 3 3、意义和应用 3 4、原理介绍 4 5、方案设计 4 6、STC12C5A60S2单片机 5 6.1介绍 5 6.2 PWM寄存器设置 5 6.3 PWM占空比计算方法 5 6.4 I/O工作方法设置 6 7、LCD液晶显示器 6 8、温度传感器DS18B20 8 8.1 初始化 9 8.2 写操作 10 8.3 读操作 10 9、风扇 10 拓展1: 10 拓展2: 11 10、硬件电路设计 12 10.1原理图和部分电路PCB图 12 10.2 电机驱动电路 13 11、软件设计 14 11.1主函数步骤图 14 11.2 温度控制风扇程序步骤图 15 11.3 按键控制风扇程序步骤图 16 11.4 按键设定温度程序步骤图 17 12、结语 18 参考文件: 18 附录Ⅰ:实物硬件图 18 附录Ⅱ:程序 18 摘要:本设计是基于STC12C5A60S2单片机技术和温度传感器测量外界温度设计原理,进行了不一样设计方案比较,给出了设计硬件电路,同时对多种关键硬件进行较具体介绍,而且以步骤图方法对系统设计作出介绍。系统关键经过温度传感器控制不一样PWM占空比输出来控制风扇档位。而出于方便、可选择性考虑,系统也添加了辅助功效,就是直接手动控制风扇档位。 关键词:STC12C5A60S2单片机,DS18B20温度传感器,PWM 1、引言 温控风扇在节能环境保护方面含有一定作用,其工作原理除了一般手动档位调整,关键是经过温度传感器感应外界温度,并自主地进行档位调整,这么在风扇开着情况下,不需进行手动就能够依据不一样外界温度进行自主调整风力大小,达成节能目标。 2、背景 伴随空调机在日常生活中普遍应用,很轻易想到电风扇会成为空调社会淘汰品,其实经过市场考验和证实,真实并不是这么,在空调产品冲击下,电风扇产品仍然含有很强大生命力,电风扇在市场考验中并没有淡出市场,反而销售在不停复苏中,含有强大发展空间。据市场调查,电风扇不停复苏关键在以下原因:一,是电风扇即使没有空调机强大制冷功效,但电风扇是直接取风,风力愈加温和,比较适合老年人、儿童和体质虚弱人使用。二,是电风扇经过多年市场使用,较符合大家使用习惯,而且结构简单、操作方便、安装简易。三,是电风扇比起空调产品而言,其价格低廉,相对省电,更易进入老百姓家庭。在现在空调还没有普及,而且并不是全部情况下空调全部适合使用情况下,智能风扇适合人体对温度要求,智能风扇还有含有相看成用。 3、意义和应用 1、一般电风扇现实状况及存在隐患:大部分只有手动调速,功效单一。长时间在高负荷工作轻易损坏电器,而且造成电量损失。 2、作品可利用在家庭中,风扇风力随温度而调整,即能够避免人因温度低吹到冷风而着凉,也可达成节能目标,可见温控风扇更含有优越性。 3、其次将此系统装在产热多,急需排热设备上,能够帮助它立即散掉大量热。比如电脑散热器等。 4、原理介绍 1、电源开关,控制系统处于工作还是停止状态。 2、当系统上电以后,经过单片机读取外界温度,然后在液晶显示器上显示出来。经过判定温度范围,控制风扇停止和转不一样速度。同时LED给出档位指示。温度控制范围能够经过按键进行设置。 3、另外,当不需要温度控制时,能够经过模式切换开关,让系统工作于手动控制模式。经过按键进行调整风扇停止,和不一样转速。 5、方案设计 方案一:采取两片STC89C516RD单片机、液晶1602和ds18b20,进行设计,让单片机1进行温度读取操作,另外单片机2经过定时器,产生占空比不一样PWM。两单片机经过串口进行通信,这么单片机1能够经过读取外界温度,然后对单片机2进行控制。这么就能在不一样温度区间内,单片机2控制直流5v小风扇不一样转速,从而实现温度自动控制风扇。 方案二:采取STC12C5A60S2单片机、液晶1602和ds18b20。这也是一款51单片机,不过它性能比STC89C516RD单片机更强大,而且有独立双路PWM输出。这么,采取一片STC12C5A60S2单片机就能实现温度读取和直流5v小风扇转速控制。 方案三:采取stm8s105系列单片机、液晶1602和ds18b20,一样能够实现温度读取和直流5v小风扇转速控制 方案比较: 方案一需要花费更多硬件资源。所以我们直接排除方案一。 方案三,假如采取44脚贴片封装stm8s105单片,能够在很小覆铜板上把硬件做出来,这么能够节省部分硬件资源。不过,因为温度传感器ds18b20读取是经过单一I/O口读取,stm8s105I/O操作需要设置,让其是处于输入或输出方法。操作很麻烦。 方案二需要硬件资源相对较少,而且其I/O口兼容8051单片机,能够实现I/O口准双向操作,这么编程相对简单。 总而言之,我们选择方案二。 6、STC12C5A60S2单片机 6.1介绍 我们采取单片机为STC12C5A60S2,STC12C5A60S2/AD/PWM 系列单片机是宏晶科技生产单时钟/机器周期(1T)单片机,是高速/低功耗/超强抗干扰新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S)针对电机控制,强干扰场所。其引脚和一般8051单片机基础相同。 6.2 PWM寄存器设置 STC12C5A60S2单片机内置两路独立PWM输出,经过设置对应寄存器,能够让占空比改变。PWM0输出口在P1.3,而PWM1输出口在P1.4相关设置例子以下面程序所表示: CCON = 0; //初始化 PCA控制寄存器 //PCA计数器停止运行 //清除CF标志位 //清除全部中止标志位 CL = 0; //重置PCA16位计数器 CH = 0; CMOD = 0x02; //设置 PCA 计数器时钟源为 Fosc/2 //严禁PCA 计数器溢出中止 CCAP0H = CCAP0L = 0xff; //PWM0 口输出 0%占空比 CCAP1H = CCAP1L = 1x00; //PWM1 口输出 100%占空比 CCAPM0 = 0x42; //PCA模块0工作在8位PWM模式而且没有PCA中止 CR = 1; //开始计数 当寄存器CL值小于[ EPCnL, CAPPnL ]时,输出为低电平;当寄存器CL值等于或大于[ EPCnL, CAPPnL ]时,输出为高电平;当寄存器CL值由FF变为00溢出时,[ EPCnH CAPPnH]内容被装载到[ EPCnL, CAPPnL ]中。这么,就能够实现无干扰地实现PWM更新。 6.3 PWM占空比计算方法 输出占空比乘以256后,转换为十六进制,然后进行取反,再同时赋值给寄存器CCAPxH 和CCAPxL。 6.4 I/O工作方法设置 其I/O口工作方法有准双向/弱上拉输出,强推挽输出,高阻输入(电流不能流入也不能流出),开漏输出(若外加上拉也能够读取)等。缺省状态下,I/O工作方法为准双向/弱上拉。 本设计中,对于温度传感器读写操作,需要I/O工作在准双向工作状态。而PWM输出端口,LED驱动输出,端口我们将I/O口工作方法设置分强推挽输出,输出拉电流达成20mA,能愈加好驱动负载。 设置方法,经过配置对应寄存器PxM1和PxM0,以下表1所表示: PxM1 [7:0] PxM0 [7:0] I/O口模式 0 0 准双向口 0 1 强推挽输出 1 0 高阻输入 1 1 开漏 表1 7、LCD液晶显示器 时钟显示器选择1602字符液晶。1602是指显示内容为16*2,即能够同时显示两行,每行16个字符。常见1602字符液晶有两种,一个显示是绿色背光黑色字体,另一个显示蓝色背光白色字体,现在市面上字符液晶绝大多数是基于HD44780液晶芯片,控制原理是完全相同。本设计所用1602液晶模块,显示器是蓝色背光白色字体。图1为1602字符液晶引脚图 图1 1602字符液晶引脚图 各引脚功效为: 第1脚:GND为地电源。 第2脚:VCC接5V正电源。 第3脚:VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生重影,使用一个1K电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块实施命令。 第7~14脚:DB0~DB7为8位双向数据线。 第15~16脚:背光灯电源。 ①基础操作时序: 读状态  输入 RS=L,R/W=H,E=H  输出 D0—D7=状态字 写指令  输入 RS=L,R/W=L,D0—D7=指令码,E=高脉冲  输出 无  读数据  输入 RS=H,R/W=H,E=H  输出 D0—D7=数据  写数据  输入 RS=H,R/W=L,D0—D7=数据,E=高脉冲  输出 无 ②RAM地址映射图:图2所表示: 图2 RAM地址映射图 当我们在00-0F、40-4F,地址中任意地写入显示数据时,液晶全部能够显示,当写入10-27或50-67地址处时,必需经过移屏指令将它们移入可显示区域。 ③读、写操作时序:图3所表示: 因为本设计程序中只包含到液晶写操作,所以下面简单介绍写操作过程,以下: (1)经过RS确定是写数据还是写命令。 (2)读写控制端设置为写模式。 (3)将数据或命令送达数据线上。 (4)给E一个高脉冲将数据送到液晶控制器,完成写操作。 图3 读写操作时序图 ④初始化设置: (1)显示模式设置,图4: 图4 显示模式设置图 (2)显示开/关及光标设置,图5: 图5显示开/关及光标设置图 8、温度传感器DS18B20  用于检测目前温度,DS18B20测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”数字方法传输,大大提升了系统抗干扰性。适合于恶劣环境现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。产品支持3V~5.5V电压范围,使系统设计更灵活、方便。  DS18B20引脚图如 图6所表示。 引脚1:地; 引脚2:数字输入输出; 引脚3:可选5V电源; 图 6 DS18B20引脚图 DS18B20内部结构关键由四部分组成:64位光刻ROM、温度传感器、非挥发温度报警触发器TH和TL、配置寄存器。 DS18B20控制方法(DS18B20有六条控制命令):  温度转换 44H 开启DS18B20进行温度转换  读暂存器 BEH 读暂存器9位二进制数字  写暂存器 4EH 将数据写入暂存器TH、TL字节 复制暂存器 48H 把暂存器TH、TL字节写到E2RAM中  重新调E2RAM B8H 把E2RAM中TH、TL字节写到暂存器TH、TL字节  读电源供电方法 B4H 开启DS18B20发送电源供电方法信号给主CPU  8.1 初始化  (1) 先将数据线置高电平“1”。  (2) 延时(该时间要求不是很严格,不过尽可能短一点)  (3) 数据线拉到低电平“0”。  (4) 延时750微秒(该时间时间范围能够从480到960微秒)。  (5) 数据线拉到高电平“1”。  (6) 延时等候(假如初始化成功则在15到60微妙时间之内产生一个由DS18B20所返回低电平“0”。据该状态能够来确定它存在,不过应注意不能无限进行等候,不然会使程序进入死循环,所以要进行超时控制)。  (7) 若CPU读到了数据线上低电平“0”后,还要做延时,其延时时间从发出高电平算起(第(5)步时间算起)最少要480微秒。  (8) 将数据线再次拉高到高电平“1”后结束。 8.2 写操作  (1) 数据线先置低电平“0”。  (2) 延时确定时间为15微秒。  (3) 按从低位到高位次序发送字节(一次只发送一位)。  (4) 延时时间为45微秒。  (5) 将数据线拉到高电平。  (6) 反复上(1)到(6)操作直到全部字节全部发送完为止。  (7) 最终将数据线拉高。  8.3 读操作  (1)将数据线拉高“1”。 (2)延时2微秒。  (3)将数据线拉低“0”。  (4)延时3微秒。  (5)将数据线拉高“1”。  (6)延时5微秒。  (7)读数据线状态得到1个状态位,并进行数据处理。  (8)延时60微秒。 9、风扇 本设计采取是由5V直流供电小型风扇。在设计当中,我们只预置了两档速度相差显著档位,一档PWM占空比为30%,二档占空比为90%。这么设计目标关键是考虑到在档位切换时,能够看到速度有很显著改变,让试验现象愈加直观。 拓展1: 在关键考虑实用性方面原因,我们还能够将控制档位细化,做成5个档位,甚至10个档位,等等。不一样速度是经过调整不一样占空比来实现。下面我们给出温度控制风扇转5个速度不一样档位部分关键程序示例: void control (void) { if((a*100+b*10+c)< tem_1) { CCAP0H = CCAP0L = 0xFF; //PWM0 口输出 0%占空比 } else if (tem_1 <= (a*100+b*10+c)&&(a*100+b*10+c)<tem_2 ) { CCAP0H = CCAP0L = 0xB3; //PWM0 口输出30%占空比 } else if (tem_1 <= (a*100+b*10+c)&&(a*100+b*10+c)<tem_2 ) { CCAP0H = CCAP0L = 0x08; //PWM0 口输出50%占空比 } else if (tem_1 <= (a*100+b*10+c)&&(a*100+b*10+c)<tem_2 ) { CCAP0H = CCAP0L = 0x4D; //PWM0 口输出70%占空比 } else if (tem_2 <= (a*100+b*10+c)) { CCAP0H = CCAP0L = 0x1A; //PWM0 口输出90%占空比 } } 拓展2: 在本设计验证成功而且可靠基础上,我们能够继续延伸,给出温度控制交流220V供电风扇设计方案,比如宿舍风扇: 用一般单片机,经过温度传感器,读取外界温度,进而控制继电器吸合和断开。假设设置4个档位,能够用单片机接三个继电器来实现: 当外界温度较低时,此时全部继电器处于断开状态,风扇不转; 当温度升高到一定程度时,单片机使继电器1吸合,继电器2、3断开,让风扇转一档,即较慢速度; 当温度继续升高,单片机使继电器2吸合,继电器1、3断开,风扇转二档,即较快速度。 当温度再升高时,单片机使继电器3吸合,继电器1、2断开,风扇转三档,即最快速度。 10、硬件电路设计 10.1原理图和部分电路PCB图 图7 原理图 工作原理: 经过P3.7端口处所接电路SW2闭合或断开选择温控或键控。 当SW2=1时,选择温控,经过DS18B20温度传感器获取外界温度,经过LCD显示目前温度,而且显示设定温度控制一档和二档值,比如设定25和30摄氏度作为控制值。外界温度较低时,比如小于25摄氏度,处于0档时,风扇不转,LED1、2不亮。当温度较高,等于或大于25且小于30摄氏度时,处于一档,风扇转动,LED1亮、LED2灭。当温度高于30摄氏度时,处于二档,风扇高速转动,LED1、2全部亮。 当SW2=0;选择键控,经过P2.0处所接独立键盘进行档位选择。缺省状态下为空挡,液晶屏显示DW=0,LED1、2不亮,风扇不转。按一次key1,档位加一,此时为一档,液晶屏上显示DW=1,LED1亮、LED2灭,风扇转动较慢。再按一次key1键,档位加1,此时液晶屏上显示DW=2,LED1、2 亮,风扇高速转动。再按一次key1,档位归零。 图8 PCB图 10.2 电机驱动电路 L298N 关键特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,连续工作电流为2A;额定功率25W。采取标准逻辑电平信号控制;含有两个使能控制端,在不受输入信号影响情况下许可或严禁器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;能够外接检测电阻,将改变量反馈给控制电路。 使用L298N 芯片驱动电机,该芯片能够驱动一台两相步进电机或四相步进电机,也能够驱动两台直流电机。用L298 控制直流电机很轻易。用单片机端口高低就能够控制开始、停止、正反转,利用EN1,EN2 控制使能就能控制转速。其原理图,图9: 图9 L298N原理图 11、软件设计 11.1主函数步骤图 开始 初始化 温度控制风扇模式 按键控制风扇模式 Key_sw==1? 是 否 图10 主函数步骤图 11.2 温度控制风扇程序步骤图 开始 读取环境温度 达成设定温度Ⅰ ? 风扇不转 LED1、2不亮 达成设定温度Ⅱ 风扇转一档 LED1亮 LED2不亮 风扇转二档 LED1、LED2亮 液晶显示目前温度 显示设定温度Ⅰ、Ⅱ值 是 否 是 否 图11 温度控制风扇程序步骤图 11.3 按键控制风扇程序步骤图 开始 液晶显示档位0 LED1、2不亮 num=0 num==1? num==2? 液晶显示档位1 LED1亮 LED2灭 液晶显示档位2 LED1 、LED2亮 是 否 是 否 图12按键控制风扇程序步骤图 11.4 按键设定温度程序步骤图 开始 读取I/O电平改变 是否有按键被按下 延时10ms 否 是 档位加1 Key1==0? Key2==0? Key3==0? 档位==2? 档位归0 Tem1==31? Tem2==44? Tem1=17 Tem1++ Tem2=23 Tem2++ 是 是 是 是 是 是 否 否 否 备注: 本设计只设置两档风扇不一样转速 Tem1为温控档位温度下限 Ten2 为温控档位温度上限 结束 图13按键设定温度程序步骤图 12、结语 本设计结合生活中实际情况,利用单片机技术设计并制作了温控风扇系统,完全达成了设计要求,其次经过独立键盘和温度传感器能够实现对应操作,使操作愈加方便灵活,所选择单片机含有较高抗干扰能力,也符合这个设计稳定性要求。 我们队伍各组员在整个设计制作过程中,相互配合,相互检验,但又进行了分工,大大提升了工作效率。 参考文件: [1]郭天祥 新概念51单片机C语言教程——入门、提升、开发、拓展全攻略 电子工业大学出版社 [2]李广弟, 朱月秀, 等. 单片机基础[M]. 北京航空航天大学出版社, . [3]模拟电子技术基础[M]. 高等教育出版社, . [4]数字电子技术基础[M]. 高等教育出版社, . 附录Ⅰ:实物硬件图 图14实物硬件图 附录Ⅱ:程序 #include<stc12c5a60s2.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define LCD1602_DATAPINS P0 sfr PCAPWM0 = 0xf2; //定义寄存器PCAPWM0 sfr PCAPWM1 = 0xf3; //定义寄存器PCAPWM1 sbit LCD1602_E=P1^2; //定义lcd1602使能端 sbit LCD1602_RW=P1^1; //定义lcd1602写操作端 sbit LCD1602_RS=P1^0; //定义lcd1602发送命令端 sbit DSPORT=P2^7; //温度传感器读写端 sbit LED0 = P2^3; sbit LED1 = P2^4; sbit jia_key=P2^0;//加速按钮 sbit key1 = P2^1; //控制温度调整按键1、2 sbit key2 = P2^2; sbit key_sw = P3^7;//温控和键控切换开关 uint a=0; uint b=0; uint c=0; uint tem_1=27; uint tem_2=30; uchar num=0; /****************************************************************************** * 函 数 名 : Delay1ms * 函数功效 : 延时函数 ******************************************************************************/ void Delay1ms(uint y) //粗略延时1ms { uint x; for( ; y>0; y--) { for(x=440; x>0; x--); } } void delay1ms(void) //误差 0us { unsigned char a,b; for(b=129;b>0;b--) for(a=45;a>0;a--); } void delay1us(uint x) //误差 0us { unsigned char a,b; for(b=x;b>0;b--) for(a=3;a>0;a--); } /****************************************************************************** * 函 数 名 : Ds18b20Init * 函数功效 : 初始化 * 输 入 : 无 * 输 出 : 初始化成功返回1,失败返回0 ******************************************************************************/ void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //选择发送命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //放入命令 Delay1ms(1); //等候数据稳定 LCD1602_E = 1; //写入时序 Delay1ms(5); //保持时间 LCD1602_E = 0; } void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //选择输入数据 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = dat; //写入数据 Delay1ms(1); LCD1602_E = 1; //写入时序 Delay1ms(5); //保持时间 LCD1602_E = 0; } void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38); //开显示 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 } uchar Ds18b20Init() { uchar i; DSPORT = 0; //将总线拉低480us~960us delay1us(642); //延时642us DSPORT = 1; //然后拉高总线,假如DS18B20做出反应会将在15us~60us后总线拉低 i = 0; while(DSPORT) //等候DS18B20拉低总线 { i++; if(i>5)//等候>5MS { return 0;//初始化失败 } delay1ms( ); } return 1;//初始化成功 } /****************************************************************************** * 函 数 名 : Ds18b20WriteByte * 函数功效 : 向18B20写入一个字节 ******************************************************************************/ void Ds18b20WriteByte(uchar dat) { uint j; for(j=0; j<8; j++) { DSPORT = 0; //每写入一位数据之前先把总线拉低1us delay1us(1); DSPORT = dat & 0x01; //然后写入一个数据,从最低位开始 delay1us(68); //延时68us,连续时间最少60us DSPORT = 1; //然后释放总线,最少1us给总线恢复时间才能接着写入第二个数值 dat >>= 1; } } /******************************************************************************* * 函 数 名 : Ds18b20ReadByte * 函数功效 : 读取一个字节 ******************************************************************************/ uchar Ds18b20ReadByte() { uchar byte, bi; uint j; for(j=8; j>0; j--) { DSPORT = 0;//先将总线拉低1us delay1us(1); DSPORT = 1;//然后释放总线 delay1us(6); //延时6us等候数据稳定 bi = DSPORT; //读取数据,从最低位开始读取 /*将byte左移一位,然后和上右移7位后bi,注意移动以后移掉那位补0。*/ byte = (byte >> 1) | (bi << 7); delay1us(45); } return byte; } /***************************************************************************** * 函 数 名 : Ds18b20ChangTemp * 函数功效 : 让18b20开始转换温度 ******************************************************************************/ void Ds18b20ChangTemp() { Ds18b20Init(); delay1ms( ); Ds18b20WriteByte(0xcc); //跳过ROM操作命令 Ds18b20WriteByte(0x44); //温度转换命令 } /*************************************************************************** * 函 数 名 : Ds18b20ReadTempCom * 函数功效 : 发送读取温度命令 ****************************************************************************/ void Ds18b20ReadTempCom() { Ds18b20Init(); delay1ms( ); Ds18b20WriteByte(0xcc); //跳过ROM操作命令 Ds18b20WriteByte(0xbe); //发送读取温度命令 } /*************************************************************************** * 函 数 名 : Ds18b20ReadTemp * 函数功效 : 读取温度 ****************************************************************************/ int Ds18b20ReadTemp() { int temp = 0; uchar tmh, tml; Ds18b20ChangTemp(); //先写入转换命令 Ds18b20ReadTempCom(); //然后等候转换完后发送读取温度命令 tml = Ds18b20ReadByte(); //读取温度值共16位,先读低字节 tmh = Ds18b20ReadByte(); //再读高字节 temp = tmh; temp <<= 8; temp |= tml; return temp; } /***************************************************************************** * 函数名 : LcdDisplay() * 函数功效 : LCD显示读取到温度 *****************************************************************************/ void LcdDisplay(int temp) //lcd显示 { unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组 float tp; if(temp< 0) //当温度值为负数 { LcdWriteCom(0x80); //写地址 80表示初始地址 LcdWriteData('-'); //显示负 //因为读取温度是实际温度补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型时候把小数点 //后面数自动去掉,不管是否大于0.5,而+0.5以后大于0.5就是进1了,小于0.5就 //算加上0.5,还是在小数点后面。 } else { LcdWriteCom(0x80); //写地址 80表示初始地址 LcdWriteData('+'); //显示正 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //假如温度是正那么,那么正数原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型时候把小数点 //后面数自动去掉,不管是否大于0.5,而+0.5以后大于0.5就是进1了,小于0.5就 //算加上0.5,还是在小数点后面。 } datas[0] = temp / 10000; datas[1] = temp % 10000 / 1000; datas[2] = temp % 1000 / 100; datas[3] = temp % 100 / 10; datas[4] = temp % 10; a = datas[0]; //a,b,c作用是取温度整数,进行温控 b = datas[1]; c = datas[2]; LcdWriteCom(0x82); //写地址 LcdWriteData('0'+datas[0]); //百位 LcdWriteCom(0x83); //写地址 LcdWriteData('0'+datas[1]); //十位 LcdWriteCom(0x84); //写地址 LcdWriteData('0'+datas[2]); //个位 LcdWriteCom(0x85); //写地址 LcdWriteData('.'); //显示 '.' LcdWriteCom(0x86); //写地址 LcdWriteData('0'+datas[3]); //显示小数点 LcdWriteCom(0x87); //
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:温控风扇专业系统设计.docx
    链接地址:https://www.zixin.com.cn/doc/3002005.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork