资源描述
智能仪器设计课程设计报告 智能温度计的设计目 录引言 31 设计任务书 32 方案总体设计与论证 33 硬件电路设计 43.1 传感器调理电路模块设计43.2 A/D转换模块设计53.3 显示模块设计73.4 键盘模块设计83.5 状态指示与接口模块设计83.6 硬件电路总体设计94 软件设计 104.1 主程序设计114.2 定时中断服务程序设计144.3 外部中断0服务程序设计164.4 温度测量子程序设计184.5 温度测量转换子程序设计214.6 显示子程序设计254.7 设置键处理子程序设计275 参考文献 29程序清单 30引 言温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。测量温度的基本方法是使用温度计直接读取温度。最常见到的测量温度的工具是各种各样的温度计,例如,水银玻璃温度计,酒精温度计,热电偶或热电阻温度计等。它们常常以刻度的形式表示温度的高低,人们必须通过读取刻度值的多少来测量温度。利用单片机和温度传感器构成的电子式智能温度计就可以直接测量温度,得到温度的数字值,既简单方便,又直观准确。1 设计任务书设计一个智能温度计,并使其具有如下特点: 1、一路水温检测, 误差:0.5;2、温度3位数码显示(XX.Xmm);3、工作状态指示;4、开机自检;5、配简单键盘;6、配微型打印机接口;7、配置通信接口。2 方案总体设计与论证图21是智能温度计的基本组成方框。主要由温度传感器(温敏二极管),信号调理电路,A/D转换器(A/D574),单片机(80C51),8279键盘输入,LED显示器以及74164,发光二极管(指示工作状态)等组成。温度传感器热敏二极管是把温度转换成电压的器件,温度传感器输出电压的大小随温度的高低变化而变化,热敏二极管在0100温度变化范围内,电压值的变化范围从1个毫伏到200个毫伏。信号调理电路的主要功能是把微弱的温度电压信号放大到(02.44)伏的范围内,以适应AD574单极性输入的要求。A/D转换器把放大后的模拟电压信号转换成对应的数字信号。单片机8051是智能温度计的核心部分,一方面控制A/D转换器实现模拟信号到数字信号的转换,另一方面将采集到温度的数字信号,经过计算处理,得到相应的温度值的BCD码,送到74164,由它驱动LED数码管显示器以数字形式显示测量的温度。通过键盘输入要报警的温度上限值,由单片机检测哪一位设定的键盘被按下,单片机可以直接将该位寄存器中的内容自动加一,即可实现相应值的设定。通过缓冲器可以预留出微型打印机的接口和单片机与其他设备的通信接口,由相关的键盘控制打印机与单片机是否连接,并且由相应的键盘控制单片机否是把数据送74164进行显示还是把数据发送至数据端口,与其他设备进行通信。图21 系统框图由上图可知系统硬件基本上由传感器信号调理模块,A/D模块,键盘模块,显示模块,工作状态指示模块,以及接口模块组成。而软件设计是紧紧围绕系统的硬件结构展开的,软件主要是配合控制硬件完成预期的设计要求,软件的基本模块也是针对上述硬件结构进行相应操作的。下面具体阐述系统各功能模块的设计。3 硬件电路设计3.1 传感器调理电路模块测温传感器选用热敏二极管传感器。这种传感器是利用半导体的温度特性来实现对温度的检测功能。硅二极管的结电压在温度每升高1时,电压下降2mV,它属于PN结型温度传感器,它在0100温度范围内表现出良好的线性,尺寸小,热时间常数为0.22s,灵敏度高,测温范围是-50150。信号调理电路中包括电桥和放大部分。将测温二极管放入电桥的一个桥臂,可直接输出传感器相对0时的电压输出,再将桥路输出送给AD620的差分输入端,进行50倍的放大,在经过OP07组成的100倍的反相放大电路,使得传感器感受0100的温度时,信号调理电路对应输出02.44V的电压值,这个电压值正好是AD574的010V单端输入电压的范围。图31 传感器调理电路模块图图31是传感器调理电路图。该电路的分分辨率为0.1,在0100范围内精度可达到0.5。该电路的调节,先将传感器放入冰水混合物中,调节W1是调理电路的输出为0;再将传感器放入沸水中,调节W2使调理电路的输出为2.44V。2.44V正好对应AD574输出为999的输入电压(单极性10V输入),这样实现了AD574的输出,正好为外界温度的情况。这样就实现了这样就实现了对温度的有效测量信号的拾获和放大。3.2 A/D转换模块设计AD574是12 位逐次逼近型的 A/D 转换芯片。转换时间为 25 35s。片内有数据输出寄存器,并有三态输出的控制逻辑。其运行方式灵活,可进行 12 位转换,也可作 8 位转换;转换结果可直接 12 位输出,也可先输出高 8 位,后输出低 4 位。可直接与 8 位或 16 位的 CPU 接口。输入可设置为单极性,也可设成双极性。片内有时钟电路,无需外部时钟。图32 A/D转换模块图图32是AD574与单片机接口电路以,它分两次将单极性电压的12位转换结果送给单片机。具体先由单片机发出控制信号,使A/D转换器启动转换,等待转换结束,单片机再分两次将转换数据读到内存中。按上图接法AD574是单极性输入,接成0+10V的接法,按上图向FF7C写数据,就启动AD574转换器开始转换,检测P1.0口即可查看AD574是否转换结束,从FF7D端口即可读出转换结果的高八位,从FF7F端口中即可读出转换结果的低四位。3.3 显示模块设计利用串口和74164驱动LED显示器工作,采用静态显示方式。这种方式可避免采用并行I/O接口占用资源较多的缺点。采用共阳极数码管,因而各位的COM接口接+5V电源,若要显示某字段,则相应的移位寄存器74164输出必须为低电平,由于74164在低电平输出时,允许通过的电流为8mA左右,故不用再加驱动电路了,只需向串口发送要显示三位数的显示控制代码(段码),即可在LED显示器上显示出所要的字符,只需将各位的小数点控制位接低电平,使其显示,其他位的小数点控制位均接高电平即可,注意加限流电阻。图33 显示模块原理图3.4 键盘模块设计因为本设计中需要的按键不多,故设计采用独立式按键,分别占用P1.4,P1.5,P1.6和P1.7口。它们分别实现选择是正常运行还是设置模式的功能键,温度上限十位的设置键,温度上限个位的设置键以及温度上限的十分位的设置键。键盘的防抖动可有软件来实现,每个引脚上都引入上拉电阻。图34 键盘模块原理图3.5 状态指示与接口模块设计当测量温度达到了上限温度时,P2.0口输出高电平,驱动报警二极管发光,指示温度已经超过上限值,当温度下降到设定值以下是,P2.0变成低电平,报警解除。当按下打印摁键时,单片机响应外部中断0,进而要打印的数码发送至打印机的数据口,进行打印。打印时,需要先将要打印的字符转换为其ASCII码,将此ASCII送入打印机数据口进行打印。需要注意要将小数点也打印出来,打印完十位和个位再将小数点打印出来,再把十分位进行打印。而扩展接口采用简单的三线式接口,一线为接收数据,一线为发送数据,还有一线为查询状态。由P2.6控制其导通,还是高阻的状态。图35 打印接口原理图图36 扩展口及工作状态原理图3.6 硬件电路总体设计将上述功能模块合理有序连接即构成整体图,电路图参见图37。图37 硬件电路总体设计原理图4 软件设计4.1 主程序设计4.1.1 主程序流程图图41 主程序流程图4.1.2 主程序汇编语言设计Org 0000H ;主程序入口地址KS: LJMP START ORG 0003H ;外部中断0服务程序入口地址LJMP INT_0 ORG 000BH ;定时器0中断服务程序入口地址LJMP INT_T0 ORG 100H TAB1: ;字符段码表格DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H DB 83H, 0C6H, 0A1H, 86H, 0FFH START: MOV SP,#60H CLR EAMOV R0,#3EH ;运行/设置状态寄存器清零MOV R0,#0H DEC R0 MOV R0,#0H DEC R0 MOV R0,#0H MOV R0,#20H ;20H-22H放初始温度设置上限值50.0MOV R,#05H INC R0 MOV R0,#0H INC R0 MOV R0,#00H SETB P1.4 ;设置P1.4P1.7为输入端口SETB P1.5 SETB P1.6 SETB P1.7 MOV R2,#03H ;在LED上显示888DL0: MOV A,#80H ;把字符“8”的段码送给累加器AMOV SBUF,A ;累加器A循环三次把段码发送到串口,显示DL1: JNB TI,DL1 CLR TI DJNZ R2 ,DLO LCALL DELAY ;延时MOV R2,#03H ;关断所有LEDDL0: MOV A,#80H ;把关断的段码送给累加器AMOV SBUF,A ;累加器A循环三次把段码发送到串口,关断LEDDL1: JNB TI,DL1 CLR TI DJNZ R2 ,DLO ;以上完成了自检MOV THOD,#21H ;设置定时器工作方式MOV TL0,#77H ;设置定时器初值MOV THO,#OECH SETB TRO ;开定时器中断SETB ETO SETB IT ;开外部中断0SETB EX0 SETB EA ;开总中断STA0: LJMP STA0 ;等待中断4.2 定时中断服务程序设计4.2.1 定时中断服务程序流程图图42 定时中断服务程序流程图4.2.2 定时中断服务汇编语言程序设计INT_T0: CLR EA ;关中断 CLR TR0 MOV TL0, #77H ;重置定时器初值MOV TH0, #0E0H MOV R0, #3DH CJNE R0, 55H, INT_T01 LCALL DISP2 MOV R6, #20H LCALL DELAY LCALL STA3 LJMP INT_T04INT_T01: MOV R0, #3EH LCALL DISP1 MOV R6, #40H LCALL DELAY LJMP INT_T03INT_T02 : LCALL DISP0 MOV R6, #20H LCALL DELAY CJNE R2, #3CH, INT_T04 MOV R0, #3CH MOV R0, #55H INT_T03 : LCALL STA2 INT_T04 : SETB TR0 SETB ET0 SETB EA RETI4.3 外部中断0服务程序设计4.3.1 外部中断0程序流程图图43 外部中断0服务程序流程图4.3.2 外部中断0汇编语言程序设计INT_0: CLR EX0 MOV DPTR ,#7FFFH LOOP:MOVX A, DPTR JB ACC.7, LOOP MOV R1,#60H MOV A, R1 ADD A, #30H MOVX DPTR, A INC R1 MOV A, R1 ADD A, #30H MOVX DPTR, A INC R1 MOV A, #27H MOVX DPTR, A MOV A, R1 ADD A, #30H MOVX DPTR, A SETB EX0 RETI4.4 温度测量子程序设计4.4.1 温度测量子程序流程图图44 温度测量子程序流程图4.4.2 温度测量子程序汇编语言设计CL0: MOV R0, #40H CLR A CLR C MOV R0, AINC R0 MOV R0, AMOV R0, #40H CLR P3.7 CLR P3.6 MOV DPTR, #FF7CH MOV A, #0H MOVX DPTR,A HD: JB P1.0, HD MOV DPTR, #0FF7DH MOVX A, DPTR MOV R7, A MOV DPTR, #0FF7FH MOVX A, DPTR ANL A, #0F0H MOV R6, A SWAP A MOV R6, A MOV A, R7 SWAP A MOV R7, A ANL A, #F0H ANL A, R6 ;低八位 MOV R6, A MOV A, R7 ANL A, #0FH ;高八位(最高四位为0) MOV R7, AMOV A, R6MOV R0,40HMOV A, R6MOV R0, AINC R0 MOV A, R7MOV R0, ACLR C LCALL BIJIAOCL3: JB F1 CL4 CLR P2.0 AJMP CL2 CL4: SETB P2.0 AJMP CL2CL2: RET BIJIAO:CLR C CLR F1 MOV A,5BH SUBB A,41H JC BIG1 CLR C MOV A,5AH SUBB A,40H JC BIG1 CLR F1 RETBIG1: SET F1 RET4.5 温度测量转换子程序设计4.5.1 温度测量转换子程序流程图图45 温度测量转换子程序流程图4.5.2 温度测量转换子程序汇编语言设计STA2 : LCALL COMP LCALL CL0 LCPJJL ZH0COMP : MOV R0,#20H MOV A ,R0 MOV B ,#64H MUL AB MOV RO,#5AH MOV R0,A INC R0 MOV R0,B MOV A,21H MOV B,#0AH MUL AB CLR C ADD A,5AH MOV 5AH,A MOV A, #0H ADDC A,5BH MOV 5BH,A CLR C MOV A,22H ADD A,5AH MOV 5AH,A MOV A, #0H ADDC A,5BH MOV 5BH,AZH0: CLR A MOV R7,40H MOV R6,41HMOV R3,A MOV R4,A MOV R5,A MOV R2,#10H HB3: MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A DJNZ R2,HB3 MOV A,R5ANL A,#0FHMOV 6AH,AMOV A,R5ANL A,#F0HSWAP AMOV 6BH,AMOV A,R4ANL A,#0FHMOV 6CH,ARET4.6 显示子程序设计4.6.1 显示子程序流程图图46 显示子程序流程图4.6.2 显示子程序汇编语言设计DISP1:SETB RS0 PUSH ACC PUSH DPH PUSH DPL MOV R2,#03H MOV R0,#6AH;(若显示设置值则上一条语句改为MOV R0,#22H)DL0: MOV A, R0 MOV DPTR, #TAB1 MOVC A, A +DPTR MOV SBUF,A DL1: JNB TI,DLI CLR TI INC RO ;(若显示设置值则此处改为DEC R0) DJNZ R2 ,DLO CLR RS0 POP DPL POP DPH POP ACC RET4.7 设置键处理程序设计4.7.1 设置键处理子程序流程图图47 设置键处理子程序流程图4.7.2 设置键处理子程序流程图CHENG:JB P1.7,CHE1 LCALL DELAY2 JB P1.7,CHE1 MOV RO,#22H CJNE R0,#09H,CHE4MOV R0,#0HAJMP CHE5 CHE1: JB P1.6,CH2 LCALL DELAY2 JB P1.6,CHE2 MOV R0,#21H CJNE R0,#09,CHE4MOV RO,#OH AJMP CHE5CHE2: JB P1.5,CHE5 LCALL DELAY2 JB P1.5,CHE5 MOV R0,#20H CJNE R0,#09H, CHE4 MOV R0,#0H AJMP CHE5CHE4 : INC RO AJMP CHE5 CHE5: MOV R0,#3DH MOV R0,#55H MOV R0,#3EH MOV R0,#0H RET 5 参考文献 石晓晶 智能仪器设计讲义,南京: 南京理工大学机械学院, 2009 石晓晶 智能仪器设计实验指导书,南京: 南京理工大学机械学院, 2009 张迎新 单片机初级教程,北京: 北京航空航天大学出版社, 2006 周杏鹏 仇国富 现代检测技术,北京: 高等教育出版社, 2003 朱蕴璞 孔德仁 传感器原理及应用,北京: 国防工业出版社, 2005 周 严 测控系统电子技术,北京: 科学出版社, 2007 赵新民 智能仪器设计基础,哈尔滨: 哈尔滨工业大学出版社, 2009 张国雄 测控电路,北京: 机械工业出版社, 2008 寇 戈 蒋立平 模拟电路与数字电路,北京: 电子工业出版社, 2006程序清单:Org 0000H ;主程序入口地址KS: LJMP START ORG 0003H ;外部中断0服务程序入口地址LJMP INT_0 ORG 000BH ;定时器0中断服务程序入口地址LJMP INT_T0 ORG 100H TAB1: ;字符段码表格DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H DB 83H, 0C6H, 0A1H, 86H, 0FFH START: MOV SP,#60H CLR EAMOV R0,#3EH ;运行/设置状态寄存器清零MOV R0,#0H DEC R0 MOV R0,#0H DEC R0 MOV R0,#0H MOV R0,#20H ;20H-22H放初始温度设置上限值50.0MOV R,#05H INC R0 MOV R0,#0H INC R0 MOV R0,#00H SETB P1.4 ;设置P1.4P1.7为输入端口SETB P1.5 SETB P1.6 SETB P1.7 MOV R2,#03H ;在LED上显示888DL0: MOV A,#80H ;把字符“8”的段码送给累加器AMOV SBUF,A ;累加器A循环三次把段码发送到串口,显示DL1: JNB TI,DL1 CLR TI DJNZ R2 ,DLO LCALL DELAY ;延时MOV R2,#03H ;关断所有LEDDL0: MOV A,#80H ;把关断的段码送给累加器AMOV SBUF,A ;累加器A循环三次把段码发送到串口,关断LEDDL1: JNB TI,DL1 CLR TI DJNZ R2 ,DLO ;以上完成了自检MOV THOD,#21H ;设置定时器工作方式MOV TL0,#77H ;设置定时器初值MOV THO,#OECH SETB TRO ;开定时器中断SETB ETO SETB IT ;开外部中断0SETB EX0 SETB EA ;开总中断STA0: LJMP STA0 ;等待中断;*STA2 : LCALL COMP LCALL CL0 LCALL ZH0 STA3: LCALL SET0 JNB F0,STA4 LCALL CHENG STA4 : RET;*CHENG:JB P1.7,CHE1 LCALL DELAY2 JB P1.7,CHE1 MOV RO,#22H CJNE R0,#09H,CHE4MOV R0,#0HAJMP CHE5 CHE1: JB P1.6,CH2 LCALL DELAY2 JB P1.6,CHE2 MOV R0,#21H CJNE R0,#09,CHE4MOV RO,#OH AJMP CHE5CHE2: JB P1.5,CHE5 LCALL DELAY2 JB P1.5,CHE5 MOV R0,#20H CJNE R0,#09H, CHE4 MOV R0,#0H AJMP CHE5CHE4 : INC RO AJMP CHE5 CHE5: MOV R0,#3DH MOV R0,#55H MOV R0,#3EH MOV R0,#0H RET ;*SET0 : JNB P1.4, SET1 LCALL DELAY0 JNB P1.4,SET1 SETB F0 RET SET1: CLR F0 MOV R0,#3DH MOV R0,#0H MOV R0,#3EH MOV R0,#55H RET;*INT_T0: CLR EA ;关中断 CLR TR0 MOV TL0, #77H ;重置定时器初值MOV TH0, #0E0H MOV R0, #3DH CJNE R0, 55H, INT_T01 LCALL DISP2 MOV R6, #20H LCALL DELAY LCALL STA3 LJMP INT_T04INT_T01: MOV R0, #3EH LCALL DISP1 MOV R6, #40H LCALL DELAY LJMP INT_T03INT_T02 : LCALL DISP0 MOV R6, #20H LCALL DELAY CJNE R2, #3CH, INT_T04 MOV R0, #3CH MOV R0, #55H INT_T03 : LCALL STA2 INT_T04 : SETB TR0 SETB ET0 SETB EA RETI;*CL0: MOV R0, #40H CLR A CLR C MOV R0, AINC R0 MOV R0, AMOV R0, #40H CLR P3.7 CLR P3.6 MOV DPTR, #FF7CH MOV A, #0H MOVX DPTR,A HD: JB P1.0, HD MOV DPTR, #0FF7DH MOVX A, DPTR MOV R7, A MOV DPTR, #0FF7FH MOVX A, DPTR ANL A, #0F0H MOV R6, A SWAP A MOV R6, A MOV A, R7 SWAP A MOV R7, A ANL A, #F0H ANL A, R6 ;低八位 MOV R6, A MOV A, R7 ANL A, #0FH ;高八位(最高四位为0) MOV R7, AMOV A, R6MOV R0,40HMOV A, R6MOV R0, AINC R0 MOV A, R7MOV R0, ACLR C LCALL BIJIAOCL3: JB F1 CL4 CLR P2.0 AJMP CL2 CL4: SETB P2.0 AJMP CL2CL2: RET BIJIAO:CLR C CLR F1 MOV A,5BH SUBB A,41H JC BIG1 CLR C MOV A,5AH SUBB A,40H JC BIG1 CLR F1 RETBIG1: SET F1 RET;*COMP : MOV R0,#20H MOV A ,R0 MOV B ,#64H MUL AB MOV RO,#5AH MOV R0,A INC R0 MOV R0,B MOV A,21H MOV B,#0AH MUL AB CLR C ADD A,5AH MOV 5AH,A MOV A, #0H ADDC A,5BH MOV 5BH,A CLR C MOV A,22H ADD A,5AH MOV 5AH,A MOV A, #0H ADDC A,5BH MOV 5BH,AZH0: CLR A MOV R7,40H MOV R6,41HMOV R3,A MOV R4,A MOV R5,A MOV R2,#10H HB3: MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A DJNZ R2,HB3 MOV A,R5ANL A,#0FHMOV 6AH,AMOV A,R5ANL A,#F0HSWAP AMOV 6BH,AMOV A,R4ANL A,#0FHMOV 6CH,ARET;*DISP1:SETB RS0 PUSH ACC PUSH DPH PUSH DPL MOV R2,#03H MOV R0,#6AH;(若显示设置值则上一条语句改为MOV R0,#22H)DL0: MOV A, R0 MOV DPTR, #TAB1 MOVC A, A +DPTR MOV SBUF,A DL1: JNB TI,DLI CLR TI INC RO ;(若显示设置值则此处改为DEC R0) DJNZ R2 ,DLO CLR RS0 POP DPL POP DPH POP ACC RET;*INT_0: CLR EX0 MOV DPTR ,#7FFFH LOOP:MOVX A, DPTR JB ACC.7, LOOP MOV R1,#60H MOV A, R1 ADD A, #30H MOVX DPTR, A INC R1 MOV A, R1 ADD A, #30H MOVX DPTR, A INC R1 MOV A, #27H MOVX DPTR, A MOV A, R1 ADD A, #30H MOVX DPTR, A SETB EX0 RETI;*DISP2:SETB RS0 PUSH ACC PUSH DPH PUSH DPL MOV R2,#03H MOV R0,#22H;DL0: MOV A, R0 MOV DPTR, #TAB1 MOVC A, A +DPTR MOV SBUF,A DL1: JNB TI,DLI CLR TI DEC RO DJNZ R2 ,DLO CLR RS0 POP DPL POP DPH POP ACC RET;*DELAY0 : MOV R7,#80H DJNZ R7, $ RET DELAY2:MOV R6,#5 0H DELAY20:LCALL DELAY0 DJNZ R6,DELAY20 RET DELAY: PUSH 06H DELAY6 : PUSH 06H DELAY5 : PUSH 06H DELAY4: DJNZ R6,DELAY4 POP 06H DJNZ R6,DELAY5 P0P 06H DJNZ R6,DELAY6 POP 06H DJNZ R6 , DELAY RETEND
展开阅读全文