基于51单片机的智能窗户设计

限和下限、温度转换的精度,读出Scrachpad存储器中的九个字节的数据,读出Rom中的64位Code值,对读出的Scrachpad数据进行CRC校验,然后根据读出的数据得到测量出的十进制温度值。从DHT11中读出九个字节数据的流程图如图5.2所示。

初始化 ROM指令 读取温湿度 N CRC校验 Y 储存温度

结束 图5.2温度读取流程图

DHT11数据的CRC校验。为了解决单总线串行传输数据可能引起的错误,DHT11内部具有产生CRC校验码电路,这样编程时可以通过对读出的数据进行CRC校验码,并用这个校验码和获得的数据的最后一个字节比较,若两者相同则证明数据传送没有错误,从而验证通信过程中数据传输的正确性,使采集温度信号的可靠性得到保证。

CRC检验的求法。M为一个k位长的信息帧。P为n+1位预先确定的用来生成校验码的二进制序列其最高位和最低位必须为1,DS18B20中使用的序列为:P = 1 0011 0001。F为n位FCS,即校验码序列。T为k+n位被传输的帧。因为F是接在M信息帧之后的,因此T=M 2 2 n (2 n 为2的n次方)中,M 2 2 n 相当于M左移n位,后面添n个零。设M 2 2 n 除以P的商和余数分别是Q和R,则有M 2 2 n =P 2 Q+R即M 2 2 n /P=Q+R/P若设T=M 2 2 n +R,则T定能被整除。因为按模2的加减运算相当于异或运算,故有T/P=(M 2 2 n +R)/P=(M 2 2 n )/P+R/P =Q+R/P+R/P=Q这样一来,校验码序列F就是M 2 2 n 除以P的余数R。通过计算可以得到 256个用于CRC检验的数据[4]。

在本设计中,为了降低处理器的功耗,选用了查表法来进行计算。其关键代码如下: for(i=0;i

checkdata=(checkdata<<8)^CRCTable[((checkdata>>8)^crc_data[i])]; }

CRC_CCITT_L=(unsigned char)(checkdata%6);

CRC_CCITT_H=(unsigned char)(checkdata/256);

5.2.2 电机控制系统

窗户控制系统主要包括开关窗户的控制。夏天当温度传感器检测到室外温度高于30℃

16

时,P1.2=1、P1.1低电平,电机正转窗户关闭到限位点时,电机停止。温度传感器检测到室外温度低于25℃时,P1.2=0、P1.1高电平,电机反转窗户开启到限位点时,电机停止。

开始 是 温度>30℃? 电机反转开窗 温度<25℃ 是 电机正转关窗 结束

图5.3 窗户控制程序流程图

5.2.3LCD12864显示程序设计

LCD显示程序最主要的部分就在发送命令和发送数据这两个基础程序。通过LCD的数据手册,可知LCD时序图如下。 表5-1 LCD12864基本操作状态表

1. 读操作时序

根据LCD12864控制器的数据手册,可以通过流程图来得知LCD读取数据和写入数据的时序及流程。如图5.4所示。

图5.4 LCD12864读操作时序

2. 写操作时序如图

17

图5.5 LCD12864写操作时序

LCD写操作包括写数据和写命令两个部分构成,当RS=0时,为写命令,当RS=1时为写数据。

具体程序见附页。

18

第6章 系统组装与调试

6.1 基本电路板检查

根据前面的研究完成各个电路模块的原理设计并生成PCB图,制作电路板,进行实验调试。

(1)检查印制板的印制线是否有断路,是否有毛刺,是否与其它线或是焊盘粘连,焊盘是否有脱落,过孔是否有未金属化现象等等。

(2)先用万用表复核目测中认为可疑的连接或是接点,检查它们的通短状态是否与设计规定相符。再检查各种电源线与地线之间是否有短路现象,如有再仔细检查出并排除。短路现象一定要在器件安装及加电前检查出。

(3)路接通电源后,用手摸一下芯片是否发热,如果发热,立即关掉电源,稍后再进行再次检测;如果没有发热,再测试芯片的VCC端电压是否达到设计要求,接地端是否都接地。

6.2 主控模块调试

在本次设计中,主控模块是非常重要的部分,它不仅是本次设计的核心,在本次硬件调试中也遇到了问题,接上电源的时候,液晶显示亮了,但没有任何显示,于是我做了如下的工作:

(1)检查电源是否通电,使用万用表测试之后,主要测试各个芯片和液晶显示是否正常通电,发现电压、电流都是正确的;

(2)液晶显示通电但没信号显示,检测发现是电位器烧坏了,换了一个好的。重新通电液晶正常显示。 6.3 软件调试

当硬件制作完成后,软件制作也是不可轻视的部分,是实现电路的功能的关键部分,通过本次毕业设计,总结经验如下:

(1)先进行人工检查。写好程序后,不要立刻烧入单片机,先对纸面上的程序进行人工检查。由于采用C语言编程,所以要特别小心地检查语法错误,如括号不配对,漏写分号等,通过仔细的检查,发现并排除这些错误。

(2)人工检查无误后,上机调试。在编译时给出的语法错误的信息,根据提示的信息具体找出程序中错误之处并改之,从上至下逐一改正。应当注意的是:有的提示出错行并不是真正出错的行,如果在提示出错的行上找不到错误的话,则应该到上行再找。

(3) 当确认程序无语法错误和逻辑错误时,通过直接下载到单片机来调试。采用的是自下到上的调试方法,即单独调好每一个模块,然后再连接成一个完整的系统调试。 (4) 程序烧入单片机后,观察各个部件的工作是否正常,功能是否实现。如不能正常工作,则继续检查程序中的相应模块,必要时从上到下重新检查程序。 6.4数据整理

1、当外界湿度大于80%时,窗户都是关闭的;

2、当外界温度大于30℃时,窗户关闭并开启空调; 3、当外界温度小于20℃时,窗户开启且关闭空调;

4、在湿度小于80%且温度小于30℃时,窗户的状态是保持原来的状态。

19

联系客服:779662525#qq.com(#替换为@)