1、基于51单片机的多路温度采集控 制系统设计言:随着现代信息技术的飞速发展,温度测量控制系统在工业、农业及人 们的日常生活中扮演着一个越来越 重要的角色,它对人们的生活具有很 大的影响,所以温度采集控制系统的 设计与研究有十分重要的意义。本次设计的目的在于学习基于 51单片机的多路温度采集控制系统 设计的基本流程。本设计采用单片机 作为数据处理与控制单元,为了进行 数据处理,单片机控制数字温度传感 器,把温度信号通过单总线从数字温 度传感器传递到单片机上。单片机数 据处理之后,发出控制信息改变报警 和控制执行模块的状态,同时将当前 温度信息发送到LED进行显示。本系 统可以实现多路温度信号采集与
2、显 示,可以使用按键来设置温度限定 值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和继 电器的目的。我所采用的控制芯片为 AT89C51,此芯片功能较为强大,能 够满足设计要求。通过对电路的设 计,对芯片的外围扩展,来达到对某一车间温度的控制和调节功能。关键词:温度 多路温度采集 驱动电路正文:1、温度控制器电路设计本电路由89C51单片机温度传感 器、模数转换器ADC0809,窜入并出 移位寄存器74LS16 4、数码管、和LED 显示电路等组成。由热敏电阻温度传 感器测量环境温度,将其电压值送入 ADC0809的INO通道进行模数转换,转换所得的数字量由数据端D7-D0输 出到
3、89C51的P0 口,经软件处理后 将测量的温度值经单片机的RXD端窜 行输出到74LS16 4,经74LS16 4窜并 转换后,输出到数码管的7个显示段,用数字形式显示出当前的温度值。89C51 的 P2.0、P2.1、P2.2 分别接入 ADC0809通道地址选择端A、B、C,因此ADC0809的IN0通道的地址为 FOFFHo输出驱动控制信号由pl.0输 出,4个LED为状态指示,其中,LED1 为输出驱动指示,LED2为温度正常指 示,LED3为高于上限温度指示,LED4 为低于下限温度指示。当温度高于上 限温度值时,有P1.0输出驱动信号,驱动外设电路工作,同时LED1亮、LED2灭
4、、LED3亮、LED4灭。外设电 路工作后,温度下降,当温度降到正 常温度后,LED1亮、LED2亮、LED3 灭、LED4灭。温度继续下降,当温度 降到下限温度值时,P1.0信号停止输 出,外设电路停止工作,同时LED1 灭、LED2 灭、LED3 灭、LED4 亮。当 外设电路停止工作后,温度开始上 升,接着进行下一工作周期。2、温度控制器程序设计本软件系统有1个主程序,6个 子程序组成。6个子程序为定时/计数 器0中断服务程序、温度采集及模数 转换子程序ADCON、温度计算子程序 CALCU、驱动控制子程序DRVCON、十 进制转换子程序METRICCON及数码管 显示子程序DISP。(
5、1)主程序主程序进行系统初始化操作,主 要是进行定时/计数器的初始化。(2)定时/计数器0中断服务程序应用定时计数器0中断的目的是 进行定时采样,消除数码管温度显示 的闪烁现象,用户可以根据实际环境 温度变化率进行采样时间调整。每当 定时时间到,调用温度采集机模数转 换子程序ADCON,得到一个温度样 本,并将其转换为数字量,传送给 89C51单片机,然后在调用温度计算 子程序CALCU,驱动控制子程序DRVCON,十进制转换子程序 MERTRICCON,温度数码显示子程 序 DISPo(3)温度采集及模数转换子程序ADCON该子程序进行温度采样并将其 转换为8位数字量传送给89c51的P0
6、口。采样得到的温度数据存放在片内 RAM的20H单元中。(4)温度计算子程序CALCU根据热敏电阻的分度值和电路 参数计算出出一张温度表,存放在 DATATAB数据表中,由于篇幅关系,本程序只给出0-49C的温度数据。一 个温度有两个字节组成,前一字节为 温度值,后一字节为该温度所对应的 热敏电阻上的电压的数字量。根据采 样值,通过查表及比较的方法计算出 当前的温度值,并将其存入片内RAM 的21H单元。采用查表法计算温度值 时为了克服热敏电阻的阻值一一温 度特性曲线的非线性,提高测量精 度。(5)驱动控制子程序DRVCON该子程序调节温度,当温度高于 上限温度时(本程序设为30),P1.0
7、输出驱动控制信号,驱动外设工作降 温;当温度下降到下限温度时(本程 序设为25),P1.0停止输出,温度 上升,周而复始;工作状态有LED1-LED4 指示。(6)十进制转换子程序METRICCON将存放于内部RAM21H单元的 当前温度值得二进制数形式转换为 十进制数(BCD码)形式,以便输出 显示,转换结果存放在片内RAM的 32H单元(百位)、31H(十位)、30H 单元(个位)。(7)数码显示子程序DISP该子程序利用89C51串口的方式 0串行移位寄存器工作方式,将片内 RAM 的 30H、31H、32H 单元的 BCD 码查表转换为七段码后由RXD端串 行发出去,然后经74LS16
8、 4串并转换,将七段值传送给数码管,以十进制形 式显示出当前温度值。根据以上分析画出的部分程序设计 流程图如图1-。至图1-4所示。图1-。部分程序设计流 程图的设计框架主程序程图图1-1 主程序流图1-2 TO中断服务程序流程图图1-3 温度采样及模数转换子程序流程图图1-4温度计算子程序流程图3、具体内容(1)温度控制器电器原理图设计按以上分析及相关知识设计出 的温度控制器电路原理图如图1-5所 ZjS ORXDTXDJ出-ai _121_12Pl.0Pl 1I-1 LED-N5PI 7卜:七二乂4pi 35Pl.46PI.5/PI 65Pl.71C19RSTAT 89c5115T114T
9、O3129EA/Vp10p1 1PSENr i/.n3917P0.13X14P0.23715P0.336、P043518P0.53419P063320P0.73221P2O2125P2.12224P2.22323P2324P2425 IC3A74LS02gP2.526 2M22P2627 r _LfP2.728?RD17 s 74L027WRIC3BI71416件产10INTO12 口INTI13 1ALE30TDODI VR(+12D2D3D+VR(-)D5Db 1C2D7AB ADC 0809CINO1626OE INIALE IN2SC IN3IN4EOC IN5INSCLK IN727
10、28_L二u _sTEIFIC8图1-5温度控制电路原理图(2)温度数据表在图1-5所示的电路中,热敏电阻的 连接如图1-6所示。1714158181920212524239226710D0D1VR(+)D2D3D4D5VR(-)D6D7IC2ABCADC0809INOOEINIALEIN2SCIN 3IN4EOCIN5IN6CLKIN71216262728RT 1 _VccR720kR8100kR;2345图1-6热敏电阻的连接本设计所使用的热敏电阻的分 度表及ADC0809转换后的电压数字量见附表1-1所示转换后的电压数字量的计算方法为:热敏电阻与R8并并联后的总电阻:R=(Rt*R8)/
11、(Rt+R8)R与R7串联电路中R的分压值(即输入ADC0809的模拟量):V=5R/(R+R7)5V被分成256等分(8位量化),则 每份的电压值:=5/256输入的模拟量电压经8位量化后的数 字量:D=/例如,热敏电阻在温度为20时的阻 值为6 2.254千欧,则根据上述方法计 算出的电压数字量为169,注意在计 算中R7用实测值19.6千欧代入进入 计算。在实际做该电路时,可根据自己 所选择的热敏电阻的分度表计相关 电路参数,按上述方法计算出 ADC0809转换后的各温度对应的电 压数字量。程序中的温度数据表构成:1个 温度数据占2个字节,前一字为温度 值,后一个字节为该温度下热敏电阻
12、上的模拟电压转换成德8位数字量。如在20时,热敏电阻对应的电压数 字量为169,则20,169组成一个温 度为20C的温度数据。按这样方法组 成的0-49C的温度数据表如下:DATATAB:DB 0,194,1,193,2,192,3,191,4,190DB 5,189,6,188,7,187,8,186,9,185DB10,184,IL 182,12,181,13,180,14,178DB 15,177,16,175,17,174,18,173,19,171DB 20,16 9,21,16 8,22,16 6,23,16 5,24,16 3DB 25,16 1,26,159,27,158,2
13、8,156,29,154DB 30,152,31,150,32,149,33,147,34,145DB 35,143,36,141,37,139,38,147,39,135DB 40,133,41,131,42,129,43,127,44,125DB 45,123,46,121,47,118,48,116,49,114在温度采样机模数转换子程序 中,采样得到的当前温度下热敏电阻 上的数字电压存于20H单元,在温度 计算子程序中通过查表的方法从表 中的第一个温度(0)下热敏电阻 上的数字电压开始,依次取出各温度 下热敏电阻上的十字电压,与与存于 20H单元的当前温度下热敏电阻上的 的数字电压比较
14、,如小于当前温度的 数字电压,则在取出下一温度的数字 电压与当前温度的数字电压比较;直 到大于或等于当前的温度数字电压,比较结束。如大于则取出前一温度作 为当前温度存于21H单元,如等于则 将该温度作为但前温度存于20H单 元。这种温度计算方法,避免了温度 特性曲线的非线性对温度计算精确 性的影响,计算出的温度非常精确。(3)温度控制程序设计在本设计中,晶体振荡器频率为 6 MHz,TO 定时时间为 100ms,TO X 作于方式1,则T0的初值为:X=(最大计数值M定时时间t/及其 周 期 Tm)=216-100ms/2us=15536=3CB0H按以上任务分析设计出的源程序如下:ORG 0
15、000H;跳转到主程序LJMP MAIN;ORG 000BH;LJMP TOINT;跳转到TO中断服务程序;主程序ORG 01 OOH;MAIN:MOV RI,#10;TO100马上定时溢出计数寄存器R1赋初值10MOV P1,#OFFH;所有指示灯灭MOV SP,#6 0H;针赋初值6 0H堆栈指TO定MOV TMOD,#01H;时、方式1、软启动MOV TL0,#0B0H;TO赋初值MOV TH0,#3CH;MOV IE,#82H;开放TO中断SETB TRO;启动 TOSJMP$;定时/计数器0中断服务程序ORG 0200H;TOINT:DJNZ R1,NEXT;TO 溢出10次,即Is
16、进一次采样处理LCALL ADCON;调用温度采样及模数转换子程序LCALL CALCU;调用温度计算子程序LCALL DRVCON;调用驱动控制子程序LCALL METRICCON;调用十进制转换子程序LCALL DISP;调用数码管显示子程序MOV Rl,#10;RI重赋值10NEXT:MOV TL0,#0B0H;TO 重装初值MOV TH0,#3CH;RETI;温度采样及模数转换子程序ORG 0300H;ADCON:MOV DPTR,#0F0FFH;选通ADC0809 通道 0MOVA,#OOH;MOVX DPTR,A;启动A/D转换HERE:JNB P3.3,HERE;判断数据转换是否
17、结束,没结束则等待MOVXA,DPTR;读取转换后的数据MOV 20H,A;将从ADC0809中读取的当前温度下热敏 电阻上的电压值存于20H单元RET;温度计算子程序ORG 0400H;CALCU:MOV R2,#01H;R2 为 数据表的索引值寄存器MOV DPTR,#DATATAB;温度 数据表首地址送DPTRNEXT1:MOV A,R2;索引值送AMOVC A,A+DPTR;查表取出某一温度的数字电压值CJNE A,2OH,K1;与当前温度的数字电压值比较DEC R2;等于当 前温度的数字电压值,则查表取出该温度值作为当前温度值MOVA,R2;MOVCA,A+DPTR;LJMP K3;
18、K1:JNC K2;大于当前温度的数字电压值,则继续取出下一温 度的数字电压进行比较DEC R2;小于当前温度的数字电压值,则查表取出前一个 温度值作为当前温度值DEC R2DEC R2M0VA,R2;MOVC A,A+DPTR;LJMP K3;K2:INC R2;INC R2;LJMP NEXT1;K3:MOV 21H,A;将当前温度值存于21H单元 RET;DATATAB;DB0,194,1,193219231914190;温度数据表DB5,189,6,188,7,187,8,1869185DB10,184,11,182,12,181,13J80J4,178DB1577675774,187
19、3971 DB20,16 9,21,16 8,22,16 6,23,16 5,24,16 3 DB25,16 1,26,159,27158,28/56,29,154DB30,152,31,150,32,149,33,147,34,145DB35,143,36,141,37,139,38,137,39,135 DB40/33,41,131,42129,43,127,44,125 DB45,123,46,121,47,118,48,116,49,114驱动控制子程序ORG 0500H;DRVCON:MOV A,21H;取出当前温度值CJNE A,#3O,J1;与上限温度值(30)比较LJMP GO
20、;J1:JNC DRV1;若高于上限温度,则输出驱动信号,同时高 于上限温度指示灯点亮CJNE A,#25,J2;与显现温度(25)比较LJMP GO;J2:JC DRV2;弱低于下限温度,则驱动信号停止输出,同 时点亮低于下限温度的指示灯LJMP GO;DRVkCLRPl.O;SETB PL 1;CLRP1.2;SETB Pl.3;LJMP OVER;DRV2:SETB P1.0SETB Pl.1;CLRP1.2;SETB Pl.3;LJMP OVER;DRV2:SETB P1.0;SETB PL 1;SETB Pl.1;SETBPL2;CLRP1.3;LJMP OVER;GO:CLR Pl
21、.l;在下线温度(25)至上限温度(30)之间,则驱动信号保持前面状态,同时温度正常指示灯点亮SETBP1.2;SETBP1.3;OVER:RET;十进制转换子程序ORG 06 00H;METRICCON:MOV R3,#00H;将存于21H单元中的当前温度转换为BCD码MOV R4,#00H;百位存于32H单元,十位存于31H单元,个位存于30H单元MOVA,21H;CLRC;W1:SUBB A,#100;JC W2;INC R4;AJMPW1;W2:ADD A,#100;CLRC;W3:SUBB A,#10;JC W4;INC R3;AJMPW3;W4:ADD A,#10;MOV 30H,
22、A;MOV31H,R3;MOV 32H,R4;RET;数码管显示子程序ORG 0700H;DISP:MOV R5,#03H;将存于32H单元、31H单元、30H单元中的温度BCD码查表转换为七段码MOV R0,#30H;通过串行通信方式0输出驱动3个数码管,显示当前温度MOV DPTR,#TAB;LOOP:MOVA,RO;MOVC A,A+DPTR;MOV SBUF,A;WAIT:JNB T1,WAIT;CLRT1;INC RO;DJNZ R5,LOOP;RET;TAB:DB3FH,06 H,5BH,4FH,6 6 H,6 DH,7DH,07H,7FH,6 FH;七段码数据表附表:1-1热敏电
23、阻分度表及经ADC0809转换后的电压数字量温度热敏电阻阻转换后的电压()值(千欧)数字量016 1.6081941153.63081932146.08331923138.94351914132.019011905125.80251896119.76081887114.0461878108.63971869103.52431851098.6833184111213141516171819202122232494.1006 18289.7613 18185.6511 18081.7564 17878.0646 17774.5637 17571.2425 1746 8.0903 1736 5.09
24、72 1716 2.254 16959.5519 16856.9829 16654.5392 16552.2138 16252627282930313233343536373850 16147.8916 15945.8829 15843.9683 15642.1428 15440.4017 15238.7405 15037.1552 14935.6418 14734.1967 14532.8164 14331.4979 14130.238 13929.0339 137394041424344454647484950515227.883 13526.7828 13325.7308 13124.7
25、25 12923.763 12722.843 12521.9629 12321.1211 12120.3158 11819.5453 11618.8082 11418.1028 11217.4241 11016.7787 108 机原理及应用.广东:华南理工大学出2.江太辉,石秀芳主编.MCS-51单片应用.北京:机械工业.,2006.1.贾好来主编.MCS-51单片机原理及参考文献:6012.5686915913.018935813.4866955713.9754975614.4861995515.01991005415.57881025316.1643104 术实验.北京:北京大学.,2002.6.朱定华主编.单片机原理及接口技学.,1990.统设计.北京:北京航天航空大5.何立民主编.MCS-51单片机应用系中国劳动社会保障.,2006.单片机应用技术(汇编语言).北京:4.劳动和社会保障部教材办公室主编.2004.机原理及应用.重庆:重庆.,3.曹龙汉,刘安才主编.MCS-51单片版社,2004.