基于51单片机-单总线高精度温度采集系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

大连理工大学本科设计报告题目:单总线高精度温度采集系统题目:单总线高精度温度采集系统1设计要求系统结构:1)由DS18B20实现对温度的采集;2)由数码管实现温度显示系统。设计要求:1)启动DS18B20进行12位高精度环境温度采集;2)利用数码管显示数据;3)具有温度上限声光报警;4)可以通过键盘设定报警上限值。扩展功能:1)报警频率随实测温度与报警温度的差值变化,相差越大频率越高;2)键盘设定上限值时十位,个位的闪烁,并且在输入后停止闪烁。2设计分析及系统方案设计程序采用无限循环结构。一次循环中,完成对温度的采集和显示,判断超过设定值时报警。键盘设定用外中断/INT1完成,T1产生方波驱动蜂鸣器发声,初值赋为采集温度与设定值的差值。3.系统电路图ZLG7290B/INT_KEY/SCLSCKSDAAT89C51P1.0P1.1P1.2(/INT0)DS18B20P3.3DQ4K7VCCP3.2BuzzerGNDP3.510K10KVCC+5GND4外围接口模块硬件电路功能描述ZLG7290B:数码管动态显示驱动、键盘扫描芯片。通过按键进行上限温度的设定及温度的显示模块。蜂鸣器模块:当温度超过上限则报警。DS18B20:智能温度传感器。对环境温度进行12位精度的采集。5主程序中主要变量定义K1-K16键盘矩阵电路8位数码管显示变量名称RAM单元/寄存器功能TEMPER_L36H读出温度值低8位数据TEMPER_H35H读出温度值高4位数据TEMPER34H转换温度整数部分TEMPER-NUM60H转换温度整数部分的缓冲单元TEMPER_XS33H转换温度小数部分TEMPER-NUM-XS61H转换温度小数部分的缓冲单元LIMIT14H键盘输入的温度上限值6系统软件中各个子程序的功能描述子程序名称入口参数出口参数功能描述GET_TEMPER无温度值高四位TEMPER_L、温度值低8位TEMPER_H从DS18B20中读出12位温度数据TEMPER_COVTEMPER_LTEMPER_HTEMPERTEMPER_XS将读出的12位温度数据转换并保存INT_1820无FLAG1初始化DS18B20WRITE_1820A无向DS18B20中写入数据INT_T1TH1TL1定时器T1中断。装定时初值,初值为温度差值,并对P3.5取反驱动蜂鸣器。DISPLAYTEMPERTEMPER_XS无将温度通过数码管显示出来READ_18200无TEMPER_LTEMPER_H从DS18B20中读出数据并储存7主程序程序流程图NYY8程序清单TEMPER_LEQU36H;存放读出温度低位数据TEMPER_HEQU35H;存放读出温度高位数据TEMPEREQU34H;存放转换后的8位温度值TEMPER_XSEQU33H;存放转换温度的小数部分TEMPER_NUMEQU60H;缓冲单元TEMPER_NUM_XSEQU61HFLAG1BIT00HDQBITP3.3;一线总线控制端口LIMITEQU14HWSLAEQU070HRSLAEQU071HSDABITP1.0SCLBITP1.1ORG8000HLJMPMAIN开始7290复位开键盘中断INT0开T1中断并赋初值读温度子程序转换温度子程序采集温度值是否大于设定值开T1中断,把设定值与温度差值赋给T1初值,并驱动蜂鸣器报警把数据通过数码管显示出来ORG8003H;外中断Int0的入口地址LJMPINT_7290ORG801BH;定时器T1的入口地址LJMPINT_T1ORG8100HMAIN:MOVSP,#70HCLRP1.2;7290复位LCALLDELAYSETBP1.2MOVLIMIT,#0FFHLP1:SETBEX0;开外中断0SETBEAMOVTCON,#00HSETBET1;开T1中断SETBEAMOVTMOD,#10H;T1初值MOVTL1,#33HMOVTH1,#0FEHLCALLGET_TEMPER;从DS18B20读出温度数据LCALLTEMPER_COV;转换读出的温度数据并保存MOVA,TEMPERCJNEA,LIMIT,NEXTNEXT:JNCNEXT1;TEMPER=LIMITJMPNEXT2NEXT1:SETBTR1LJMPNEXT3NEXT2:CLRTR1NEXT3:MOV31H,#00H;显示整数部分MOV30H,#01HMOVB,#10DIVABADDA,#02HMOV37H,AMOVA,BADDA,#0CHMOV36H,AMOVA,TEMPER_XS;显示小数部分MOVB,#4MULABADDA,#16HMOV35H,AINCAMOV34H,AINCAMOV33H,AINCAMOV32H,AMOVDPTR,#LEDSEG1CLRAMOVR7,#08HMOVR0,#20HMOVR1,#30HLOOP1:MOVA,@R1MOVCA,@A+DPTRMOV@R0,AINCR1INCR0DJNZR7,LOOP1MOVR7,#08HMOVR0,#20HMOVR2,#10HMOVR3,#WSLALCALLWRNBYTLCALLDELAY2MOVA,TEMPERSJMPLP1;T1中断服务程序INT_T1:PUSHACCPUSHPSWCLRTF1MOVA,TEMPERSUBBA,LIMITMOVB,#2MULABADDA,#33HMOVTL1,A;赋定时器t1初值MOVTH1,#0FEHCPLP3.5POPPSWPOPACCRETILEDSEG1:DB0C6H,9CH;查表DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H,0FEH,0F6HDB0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E5H,0FFH,0F7HDB0FCH,0FCH,0FCH,0FCH,0FCH,0BEH,0DAH,0B6H,60H,0DAH,0B6H,0FCH,60H,0FEH,0E4H,0B6HDB0DAH,0B6H,0FCH,0FCH,0F2H,60H,0DAH,0B6H,0F2H,0E4H,0B6H,0FCHDB66H,0F2H,0E4H,0B6HDB0B6H,0FCH,0FCH,0FCHDB0B6H,0BEH,0DAH,0B6HDB0BEH,0DAH,0B6H,0FCHDB0BEH,0FEH,0E4H,0B6HDB0E4H,0B6H,0FCH,0FCHDB0FEH,60H,0DAH,0B6HDB0FEH,0E4H,0B6H,0FCHDB0F6H,0F2H,0E4H,0B6HDB00H,0EEH,10HDELAY2:PUSH00HPUSH01HMOVR0,#00HDELAY3:MOVR1,#00HDJNZR1,$DJNZR0,DELAY3POP01HPOP00HRET;******************************读取温度值GET_TEMPER:;读出转换后的温度值SETBDQ;定时入口BCD:LCALLINIT_1820JBFLAG1,S22LJMPBCD;若DS18B20不存在则返回S22:LCALLDELAY1MOVA,#0CCH;跳过ROM匹配0CCHLCALLWRITE_1820MOVA,#44H;发出温度转换命令LCALLWRITE_1820LCALLDELAYCBA:LCALLINIT_1820JBFLAG1,ABCLJMPCBAABC:LCALLDELAY1MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820MOVA,#0BEH;发出读温度命令LCALLWRITE_1820LCALLREAD_18200;READ_1820RETWRITE_1820:;写DS18B20的程序MOVR2,#8CLRCWR1:CLRDQMOVR3,#6;延时24usDJNZR3,$RRCAMOVDQ,CMOVR3,#23;延时60usDJNZR3,$SETBDQ;一个写周期至少要维持60us以上NOP;离下一个写周期至少要有1us间隔DJNZR2,WR1SETBDQRETREAD_18200:;读DS18B20的程序,从DS18B20中读出两个字节的温度数据MOVR4,#2;将温度高位和低位从DS18B20中读出MOVR1,#36H;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)RE00:MOVR2,#8RE01:CLRCSETBDQNOPCLRDQ;DQ;DQ=015US内NOP;18B20送数,主控器NOP;必须完成DQ的采样SETBDQ;主控器释放DQMOVR3,#2DJNZR3,$;延时10usMOVC,DQ;取dq数据位MOVR3,#23;延时60usDJNZR3,$RRCADJNZR2,RE01MOV@R1,ADECR1DJNZR4,RE00RETTEMPER_COV:;将读出的数据进行转换MOVA,#0F0HANLA,TEMPER_LSWAPAMOVTEMPER_NUM,AMOVA,TEMPER_LANLA,#0FHMOVTEMPER_NUM_XS,AMOVTEMPER_XS,TEMPER_NUM_XSTEMPER_COV1:MOVA,TEMPER_HANLA,#07HSWAPAADDA,TEMPER_NUMMOVTEMPER_NUM,AMOVTEMPER,TEMPER_NUMRETINIT_1820:;DS18B20初始化程序SETBDQNOPCLRDQMOVR0,#80HTSR1:DJNZR0,TSR1SETBDQMOVR0,#25HTSR2:DJNZR0,TSR2JNBDQ,TSR3LJMPTSR4TSR3:SETBFLAG1LJMPTSR5TSR4:CLRFLAG1LJMPTSR7TSR5:MOVR0,#06BHTSR6:DJNZR0,TSR6TSR7:SETBDQRETDELAY1:MOVR7,#20HDJNZR7,$RETDELAY:PUSH00HPUSH01HMOVR0,#00LP:MOVR1,#00HDJNZR1,$DJNZR0,LPPOP01HPOP00HRET;******************************键盘设定温度上限值INT_7290:PUSH00HPUSH02HPUSH03HPUSH04HPUSH07HPUSHACCPUSHPSWLCALLRDKEYCJNEA,#0AH,DOWN1LJMPAKEYDOWN1:LJMPDOWNAKEY:LCALLDISPLAYA;闪烁控制PUSH05HPUSH06HMOVR5,#70HMOVR6,#08HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALLWRNBYTLCALLDELAYPOP06HPOP05HCXUN:JBP3.2,$LCALLRDKEYCJNEA,#0AH,NEXT4;查询输入值是否为数字NEXT4:JNCCXUNNEXT5:MOV40H,ALCALLDISPLAY1MOVA,40HMOVB,#10MULABMOV14H,A;存十位;闪烁控制PUSH05HPUSH06HMOVR5,#70HMOVR6,#04HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALLWRNBYTLCALLDELAYPOP06HPOP05HCXUN1:JBP3.2,$LCALLRDKEYCJNEA,#0AH,NEXT6;查询输入值是否为数字NEXT6:JNCCXUN1;闪烁控制NEXT7:PUSH05HPUSH06HMOVR5,#70HMOVR6,#00HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALLWRNBYTLCALLDELAYPOP06HPOP05HMOV41H,A;存个位LCALLDISPLAY2;显示个位数MOVA,41HADDA,14HMOVLIMIT,A;设定报警值JBP3.2,$FH1:LCALLRDKEYCJNEA,#0BH,FH1DOWN:CLRIE0POPP

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功