XTAL1匚
22
ZlP21(A9)
GNO匚
20
ZlP2.O(AS)
图1AT89C51
3.1.4、AT89C51引脚功能
AT89C51是典型的40管脚双列直插式集成电路芯片,其中每个引脚的功能如下所示:
(1)信号引脚的功能介绍
1输入/输出口线
P0.0〜P0.7P0口的8位双向端口线;
P1.0〜P1.7P1口的8位双向端口线;
P2.0〜P2.7P2口的8位双向端口线;
P3.0〜P3.7P3口的8位双向端口线。
2ALE地址锁存控制信号
在系统扩展时,P0口是8位数据线和第8位地址线复用引脚,ALE用于把P0口输出的低8位地址锁存起来,以实现低8位地址和数据的隔离。
由于ALE引脚以晶振1/6固定频率输出正脉冲,因此可以作为外部时钟或外部定时脉冲使用。
3/PSEN外部程序存储器读选通信号
当读取外部ROM时,/PSEN有效(为0)来实现对外部ROM单元的读取。
4/EA访问程序存储控制信号
当/EA信号为0时,对ROM勺读操作限制在外部程序存储器;而当/EA信号为1的时候,则对于ROM勺读操作是从内部程序存储器开始,并可以延续至外部程序存储器。
5RST复位信号
当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。
6XTAL1和XTAL2外接晶体引线端
当使用芯片内部时钟时,XYAL1和XTAL2引线端用于外接石英晶体和微调电容。
当使用外部时钟时,用于连接外部时钟脉冲信号。
7VSS接地
8VCC电源
综上所述就是AT89C51单片机芯片的40条引脚的定义和简单的解释。
(2)P3口的第二功能
第一功能
第二功能
信号名称
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
/INTO
夕卜部中断0的申请
P3.3
/INT1
夕卜部中断1的申请
P3.4
TO
定时器/计数器0计数输入
P3.5
T1
定时器/计数器1计数输入
P3.6
/WR
外部RAM的写通道
P3.7
/RD
外部RAM的读通道
表1P3口第二功能
3.2DSI8B20简介
3.2.1DS18B20芯片概述
DSI8B20是美国DALLAS^司生产的单总线数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易于与微处理器接口等优点,适合于各种温度测控系统。
该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上,传感器直接输出的就是温度信号数字值。
信号传输采用两芯(或三芯)
电缆构成的单总线结构。
一条单总线上可以挂接若干个数字温度传感器,每个传
感器有一个唯一的地址编码。
微控制器通过对器件的寻址,就可以读取某一个传感器的温度值,从而简化了信号采集系统的电路结构。
图2DS18B20实图
3.2.2DSI8B20功能特点
1.采用单总线技术,与单片机通信只要一根I/O线,在一根线上挂接多
个DSI8B2O
2.每只DSI8B20具有一个独有的、不可修改的64位序列号,根据序列号访问对应的器件。
3.低压供电,电源范围从3〜5V,可以本地供电,也可以直接从数据线上窃取电源(寄生式供电)。
4.测温范围为-55C〜+125C,在-10C〜85C范围内误差为土0.5C。
5.可编程数据为9〜12位,转换12位温度时间为750ms(最大)。
6.用户可自设定报警上下限温度。
7.报警搜索命令可识别和寻址哪个器件的温度超出预定值。
8.DSI8B20的分辨率可由用户通过E2PRO设置为9〜12位。
9.DSI8B20可将检测到温度值直接转化成数字量,并通过串行通信的方式与主控制器进行数据通信。
323DSI8B20的引脚
DSI8B20采用3脚(或8脚)封装。
其中,VCC和GND是电源和接地引脚,DQ是数据线引脚。
DSI8B20以串行通信的方式与微控制器进行数据通信,读出或写入数据仅需要一根I/O接口线。
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
图3DS18B20管脚排列
3.3单片机辅助电路设计
3.3.1复位电路的设计
单片机的复位就和重新启动计算机是一样的概念。
任何单片机在工作之刖都要有个复位的过程,复位对于单片机来说就是程序还没有开始执行,是在做准备工作。
复位电路通常有:
上电复位电路和按键复位电路。
上电复位电路是利用电容充电来实现复位,在接电的瞬间,RST端的电位与VC—样,随着充电电流减少,RST电位慢慢下降。
只要保证RST为高电平的时间大于两个机器周期,就能正常的复位。
按键复位电路是在复位电路中设计按键开关触发复位电平,控制单
片机复位。
此时电源VCC经两个电阻分压,在RST端产生一个复位高电平。
I
图4按键复位电路
3.3.2时钟震荡电路
振荡电路对于单片机来说是非常重要的,没有晶振就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。
单片机工作时是一条一条地从ROM中取指令,然后一步一步地执行。
电路图如下
——C5C斗
CAPCAP
12、产
□
CRYSTAL
XTALlXTAI
IB5时钟震荡电路
333温度采集模块
温度是作物生长发育最重要的因素之一。
直接影响植物光合作用、呼吸作用、细胞壁渗透性、水分和矿物质养分的吸收、蒸腾、酶活性和蛋白质凝聚等。
我选用DSI8B20作为温度传感器,因为这个温度传感器功能单一(仅测量温度)、测量误差小、响应速度和传输速度快、传输距离远、体积小、功耗低等,适合远距离测温、控温,不需要进行非线性校准。
外围电路简单,是目前在国内外应用最为普遍的一种集成温度传感器。
3.3.4加热模块
大棚里的温度不会一成不变,当天气寒冷时,温度也会随之降低,过低的温度也不利于植物的生长。
因此需要外加的升温装置,用热风机加热空气保持室内温度。
热风机的工作原理就是当环境温度低于设定值时,热风机工作。
燃烧器将柴油高度雾化后,产生高温气体,通过高效率的换热器,把由风机引入的空气充分加热,产生的高温热空气通过出风口送入室内各处,同时换热后的低温烟气通
过烟囱排出室外。
3.3.5降温模块
夏天的温度都很高,如果不采取降温措施就会影响植物的生长,因此降温设施就很好的解决了这一担忧。
我采用了两种降温的方法,一种是自然通风,一种是机械通风。
自然通风就是将大棚预留的天窗打开,自然通风在冬天效果最好,
因为此时内外空气的温差最大。
由于空气温差,可使屋顶排气孔成为绝佳的出气口,侧面排气孔则成为绝佳的进气口。
当天气很热时,内外的空气温差就很小,甚至不存在。
事实上,当最需要通风的时候往往是自然通风最小的时候。
若通风
是外界风所引起,则较温暖的地区,使用自然通风会有较佳的效果。
机械通风就是通过降温风扇来降温,将室内的热气强行排出。
这个方案需要维持适当的气密性,才能使空气由进气口进,由排气风机出;但是也因为气密而容易有热累积的现象,是以在设计上需注意通风量的大小,至少其降温效果要优于自然通风,即要比在同一地点采用侧窗配合天窗的温室的降温效果要好。
3.3.6显示电路
LCD显示电路用LCD1602字符型液晶显示模块与单片机连接进行数值显示。
1602LCD采用标准14脚或16脚接口,RS为寄存器选择器,RS为高电平时选择数据寄存器,为低电平时选择指令寄存器。
R/W为读写信号线,为高电平时进行
读操作,为低电平时进行写操作,当RS和R/W同为低电平时可以写入指令或者显示地址;当RS为低电平时,R/W为高电平时可以读忙信号;当RS为高电平,R/W为低电平时可以写入数据。
E为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。
D0~D7为8位双向数据线。
3.3.7湿度报警模块
空气中的湿度也是影响植物生长的因素,在设计中通过湿度传感器检测湿
度,当湿度过高或过低时通过报警电路报警。
蜂鸣器有以下两种:
1、压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管
或集成电路构成。
当接通电源后,多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
2、电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振
动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
键盘与单片机连在一起,一开始在键盘上输入一个设定值,然后在与检测到的数值进行比较。
键盘采用的是74922芯片,74922芯片是专用编码键盘接口芯片,当按下某一按键时,该芯片能自动给出相应的编码信息,并可自动消除抖动从而可使设计者免除一部分软件编程。
第四章软件设计
显示
ERKOM
4.2DS18B20模块程序
4.3传感器原理流程图
温湿度采集
温湿度转换
数据采集
报警输出
第五章调试
5.1硬件调试
硬件电路板分模块焊接,每一个模块焊接好了以后,先检查是否错焊、漏焊、虚焊,元器件有没有接错、接反。
然后写入简单的程序仿真,看效果。
这样依次焊接、检测每一个模块,最后整个电路板完成。
将编好的完整程序用仿真器连接电路板进行整体仿真,调试检测完整的电路板,看是否能全部实现功能。
在本次电路板设计中,出现最重要的问题是板子焊完后,数码管显示的数字不对,是看不懂的,经导师指导后得知,原来是写程序时没有注意数码管是共阴极还是共阳极,导致数码管显示的乱码。
在焊接电路板时,由于不太细心常常有地方虚焊或连焊,导致电路一开始不好使。
但是经过排查,最后都改正过来了。
在焊接的过程中,自己也常常马虎,将引脚焊错位置的情况时有发生,经过这次实践,我觉得自己的动手能力提高了许多。
5.2软件调试
在对KeilC软件的使用时不太熟悉,一是因为不经常使用,二是因为再次使用时时间有点久,所以导致在软件上也浪费了很长时间。
因为用的是DHT11数字传感器,在编程过程中需要对所测得温度进行处理,而且需要给定一个温度范围,建立一个温度与电机转速的数学模型,经过反复的计算、实验才实现。
采用proteus软件对程序和硬件电路进行仿真,可是在仿真过程中,独立按键总是不灵敏,这需要对延迟时间进行调整,而程序中设置的延迟时间总是不能够很符合实际操作,所以在这方面浪费了大量的时间进行反复的操作和实验。
在程序编写的过程中,也暴露了自己很多的不足,一开始无从下手,在咨询过老师和同学后有点思绪了。
程序
#include
#include
#defineLCD_DBP2
sbitDQ=P1A0;
sbitBUZZER=PM1;
sbitPWM=P1A2;
sbitLCD_RS=P1A4;
sbitLCD_RW=P1A5;
sbitLCD_E=P1A6;
sbitHEAT=P1A7;
voidinitial(void);
voidread_DHT11(void);
voidLCD_write_command(unsignedcharcom);
voidLCD_display_char(unsignedcharx,unsignedchary,unsignedchardat);
unsignedcharread_DHT11_char(void);
voidcontrol_temperature_humidity(void);
voiddelay_xms(unsignedinttime_xms);
voiddelay_x10us(unsignedinttime_x10us);
unsignedcharstop_system=0;
unsignedcharlineOne[]="TS(0-50):
C";
unsignedcharlineTwo[]="HS(20-90):
%RH";
unsignedintT0_number=0,T1_number,PWM_width_H;
unsignedchartemperature_ten,temperature_one,humidity_ten,hum