- 387.65 KB
- 22页
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'《微机原理》课外设计制作终期报告题目:室内环境控制系统组号:14任课教师:XXXXXXX
一、项0要求1)本地温湿度采集和显示(1)实吋温湿度釆集,(2)数字显示,温湿度同吋显示。(3)显示精度:1位小数(4)其它与温湿度有关的扩展2)向上位机进行数据传递(1)实现温湿度采集子系统向上位机进行数据传送;(2)进行全双工通信,设计上位机、下位机通信程序,通信波特率9600bps,8位数据、1个停止位、无校验。(3)在PC机屏幕敁示采集到温湿度3)上位机向下位机提出报警(1)上位机对采集的数据进行分析,如果温度超过5-3(TC的范围或湿度超过40°%〜80%RH,会发出警示信息;(2)将该警示信息发到下位机,并进行敁示和驱动电机控制。
二、元器件介绍1、温湿度传感器DHT11DHT11数字温湿度传感器是•一款含冇已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具宥极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机和连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制申行接H,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。VDDVDD5KDATAGND典型应用电路串行接口(单线双向)DATA用于微处理器与DHT11之问的通讯和同步,采用单总线数据格式,一次通讯吋间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确吋校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。用户MCU发送一次丌始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送岀40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没冇接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据£;转换到低速模式。
三、设计方案通过DHT11温湿度传感器接受室内温湿度,然后把40bit温湿度数据传送给单片机并显示在LCD1602上,与此同吋,单片机与电脑进行串口通信,使用汇编语言编写上位机程序将温湿度数据能够在上位机进行监控显示。当温度超过5-30°C的范围或湿度超过40%〜80%RH,上位机会向单片机发送字符以报警,达到室内环境监控的目的。四、具体实现方案(一)、上位机显示程序使用汇编语言编写上位机程序。将接收到的温度信号显示在显示区。可进行操作对H立机发送信息。当温度超过5-3CTC的范围或湿度超过40%〜80%RH会CJ动向下位机发送指令。具体代码如下:STACKSEGMENTDB256DUP(O)ZSDB256DUP(O)STACKENDSDATASEGMENTSEDDB256DUP(O)RECDB256DUP(O)wenDB"Wendu:z,’$"shiDB,Shidu:,/$,DATAENDSCODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACKPUSHDSXORAX,AXPUSHAXSTART:MOVAX,DATAMOVDS,AXMOVDX,3FBHMOVAL,80HOUTDX,ALMOVDX,3F8HMOVAL,OCHOUTDX,ALMOVDX,3F9HMOVAL,0OUTDX,ALMOVDX,3FBHMOVAL,03HOUTDX,ALMOVDX,3FCHMOVAL,03HOUTDX,ALMOVDX,3F9HMOVAL,0OUTDX,ALXORCX,CXXORBX,BXmain:PUSHAXPUSHDXMOVAH,02HMOVBH,0MOVDH,0MOVDL,0INT10HPOPAXPOPDXJMPwendumaini:MOVAL,OAHMOVBL,0MOVAH,14INT10HMOVDL,ODHMOVAH,2INT
21HJMPshidumain2:M0VAL,OAHMOVBL,0MOVAH,14INT10HMOVDL,ODHMOVAH,2INT21HPUSHCXPOPCXJMPPANDUANwendu:LEADX,wenMOVAH,9INT21HCALLRECEIVELEADI,RECMOV[DI],ALMOVDL,ALMOVAH,02INT21HCALLRECEIVEMOV[DI+1],ALMOVDL,ALMOVAH,02INT21HMOVDL,2EHMOVAH,02INT21HCALLRECEIVEMOV[DI+2],ALMOVDL,ALMOVAH,02INT21HMOVDL,43HMOVAH,02INT21HJMPmainishidu:LEADX,shiMOVAH,9INT21HCALLRECEIVEMOV[DI+3],ALMOVAH,02HMOVDL,ALINT21HCALLRECEIVEMOV[DI+4],ALMOVDL,ALINT21H
MOVDL,2EHINT21HCALLRECEIVEMOV[DI+5],ALMOVDL,ALINT21HMOVDL,25HINT21HJMPmain2PANDUAN:LEADI,RECMOVAL,[DI]CMPAL,32HJAFACMPAL,30HJNEFDMOVAL,[DI+1]CMPAL,35HJBFAFD:MOVAL,[DI+3]CMPAL,38HJNBFACMPAL,34HJBFAJMPmainMOVAL,78HMOVDX,3F8HOUTDX,ALJMPmainRECEIVEPROCNEARIQ:MOVDX,3FDHINAL,DX
TESTAL,1EHJNZIQTESTAL,01HJNZWSJMPIQWS:MOVDX,3F8HINAL,DXRETRECEIVEENDPCODEENDSENDSTART(二)、下位机程序下位机程序主要由main;lcdl602;delay;send函数构成。Main函数单片机运行的主程序。
Led1602是控制液晶显示屏的程序。Delay定义定时器的初始化及中断子函数。Send是双机通信的函数。具体代码如下:U8comdataEQU31HU8T_data_HEQU32HU8TdataLEQU33HU8RH_data_HEQU34HU8RH_data_LEQU35HU8checkdataEQU36HU8tempEQU37HtempEQU38HTEMOEQU39HTEM1EQU40HTEM2EQU41HTAEQU42HTBEQU43HTCEQU44HTDEQU45HTEEQU46HTFEQU47HTGEQU48HTHEQU49Ha_bitEQU20H;数码管个位数存放内存位置
b_bitEQU21H;数码管十位数存放内存位置c_bitEQU22Hd_bitEQU23Ht_bitEQU24Hr一bitEQU25HRSEQUP2.6;确定具体硬件的连接方式RWEQUP2.5;确定具体硬件的连接方式EEQUP2.7:确定具体硬件的连接方式BEEPEQUP1.5T2C0NEQU0C8HRCAP2LEQUOCAHRCAP2HEQUOCBHORGOOOOHAJMPSTARTORG0030HSTART:MOVPO,#OFFHMOVRCAP2L,#0D9HMOVRCAP2H,#0FFHMOVT2CON,#34HMOVSCON,#50H
MAIN:LCALLRHLCALLLCDLCALLSENDLCALLRECEIVELJMPMAINRH:CLRP2.0MOVA,#36LCALLDelaySETBP2.0LCALLDelay_10usLCALLDelay_10usLCALLDelay_10usJBP2.0,RH_ENDLOOP1:JNBP2.0,LOOP1LOOP2:JBP2.0,LOOP2LOOP2__END:LCALLReadMOVU8RH_data_H,ALCALLRead
MOVU8RH_data_L,ALCALLReadMOVU8T_data_H,ALCALLReadMOVU8TdataL,ALCALLReadMOVU8checkdata,ACLRiP2.0LCALLDelay_10usLCALLDelay」OusLCALLDelay_10usLCALLDelay_10usLCALLDelay_10usSETBP2.0RH_END:RETRead:MOVtemp,#8LOOP3:JNBP2.0,LOOP3L00P3_END:
LCALLDelay_10usLCALLDelay_10usLCALLDelay_10usLCALLDelay_10usMOVC,P2.0RLCALOOP4:JBP2.0,LOOP4DJNZtemp,LOOP3RETDelay:MOVR4,AD1:MOVR5,#0FFHDJNZR5,$DJNZR4,D1RETDelay_10us:NOPNOPNOPNOP
NOPNOPRETLCD:display:ACALLDL100MSACALLDL100MSMOVA,U8T_data_H;温度高位MOVB,#0AH;10进制/10=10进制DIVABADDA,#00110000BMOVb一bit,AMOVA,巳ADDA,#00110000BMOVa_bit,AMOVA,U8T_data_L;温度低位MOVB,#26DIVABADDA,#00110000BMOVt_bit,AMOVA,U8RH_data_H;湿度高位MOVB,#0AH;10进制/10=10进制
DIVABADDA,#00110000巳MOVd_bit,AMOVA,巳ADDA,#00110000巳MOVc_bit,AMOVA,U8RH_data_L;温度低位MOVB,#26DIVABADDA,#00110000BMOVr_bit,AFUWEI:MOVPO,#00000001B;:清屏并光标复位ACALLENABLE;调用写入命令子程序MOVP0,#00111000B;;设置显示模式:8位2行5x7点阵ACALLENABLE;调用写入命令子程序MOVP0,#00001111B;;显示器开、光标开、光标允许闪烁ACALLENABLE;调用写入命令子程序MOVP0,#00000110B::文字不动,光标自动右移ACALLENABLE;调用写入命令子程序MOVTC,b_bit
MOVTD,a_bitMOVTF,t_bitMOVR7,#08HMOVTEM1,#80HMOVTA,#01010100巳MOVTB,#00111010巳MOVTE,#00101110BMOVTG,#11011111BMOVTH,#01000011BMOVTEM2,#42HLOOP5:MOVP0,TEM1INCTEM1ACALLENABLE;调用写入命令子程序MOVR1,TEM2MOVP0,@R1;输入TINCTEM2ACALLGDPGDJNZR7,LOOP5MOVTC,d_bit
MOVTD,c_bitMOVTF,r_bitMOVR7,#06HMOVTEM1,#0C0HMOVTA,#01010010巳MOVTB,#00111010BMOVTE,#00101110BMOVTG,#00100101BMOVTEM2,#42HLOOP6:MOVP0,TEM1INCTEM1ACALLENABLE;调用写入命令子程序MOVR1,TEM2MOVP0,@R1;输入TINCTEM2ACALLGDPGDJNZR7,LOOP6MOVP0,#0C6H;;写入显示起始地址(第2行第7个位置)ACALLENABLE;调用写入命令子程序MOVP0,#00100101B;:A个位送出去SETBRS;:RS=1
CLRRW;;RW=0:准备写入数据CLRE;:E=0;执行显示命令ACALLDELAYL:判断液晶模块是否忙?SETBE;;E=1:显示完成,程序停车*/RETGDPG:SETBRS;;RS=1CLRRW;;RW=O;准备写入数据CLRE;:E=0;执行显示命令ACALLDELAYL;判断液晶模块是否忙?SETBE;;E=1:显示完成,程序停车MOVPO,#00000110B;文字不动,光标自动右移ACALLENABLE;调用写入命令子程序ENABLE:CLRRS;:写入控制命令的子程序CLRRWCLREACALLDELAYLSETBERETDELAYL:MOVP0,#0FFH;;判断液晶显示器是否忙的子程序CLRRSSETBRW
CLRENOPSETBEJBP0.7,DELAYL;:如果H.7为高电平表示忙就循环等待RETDL100MS:MOVR7,#02HDL1:MOVR6,#0C8HDL2:MOVR5,#0FAHDJNZR5,$DJNZR6,DL2DJNZR7,DL1RETDelay_2S:MOVA,#250LCALLDelayMOVA,#250LCALLDelayMOVA,#250LCALLDelay
MOVA,#250LCALLDelayMOVA,#250LCALLDelayMOVA,#250LCALLDelayMOVA,#250LCALLDelayMOVA,#250LCALLDelayRETSEND:CLRTICLRESMOVA,b_bitCALLSEND1MOVA,a_bitCALLSEND1MOVA,t一bitCALLSEND1MOVA,d_bitCALLSEND1
MOVA,c_bitCALLSEND1MOVA,r_bitMOVSBUF,AJNBTI,$RETSEND1:MOVSBUF,AJNBTI,$CLRTIRETCHULI1:MOVR6,#100BL2:CALLDEX1CPLBEEPDJNZR6,BL2MOVR5,#10CALLDELAYeRETDEX1:MOVR7,#180DE2:NOPDJNZR7,DE2RETDELAYe:
MOVR6,#50DL1T:MOVR7,#100DJNZR7,$DJNZR6,DL1TDJNZR5,DELAYeRETRECEIVE:JNBRl,LLLCLRRICALLCHULI1LLL:RETEND五、项目分工朱律诚:编写上位机代码李纯晨:编写上位机代码周轶轩:编写下位机代码肖鑫:编写下位机代码滕飞:编写下位机代码'