风扇模拟器实验设计论文修正版 - 图文

更新时间:2023-12-30 19:27:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

攀枝花学院综合设计(论文)

风扇控制器模拟

学生姓名: 张 伟 学生学号: 200910502098 院(系): 电气信息工程学院 年级专业:2009级电气工程与自动化1班 指导教师: 刘 衍 平

二〇一二年五月

攀枝花学院本科毕业设计(论文) 摘 要

摘 要

温控风扇在现代社会中的生产以及人们的日常生活中都有广泛的应用,如工业生产中大型机械散热系统中的风扇、现在笔记本电脑上的广泛应用的智能CPU风扇等。本文设计了基于单片机的温控风扇系统,采用单片机作为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度的比较实现风扇电机的自动启动和停止,并能根据温度的变化而自动改变风扇电机的转速,同时用LED八段数码管显示检测到的温度与设定的温度。

关键词 单片机、DS18B20、温控、风扇

攀枝花学院本科毕业设计(论文) ABSTRACT

ABSTRACT

A thermostatically controlled fan in production and people's daily life is widely used in modern society,such as the fan in the industrial production of large-scalemechanical cooling system and now it is widely used on laptop computers intelligent CPU fan and so on. Designed a microcontroller-based temperature controlled fan system, the use of SCM as the controller, temperature sensor DS18B20 temperature acquisitioncomponents, and temperature collected by the reverse of a Darlington drive theULN2803 drive fan motor. According to the temperature detected by the temperatureand system settings to achieve the automatic start and stop of the fan motor, and roottemperature changes automatically change the fan motor speed, LED eight out digitaldisplay temperature and the set of detected the temperature。

Key words Single chip microcomputer,DS18B20,thermostatically,fan

攀枝花学院本科毕业设计(论文) ABSTRACT

目录

? ABSTRACT ········································ ?

摘 要 ········································· 第一章 整体方案设计···································· 2

1.1 前 言 ······························· 2

1.2 系统整体设计 ···························· 2 1.3方案论证 ······························ 3 1.3.1 温度传感器的选择 ························ 3 1.3.2 控制核心的选择 ························· 4 1.3.3 温度显示器件的选择 ······················· 4 1.3.4 调速方式的选择 ························· 5

第二章 软件设计······································ 6

2.1 程序设置 ······························ 6

2.2 用Keil C51编写程序 ························ 7 2.3 用Proteus进行仿真 ························· 8 2.3.1 Proteus简介 ·························· 8 2.3.2 本设计基于Proteus的仿真 ···················· 8 2.3.3本实验基于protel dxp的pcb版制作 ················ 13

第三章 系统调试····································· 14

3.1 软件调试 ······························ 14 3.1.1 按键显示部分的调试 ······················· 14 3.1.2 传感器DS18B20温度采集部分调试 ················· 14 3.1.3 电动机调速电路部分调试 ····················· 14 3.2 系统功能 ······························ 15 3.2.1 系统实现的功能 ························· 15 3.2.2 系统功能分析 ·························· 15

结 论········································· 16 参考文献 ········································ 17 致 谢 ········································ 18 附录1:程序代码 ···································· 19

1

攀枝花学院本科毕业设计(论文) ABSTRACT

第一章 整体方案设计

1.1 前 言

在现代社会中,风扇被广泛的应用,发挥着举足轻重的作用,如夏天人们用的散热风扇、工业生产中大型机械中的散热风扇以及现在笔记本电脑上广泛使用的智能CPU风扇等。而随着温度控制技术的发展,为了降低风扇运转时的噪音以及节省能源等,温控风扇越来越受到重视并被广泛的应用。在现阶段,温控风扇的设计已经有了一定的成效,可以使风扇根据环境温度的变化进行自动无级调速,当温度升高到一定时能自动启动风扇,当温度降到一定时能自动停止风扇的转动,实现智能控制。

随着单片机在各个领域的广泛应用,许多用单片机作控制的温度控制系统也应运而生,如基于单片机的温控风扇系统。它使风扇根据环境温度的变化实现自动启停,使风扇转速随着环境温度的变化而变化,实现了风扇的智能控制。它的设计为现代社会人们的生活以及生产带来了诸多便利,在提高人们的生活质量、生产效率的同时还能节省风扇运转所需的能量。

本文设计了由ATMEL公司的8052系列单片机AT89C52作为控制器,采用DALLAS公司的温度传感器DS18B20作为温度采集元件,并通过一个达林顿反向驱动器ULN2803驱动风扇电机的转动。同时使系统检测到得环境温度以及系统预设的温度动态的显示在LED数码管上。根据系统检测到得环境温度与系统预设温度的比较,实现风扇电机的自动启停以及转速的自动调节。

1.2 系统整体设计

本设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理,在LED数码管上显示当前环境温度值以及预设温度值。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。同时采用PWM脉宽调制方式来改变直流风扇电机的转速。并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。系统结构框图如下:

2

攀枝花学院本科毕业设计(论文) ABSTRACT

图1.1系统构成框图

温度显示 DS18B20 独立键盘 AT89C52 PWM驱动电路 直流电机 复位 晶振 1.3方案论证

本设计要实现风扇直流电机的温度控制,使风扇电机能根据环境温度的变化自动启停及改变转速,需要比较高的温度变化分辨率以及稳定可靠的换挡停机控制部件[1]。

1.3.1 温度传感器的选择

在本设计中,温度传感器的选择有以下两种方案:

方案一:采用热敏电阻作为检测温度的核心元件,并通过运算放大器放大,由于热敏电阻会随温度变化而变化,进而产生输出电压变化的微弱电压变化信号,再经模数转换芯片ADC0809将微弱电压变化信号转化为数字信号输入单片机处理。

3

攀枝花学院本科毕业设计(论文) ABSTRACT

方案二:采用数字式的集成温度传感器DS18B20作为温度检测的核心元件,由其检测并直接输出数字温度信号给单片机进行处理。

对方案一,采用热敏电阻作为温度检测元件,有价格便宜,元件易购的优点,但热敏电阻对温度的细微变化不太敏感,在信号采集、放大以及转换的过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其自身电阻对温度的变化存在较大误差,虽然可以通过一定电路来修正,但这不仅将使电路变得更加复杂,而且在人体所处环境温度变化过程中难以检测到小的温度变化。故该方案不适合本系统。

对于方案二,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转化等电路的误差因数,温度误差变得很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转化成数字量直接输出,简化了系统程序设计,又由于该温度传感器采用先进的单总线技术,与单片机的接口变得非常简洁,抗干扰能力强,因此该方案适用于本系统。 1.3.2 控制核心的选择

在本设计中采用AT89C52单片机作为控制核心,通过软件编程的方法进行温度检测和判断,并在其I/O口输出控制信号。AT89C52单片机工作电压低,性能高,片内含8k字节的只读程序存储器ROM和256字节的随机数据存储器RAM,它兼容标准的MCS-51指令系统,单片价格也不贵,适合本设计系统。 1.3.3 温度显示器件的选择

方案一:应用动态扫描的方式,采用LED共阴极数码管显示温度。 方案二:采用LCD液晶显示屏显示温度。

对于方案一,该方案成本很低,显示温度明确醒目,即使在黑暗空间也能清楚看见,功耗极低,同时温度显示程序的编写也相对简单,因而这种显示方式得到了广泛应用。但不足的地方是它采用动态扫描的显示方式,各个LED数码管是逐个点亮的,因此会产生闪烁,但由于人眼的视觉暂留时间为20MS,故当数码管扫描周期小于这个时间时人眼不会感觉到闪烁,因此只要描频率设置得当即可采用该方案。

对于方案二,液晶显示屏具有显示字符优美,其不仅能显示数字还能显示字

4

攀枝花学院本科毕业设计(论文) ABSTRACT

符甚至图形,这是LED数码管无法比拟的。但是液晶显示模块的元件价格昂贵,显示驱动程序的编写也较复杂,从简单实用的原则考虑,本系统采用方案一。 1.3.4 调速方式的选择

方案一:采用数模转换芯片DAC0832来控制,由单片机根据当前环境温度值输出相应数字量到DAC0832中,再由DAC0832产生相应模拟信号控制晶闸管的导通角,从而通过无级调速电路实现风扇电机转速的自动调节。

方案二:采用单片机软件编程实现PWM(脉冲宽度调制)调速的方法。PWM是英文Pulse Width Modulation的缩写,它是按一定的规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调节方式,在PWM驱动控制的调节系统中,最常用的是矩形波PWM信号,在控制时需要调节PWM波得占空比。占空比是指高电平持续时间在一个周期时间内的百分比。在控制电机的转速时,占空比越大,转速就越快,若全为高电平,占空比为100%时,转速达到最大 [2]。用单片机I/O口输出PWM信号时,有如下三种方法:

(1) 利用软件延时。当高电平延时时间到时,对I/O口电平取反,使其变成低电平,然后再延时一定时间;当低电平延时时间到时,再对该I/O口电平取反,如此循环即可得到PWM信号。在本设计中应用了此方法。

(2) 利用定时器。控制方法与(1)相同,只是在该方法中利用单片机的定时器来定时进行高低电平的转变,而不是用软件延时。应用此方法时编程相对复杂。

(3) 利用单片机自带的PWM控制器。在STC12系列单片机中自身带有PWM控制器,但本系统所用到得AT89系列单片机无此功能。

对于方案一,该方案能够实现对直流风扇电机的无级调速,速度变化灵敏,但是D/A转换芯片的价格较高,与其温控状态下无级调速功能相比性价比不高。 对于方案二,相对于其他用硬件或者软硬件相结合的方法实现对电机进行调速而言,采用PWM 用纯软件的方法来实现调速过程,具有更大的灵活性,并可大大降低成本,能够充分发挥单片机的功能,对于简单速度控制系统的实现提供了一种有效的途径。综合考虑选用方案二。

[2]

5

攀枝花学院本科毕业设计(论文) ABSTRACT

第二章 软件设计

2.1 程序设置

程序设计部分主要包括主程序、DS18B20初始化函数、DS18B20温度转换函数、温度读取函数、键盘扫描函数、数码管显示函数、温度处理函数以及风扇电机控制函数。DS18B20初始化函数完成对DS18B20的初始化;DS18B20温度转换函数完成对环境温度的实时采集;温度读取函数完成主机对温度传感器数据的读取及数据换算,键盘扫描函数则根据需要完成初值的加减设定;温度处理函数对采集到的温度进行分析出理,为电机转速的变化提供条件;风扇电机控制函数则根据温度的数值完成对电机转速及启停的控制。

主程序流程图如图3.1.1: 调用温度读 取函数 结束 调用DS18B20 温度转换函数 调用风扇电 机控制函数 调用DS18B20 初始化函数 调用温度处 理函数 程序初始化 调用数码管 显示函数 主程序开始 调用键盘扫 描函数 6 攀枝花学院本科毕业设计(论文) ABSTRACT

图2.1.1 主程序流程图 2.2 用Keil C51编写程序 Keil C51是美国Keil Software公司开发的51系列兼容单片机C语言的软件开发系统,与单片机汇编语言相比,C语言在不仅语句简单灵活,而且编写的函数模块可移植性强[9],因而易学易用,效率高。随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前使用较多的MCS-51系列单片机开发的软件。

Keil C51软件不仅提供了丰富的库函数,而且它强大的集成开发调试工具为程序编辑调试带来便利,在开发大型软件时更能体现高级语言的优势。在使用时要先建立一个工程,然后添加文件并编写程序,编写好后再编辑调试。

Keil C51的使用界面如图2.2.1。

图2.2.1 Keil C51的使用界面

7

攀枝花学院本科毕业设计(论文) ABSTRACT

2.3.3本实验基于protel dxp的pcb版制作

首先启动protel新建一个工程,然后建立原理图文件并且给每个元件添加合适的封装,最后更新到pcb板。在pcb视图下可以完成对rom的布局和布线操作。因为实验室条件有限所以本次实验用单层布线,布线时候一定要注意和实际情况保持一致,尽量做到经济和可行原则。当布线完成后可以制作电路板,这里不多说明。

Protel dxp 2004下风扇原理图:

图2.3.6 protel风扇原理图 Protel 2004 pcb文件图

图2.3.7 protel pcb文件图

13

攀枝花学院本科毕业设计(论文) ABSTRACT

第三章 系统调试

3.1 软件调试

3.1.1 按键显示部分的调试

起初根据设计编写的系统程序:程序的键盘接口采用P1口,数码管显示采用P0口控制LED的断码,P2口控制LED的位码,从而实现键盘功能及数码管的显示。经过编译没有出错,但在仿真调试时,数码管显示的只是乱码,没有正确的显示温度,按键功能也不灵,当按下键时,显示并不变化。

经过查找分析,发现键盘扫描程序没有没有按键消抖部分,按键在按下与松手时,都会有一定程度的抖动,从而可能使单片机做出错误的判断,导致按键条件预设温度时失灵,甚至根本不能工作。因此必须在按键扫描程序中加入消抖部分,即在按键按下与松手时加入延时判断,以检测键盘是否真的按下或已完全松手。

数码管不能正确的显示,主要是因为所以数码管的段码都由P0口传送,而数码管显示又采用了动态扫描的方式,但在程序中却没有设置显示段码的暂存器,导致当P0口传送段码时发生混乱,不能正确识别段码。应在系统中加入锁存器,或是在程序中设定存储段码的空间。

在键盘加入了消抖程序,数码管显示程序中加入了段码的存储空间后,数码管能够正常的显示,按键也能够工作,达到了较好的效果。 3.1.2 传感器DS18B20温度采集部分调试

由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的简便,小体积、低功耗、高精度为控制电机的精度和稳定提供了可能。软件设计采用P3.1口为数字温度输入口,但是需要对输入的数字信号进行处理后才能显示,从而多了温度转换程序。通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。

在温度转换程序中,为了能够正确的检测并显示温度的小数位,程序中把检测的温度与10相乘后,再按一个三位的整数来处理。如把24.5变为245来处理,这样为程序的编写带来了方便。 3.1.3 电动机调速电路部分调试

14

攀枝花学院本科毕业设计(论文) ABSTRACT

在本设计中,采用了达林顿反向驱动器ULN2803驱动直流电机,其可驱动八个直流电机,本系统仅驱动一个。软件设置了P3.1口输出不同的PWM波形,通过达林顿反向驱动器ULN2803驱动直流电机转动,通过软件中程序设定,根据不同温度输出不同的PWM波,从而得到不同的占空比控制风扇直流电机。程序实现了P3.1口的PWM波形输出,当外界温度低于设置温度时,电机不转动或自动停止转动;当外界温度高于设置温度时,电机的转速升高或是自动开始转动,且外界温度与设置温度的差值越大,电机转速越高,即占空比增加。

在本系统中风扇电机的转速可实现四级调速。通过温度传感器检测的温度与系统预设温度值的比较,实现转速变换。当检测到的温度比预设的温度每增加5摄氏度时,风扇电机转速增加一级。

3.2 系统功能

3.2.1 系统实现的功能

本系统能够实现单片机系统检测环境温度的变化,然后根据环境温度变化来控制风扇直流电机输入占空比的变化,从而产生不同的转动速度,亦可根据键盘调节不同的设置温度,再由环境温度与设置温度的差值来控制电机。当环境温度低于设置温度时,电机停止转动;当环境温度高于设置温度时,单片机对应输出口输出不同占空比的PWM信号,控制电机开始转动,并随着环境温度与设置温度的差值的增加电机的转速逐渐升高。 系统还能动态的显示当前温度和设置温度,并能通过键盘调节当前的设置温度。 3.2.2 系统功能分析

系统总体上由五部分来组成,既按键与复位电路、数码管显示电路、温度检

测电路、电机驱动电路。首先考滤的是温度检测电路,该部分是整个系统的首要部分,首先要检测到环境温度,才能用单片机来判断温度的高低,然后通过单片机控制直流风扇电机的转速;其次是电机驱动电路,该部分需要使用外围电路将单片机输出的PWM信号转化为平均电压输出,根据不同的PWM波形得到不同的平均电压,从而控制电机的转速,电路的设计中采用了达林顿反向驱动器ULN2803,实现较好的控制效果;再次是数码管的动态显示电路,该部分的功能实现对环境温度和设置温度的显示,其中DS18B20采集环境温度,按键实现不同设置温度的调整,实现了对环境温度和设置温度的及时连续显示。

15

攀枝花学院本科毕业设计(论文) ABSTRACT

结 论

本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围能能实现转速的连续调节,LED数码管能连续稳定的显示环境温度和设置温度,并能通过两个独立按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。实现了基于单片机的温控风扇的设计。

本系统设计可推广到各种电动机的控制系统中,实现电动机的转速调节。在生产生活中,本系统可用于简单的日常风扇的智能控制,为生活带来便利;在工业生产中,可以改变不同的输入信号,实现对不同信号输入控制电机的转速,进而实现生产自动化,如在电力系统中可以根据不同的负荷达到不同的电压信号,再由电压信号调节不同的发电机转速,进而调节发电量,实现电力系统的自动化调节。综上所述,该系统的设计和研究在社会生产和生活中具有重要地位。

16

攀枝花学院本科毕业设计(论文) ABSTRACT

参考文献

[1] 李学龙.使用单片机控制的智能遥控电风扇控制器[J].电子电路制作,2003,9:13—15. [2] 蓝厚荣.单片机的PWM控制技术[J].工业控制计算机.2010,23(3):97—98

[3] 郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社.2009.342—344

[4] 胡汉才.单片机原理及其接口技术[M](第2版).北京:清华大学出版社.2004.49—77. [5] 胡全. 51单片机的数码管动态显示技术[J] .信息技术,2009,13:25—26

[6] 李钢,赵彦峰.1-Wire总线数字温度传感器DSI8B20原理及应用[J].现代电子技术,

2005,28(21):77—79.

[7] 马云峰.单片机与数字温度传感器DS18B20的接口设计[J].计算机测量与控

制,2007,10(4):278—280.

[8] 王会明,侯加林.智能电风扇控制器的研制[J].电子与自动化,1998,5(4):25—26. [9] 谭浩强.C程序设计[M](第三版).北京:清华大学出版社.2005.37—65. [10] 孙号. Proteus软件在设计电子电路中的应用[J].仪表技术,2009,8:74—75

[11] 楼俊军.基于Proteus和Keil的单片机演奏乐曲的实现[J] .科技信息,2010,23:第50页 [12] 王文海,周欢喜.用Proteus实现51单片机的动态仿真调试[J].IT技术,2006,20:10—11 [13] 丁建军,陈定方,周国柱. 基于AT89C51的智能电风扇控制系统[J].湖北工学院学报,

2003,18(2):60—63.

[14] 王会明,侯加林. 智能电风扇控制器的研制[J]. 电子与自动化,1998,5(4):25—26. [15] 刘进山. 基于MCS-51电风扇智能调速器的设计[J]. 广州:电子质量,2004,10(10):71. [16] YU Qihao,CHENG Guodong,NIU Fujun. The application of auto-temperature-controlled

ventilation embankment in Qinghai--Tibet Railway [J]. Science in China Ser.D Earth Sciences,2004,1(47):168—176.

[17] YLai,Y,Wang. Three—dimensional nonlinear analysis for temperature characteristic of

ventilated embankment in permafrost regions [J]. Cold Regions Science and Technology,2004,38(2):165—184.

[18] Cheng Guodong. Linearity engineering in permafrost areas [J]. Journal of Glaciology and

Geocryology(in Chinese),2001,23(3):213—217. [19] B Schneier.Applied Crytography:Algorithms,and Source Code in C[J].New York:Jone

Wiley& Sons. 1994.301—307.

[20] Intel: Benjamin Jun,Paul Kocher.The lntel Random Number Generator[J].White Paper

Prepared for lntel Corporation,April 22,l999:4—5.

17

攀枝花学院本科毕业设计(论文) ABSTRACT

致 谢

在此衷心感谢刘衍平老师。本文的设计工作是在刘老师的悉心指导下完成的,从论文的选题、研究计划的制定、技术路线的选择到系统的开发设计,各个方面都离不开宋教授热情耐心的帮助和教导。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。同时也要感谢在本次论文的设计过程中不断给予我帮助、支持与鼓励的老师和同学,是他们让我更加有信心坚持下去,是他们让我更加顺利的把一个个问题解决,最终顺利的完成本文的设计。 这是本人第一次做课程设计,从中学到了不少东西,并且从网上也查到了不少资源,不过很高兴自己能够完成这个设计,我也相信经过此次设计,我以后一定会做出更好的设计的,再次感谢刘衍平老师的指导!

18

攀枝花学院本科毕业设计(论文) ABSTRACT

附录1:程序代码

#include

#define uchar unsigned char #define uint unsigned int sbit DQ=P1^7; sbit key1=P1^3; sbit key2=P1^4; sbit dianji=P3^1; float ff; uint y3;

uchar shi,ge,xiaoshu,sheding=20,gaonum,dinum; uchar code dispcode[]={ //段码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

uchar code tablel[]={ //带小数点的段码 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd, 0x87,0xff,0xef};

uchar dispbitcode[]={ //位选 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};

uchar dispbuf[8]={0,0,0,0,0,0,0,0}; void Delay(uint num)// 延时函数 {

while( --num ); }

void digitalshow(uchar a4,uchar a3,uchar a2,uchar a1,uchar a0) {

dispbuf[0]=a0; dispbuf[1]=a1; dispbuf[2]=a2; dispbuf[3]=a3; dispbuf[4]=a4;

P2=0xff;

P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; Delay(1);

19

攀枝花学院本科毕业设计(论文) ABSTRACT

P2=0xff;

P0=dispcode[dispbuf[1]]; P2=dispbitcode[4]; Delay(1);

P2=0xff;

P0=dispcode[dispbuf[2]]; P2=dispbitcode[2]; Delay(1);

P2=0xff;

P0=tablel[dispbuf[3]]; P2=dispbitcode[1]; Delay(1);

P2=0xff;

P0=dispcode[dispbuf[4]]; P2=dispbitcode[0]; Delay(1); }

void dmsec(uint count) {

uint i; // 1ms延时 while(count--) { for(i=0;i<125;i++){} } }

void tmreset(void) { DQ=0;

Delay(90); // 精确延时 大于 480us DQ=1;

Delay(4); // 90,4 可以小范围变化 }

void tmpre(void)

{ while(DQ); while(~DQ); Delay(4); }

20

攀枝花学院本科毕业设计(论文) ABSTRACT

bit tmrbit(void)

{ uint i; bit dat; DQ=0; i++; // i++;大概1us DQ=1; i++; i++; dat=DQ;

Delay(8); return(dat); }

uchar tmrbyte(void) //读一个比特 { uchar i,j,dat; dat=0;

for(i=1;i<=8;i++) { j=tmrbit(); dat=(j<<7)|(dat>>1); }

return(dat); }

void tmwbyte(uchar dat) //写一个比特 { uint i; uchar j; bit testb;

for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; // 从低位开始 if(testb) // Write 1 { DQ=0; // 先拉低 i++; i++; // >1us DQ=1; Delay(4); }

21

攀枝花学院本科毕业设计(论文) ABSTRACT

else // Write 0 { DQ=0; Delay(4); DQ=1; i++; i++; // 再拉高 } } }

void tmstart(void) //ds1820开始转换 {

dmsec(1); tmreset(); tmpre(); dmsec(1);

tmwbyte(0xcc); // skip rom tmwbyte(0x44); // 转换 }

uchar tmrtemp(void) //读取温度 { uchar a,b; tmreset(); tmpre(); dmsec(1);

tmwbyte(0xcc); // skip rom tmwbyte(0xbe); // 转换 a=tmrbyte(); // LSB低8位 b=tmrbyte(); // MSB高8位 y3=b; y3<<=8; y3=y3|a;

ff=y3*0.0625; y3=ff*10+0.5; return(y3); }

void keyscan(void) {

if(key1==0) { dmsec(5); if(key1==0) { sheding++;

22

攀枝花学院本科毕业设计(论文) ABSTRACT

if(sheding==100) sheding=20; } while(!key1); }

else if(key2==0) { dmsec(5); if(key2==0) { sheding--; if(sheding==0) sheding=20; } while(!key2); } }

void deal(uint tmp) //温度处理 {

if(tmp<=sheding) { gaonum=0; dinum=4; }

else if((tmp>sheding)&&(tmp<=(sheding+5))) { gaonum=1; dinum=3; }

else if((tmp>(sheding+5))&&(tmp<=(sheding+10))) { gaonum=2; dinum=2; }

else if((tmp>(sheding+10))&&(tmp<=(sheding+15))) { gaonum=3; dinum=1; } else { gaonum=4; dinum=0; }

23

攀枝花学院本科毕业设计(论文) ABSTRACT

}

void dianjik() //电机控制 {

uchar q,i;

for(q=0;q

dianji=0;

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); for(i=255;i>0;i--) {

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); } }

for(q=0;q

dianji=1;

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); for(i=255;i>0;i--) {

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); } } }

void main(void) {

uint last; dianji=0; tmstart(); dmsec(450); // 初始化ds18b20 while(1) { tmstart(); // ds1820开始转换 dmsec(2); last=tmrtemp()+256; // 读取温度 shi=last/100; ge=(last0)/10; xiaoshu=(last0); keyscan(); dmsec(2); deal(last/10); dianjik(); } }

24

本文来源:https://www.bwwdw.com/article/lr1x.html

Top