1、 Harbin Institute of Technology课程设计阐明书(论文)课程名称: 课程设计 设计题目:数字温度计设计 院 系:电信学院通信工程系 班 级: 0805103 设 计 者: 潘思迈 学 号: 指引教师: 尹振东 设计时间:4月15日至6月6日哈尔滨工业大学4月15日星期五哈尔滨工业大学课程设计任务书 姓 名:潘思迈 院 (系):电信学院通信工程系 专 业:通信工程 班 号:0805103 任务起至日期: 4 月15 日至 年 6月5日 课程设计题目: 数字温度计设计 已知技术参数和设计规定:依照给定重要功能规定和重要元器件,设计一种完整数字温度计。(1) 自制稳压电源
2、(2) 被测温度范畴在0至200C(3) 用4位数码管显示温度值 工作量:1. 查找资料2. 设计论证方案3. 详细各个电路选取、元器件选取和数值计算4. 详细阐明各某些电路图工作原理5. 绘制电路原理图6. 绘制印刷电路图7. 元器件列表8. 编写调试操作9. 打印论文 工作筹划安排:1. 查找资料、设计论证方案详细各个电路选取、元器件选取和数值计算绘制电路原理图一周2. 绘制印刷电路图、元器件列表一周3. 编写调试操作、打印论文 一周 同组设计者及分工:每人一组单独完毕 指引教师签字_ 4月13日 教研室主任意见: 教研室主任签字_ 4月13日 数字温度计设计摘 要 :本论文简介了一种以单
3、片机为重要控制器件,以铂热电阻Pt100为温度传感器新型数字温度计。重要涉及硬件电路设计和系统程序设计。硬件电路重要涉及主控制器,测温电路和显示电路等,主控制器采用单片机80C52。系统程序重要涉及主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。此外,还简介了系统调试和性能分析。由于采用了铂热电阻Pt100作为检测元件,与老式温度计相比,本数字温度计减少了外部硬件电路,具备低成本和易使用特点。还可以在高温报警、远距离多点测温控制等方面进行应用开发,具备较好发展前景。核心词:单片机,主控制器,温度传感器,铂热电阻Pt100,单片机80C52,数字温度计设计任务与
4、规定:已知技术参数和设计规定:依照给定重要功能规定和重要元器件,设计一种完整数字温度计(1) 自制稳压电源(2) 被测温度范畴在0至200C(3) 用4位数码管显示温度值一温度传感器设计1.稳压源设计恒流源电路作用是提供一种不随负载变化电流,这样才干使该电流I通过PT100后让阻值变化转化为电压变化,从而输出变化电压信号。因而恒流源输出电流稳定限度将直接决定温度测量精度,本设计中使用如图2所示恒流源,输出电流为12mA。2. 铂热电阻Pt100铂电阻是用很细铂丝(0.030.07mm)绕在云母支架上制成,是国际公认高精度测温原则传感器。由于铂电阻在氧化性介质中,甚至高温下其物理、化学性质都非常
5、稳定,因而它具备精度高、稳定性好、性能可靠特点。因而铂电阻在中温(-200650)范畴内得到广泛应用。当前市场上已有用金属铂制作成原则测温热电阻,如Pt100、Pt500、Pt1000等。它电阻温度关系线性度非常好,如图1所示是其电阻温度关系曲线,在-200650温度范畴内线性度已经非常接近直线。铂电阻阻值与温度关系可以近似用下式表达:在0650范畴内:Rt =R0 (1+At+Bt2)在-1900范畴内:Rt =R0 (1+At+Bt2+C(t-100)t3)式中A、B、C 为常数,A=3.9684710-3;B=-5.84710-7;C=-4.2210-12;二.模数转换TLC0832是广
6、泛应用8位A/D转换器。TLC0832是双通道输入,并且可以软件配备成单端或差分输入。串行输出可以以便和原则移位寄存器及微解决器接口。参照电压为5V,不需要进行调零,使用非常以便,可以和任何型号微解决器进行连接使用,最小功耗为15mW,转换时间为32us,最小误差为1LSB。ADC0832为8位辨别率A/D转换芯片,其最高辨别可达256级,可以适应普通模仿量转换规定。其内部电源输入与参照电压复用,使得芯片模仿电压输入在05V之间。芯片转换时间仅为32uS,具备双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立芯片使能输入,使多器件挂接和解决器控制变得更加以便。 芯片接口阐明
7、: CS_ 片选使能,低电平芯片使能。 CH0 模仿输入通道0,或作为IN+/-使用。 CH1 模仿输入通道1,或作为IN+/-使用。 GND 芯片参照0 电位(地)。 DI 数据信号输入,选取通道控制。 DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参照电压输入(复用)。三 单片机与显示某些 本模块使用80C52单片机,位移位存储总线寄存器CD4094和四位数码管构成单片机重要实现三方面功能:管脚功能: VCC:供电电压。 GND:接地。 P0口:P0口为一种8位漏级开路双向I/O口,每脚可吸取8TTL门电流。P1口:P1口是一种内部提供上拉电阻8位双
8、向I/O口,P1口缓冲器能接受输出4TTL门电流 P2口:P2口为一种内部上拉电阻8位双向I/O口,P2口缓冲器可接受,输出4个TTL门电流。 P3口:P3口管脚是8个带内部上拉电阻双向I/O口,可接受输出4个TTL门电流。 XTAL1:反向振荡放大器输入及内部时钟工作电路输入。 XTAL2:来自反向振荡器输出。 PSEN:外部程序存储器选通信号。四原理图五PCB图六.调试与问题分析程序编写完毕后对其编译调试。设计采用Keil C作为编译环境。PT100校正:这个可以运用温度计和万用表就可以完毕,运用温度计实际测得温度值和运用万用表测得此时PT100实际阻值,然后以此作为基准点进行背面设计。显
9、示电路调试:使用函数信号发生器产生特定信号,然后再将其输入到AD模仿信号输入端,观测数码管显示状况。七 元件清单元器件规格数量元器件规格数量电阻集成电路2K1CD409442K1AT89C5212002LM78051PT1001LTC08321电容数码管u17SEGCOMA40.1u 1200u1CRYSTAL10.1u 1整流桥50p22W02G 1三极管BD1402TRAN-2P2S 1八.源程序#include#define uchar unsigned char#define uint unsigned int #define ulong unsigned long#define _r
10、rca_() CY = ACC & 0x01 ;产生RRC A指令#define _rlca_() CY = ACC & 0x80 ;产生RLC A指令sbit bADcs=P14;sbit bADcl=P15;sbit bADda=P16;sbit flag=P17;sbit str=P27;sbit d=P26;sbit clk=P25;bit choose=0;unsigned char data1;unsigned char count;unsigned char cycle;uint ge,xiao1,xiao2;unsigned long data2;const uchar tab
11、le117=0x81,0xed,0x43,0x49,0x2d,0x19,0x11,0xcd,0x01,0x09,0x71,0x31,0x93,0x61,0x13,0x17,0xff;const uchartable217=0x80,0xec,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08,0x70,0x30,0x92,0x60,0x12,0x16,0xff;uchar buffer4=0x00,0x00,0x00,0x00;void Delayus(uchar i) ;延时 while(-i); void display(void)uchar bit_count
12、=0;uchar table_counter=0;uchar byte_counter=0;uchar temp_i=0;buffer0=xiao2;buffer1=xiao1;buffer2=ge;buffer3=0x00;/led_str_off;/先清零str=0;/led_clk_off;clk=0;for(byte_counter=0;byte_counter0)if(temp_i&0x80)=0)/led_d_off;d=0;else/led_d_on;d=1;temp_i=(temp_i 0;cycle- ) bADda = 1;/bADcl = 0;/pulse bADcl =
13、 1; CY = bADda; _rlca_();/RRC A bADcl = 0;/pulse data1= ACC; for(cycle = 8;cycle 0;cycle- ) bADda = 1; bADcl = 1; CY = bADda; _rrca_();/RLC A bADcl = 0;/pulse /bADcl = 0;/pulse */void ad(void) uchar i; /data1=0; bADcs = 0;当TLC0832未工作时其CS输入端应为高电平,此时芯片禁用. bADcl=0; bADda=1; bADcl=1; bADcl=0;/i down bADda=1; bADcl=1; bADcl=0;2 down bADda=0; bADcl=1; bADcl=0;3 down bADda=1; bADcl=1; bADcl=0;4 down for(i=8;i0;i-) data10;i-) bADcl=0;bADcl=1; */ bADcs=1void cal()data2=(ulong)data1*493)/256;ge=data2/100;xiao1=(data2%100)/10;xiao2=data2%10;main()flag=1; while(1) ad(); cal(); display();