温度测量显示电路课程设计

温度测量显示电路设计

目 录

1.引言„„„„„„„„„„„„„„„„„„„„„„„„„„„8 2.系统方案确定„„„„„„„„„„„„„„„„„„„„„„„9 2.1系统设计方案论证与确定„„„„„„„„„„„„„„„„„9 2.2硬件设计总体方案„„„„„„„„„„„„„„„„„„„„10 3.系统软件算法分析„„„„„„„„„„„„„„„„„„„„„12 3.1主程序流程图„„„„„„„„„„„„„„„„„„„„„„12

3.2读出温度子程序„„„„„„„„„„„„„„„„„„„„„12

3.3温度转换命令子程序„„„„„„„„„„„„„„„„„„„13

3.4 计算子程序温度„„„„„„„„„„„„„„„„„„„„„14

3.5显示数据刷新子程序„„„„„„„„„„„„„„„„„„„15

3.6扫描按键处理子程序„„„„„„„„„„„„„„„„„„„16

4.软件仿真„„„„„„„„„„„„„„„„„„„„„„„„„17

5.课程设计心得与体会„„„„„„„„„„„„„„„„„„„„21

参考文献

6.附录„„„„„„„„„„„„„„„„„„„„„„„„„„„22

6.1 源程序代码„„„„„„„„„„„„„„„„„„„„„„„22

6.2 系统硬件原理图„„„„„„„„„„„„„„„„„„„„„28

1.引言

近几年来随着单片机在检测和控制系统中得到广泛应用,传统控制技术也已经满足不了现代工业生产所需,各行各业对于控制和测量的需求也越来越高。而温度则是系统常需要测量、控制和保持一个量,如何分析和选取就显得尤为重要了。

经过对各种温度测量方案的收集整理之后(包括传统的分立式传感器),本系统最终选取采用铂电阻PT100作为温度传感器,恒流测温的方法,通过单片机进行控制,用放大器、A/D转换器进行温度信号的采集

本系统以四个部分为主体:放大电路,A/D转换电路,单片机电路,数码管显示电路。设计文氏电桥电路,得到温度与电压的关系,通过控制电阻值改变温度。利用单片机将现在温度与预设温度进行比较,将比较结果在LED数码管上显示,同时实现现在温度与预设温度之间的切换。

2. 方案论证与确定

2.1系统设计方案论证

方案一

通过温度传感器采集温度信号,经信号放大器放大后,送到A/D转换芯片,将模拟量转化为数字量,传送给单片机控制系统,最后经过LED显示温度。 热电阻也是最常用的一种温度传感器。它的主要特点是测量精度高,性能稳定,使用方便。该方案采用热电阻PT100做为温度传感器、AD620作为信号放大器,TLC2543作为A/D转换部件,对于温度信号的采集具有大范围、高精度的特点并且可以通过编写程序对输入信号进行分段线性化处理,使得测量精度大大提高。

这个方案在电路设计上比较麻烦,涉及到A/D转换,温度采集等复杂模块,而且电阻与温度的对应值的计算也无形的增大了设计的工作量,故不作为优先考虑

工作方框图如下

方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所

以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。

2.2硬件设计总体方案

2.2.1单片机最小模块

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51单片机引脚结构图如图2-3所示。

AT89C51的主要特性如下:

·与MCS-51 兼容

·4K字节可编程闪烁存储器寿命:1000写/擦循环,数据保留时间:10年

·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路

2.3.2 温度传感器模块

DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智

能温度传感器,其结构图如图3所示,与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。

DS18B20的特点:

(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

(2)在使用中不需要任何外围元件。

(3)可用数据线供电,电压范围:+3.0~ +5.5 V。

(4)测温范围:-55 ~+125 ℃。固有测温分辨率为0.5 ℃。 (5)通过编程可实现9~12位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。

(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。

(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

2.3.4温度显示模块

共阴极数码管中8个发光二极管的阴极连接在一起,即为共阴极接法,简称共阴数码管。通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 本次设计使用了四个型号为ARK SR42056的数码管,其管脚分别接至单片机管脚的10-13、32-39和排阻RP1,确保数码管能够精确显示温度,并能够使温度精确到十分位。其具体管脚连接如图2-4所示。

图2-4 数码管连接图

3 .系统软件算法分析

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。

3.1主程序流程图

图3.1 主程序流程图

3.2读出温度子程序

读出温度子程序的主要功能是读出RAM 中的9 字节,在读出时需进行CRC 校验,校验

有错时不进行温度数据的改写。其程序流程图如图3-2所示。

3.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12 位分辨率时转换时间约为

750ms,在本程序设计中采用1s 显示程序延时法等待转换的完成。温度转换命令

子程序流程

图3.2读温度数据流程图 图3-3温度转换流程图

3.4计算温度子程序

计算温度子程序将RAM 中读取值进行BCD 码的转换运算,并进行温度值正负的判定,

其程序流程图如图3-4所示。

3.5显示数据刷新子程序

显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1

时将符号显示位移入第一位。程序流程图如图3-5所示。

3.6按键扫描处理子程序

按键采用扫描查询方式,设置标志位,当标志位为1 时,显示设置温度,否则显示温度。如图3-6所示。

4. Proteus软件仿真

4.1 Proteus简介

Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,

同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。

④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

4.2 Proteus仿真过程

1、 Proteus软件仿真原理图如下图所示:

2、启动该系统,运行如下图所示:

3、利用K1、K2功能键,可以设定校正温度加减、开和关等。其界面分别为:

4、 温度校正调零示例:如把当前温度设定为28度,利用18b20

将温度设定为30度, Proteus仿真如下图(可观察到Q1处指示灯的颜色发生变化):

5.课程设计心得与体会

本次电子课程综合设计,让我受益匪浅。虽然时间比以往的长了不少,但是开始选题时还是很茫然。从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜。但是在这过程中我查阅和浏览了很多的相关资料,和同学们一起商量,相互合作,并且对Proteus软件的使用有了很大程度的提高。同时

不仅可以巩固和强化以前所学过的知识,还学到了很多书本上所不曾学到的知识。

这次我选择了温度测量系统设计,在应用系统设计时,必须先确定该系统的具体要求,这是系统设计的依据和出发点,整个设计过程都必须围绕这个训练要求来做。软件部分的设计,我按照模块化的思想,将各个模块单独调试,然后再一点一点地叠加,这样就容易避免更多错误的出现。在这次单片机系统的课程设计中,我们学到了很多,尤其是在调试程序的过程中,我遇到了很多问题,摸索着改正了一些,还有一些错误在指导老师的帮助下得以解决。这次课程设计,查阅了大量的文献资料和搜索了大量网络资料,也更清楚的认识到自己所学的不足,同时也加深了对以前所学知识的理解,也增强了编程与仿真的操作能力。

通过这次课程设计使我懂得了理论与实际相结合的重要性,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正所要的。在设计的过程中所遇到的问题,可以说是很多。难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说刚开始在连仿真图时,不能区分该数码管是共阴极还是共阳极的,等到连好图仿真时出现错误才知道自己用错了数码管,对单片机的C语言掌握得也还不太好„„通过这次课程设计之后,一定把以前所学过的知识重新温故。

总之,这次课程设计让我明白一个道理那就是:只有理论必须和实际结合,才能更好地让我们掌握书本上的知识。同时在设计过程中遇到了很多程序编写出错和系统不能正常仿真的问题,最后在杨庆老师的细心指导和同学们耐心帮助下终于得到解决。同时也让我懂得所学的东西最终是要面向应用的,是为了在以后的工作中能够更好的应用,此时的知识积累是为以后的工作做好准备。这个设计总体上不算完美,但是在这次设计训练的经历的益处是不能言表的,在此谢谢各位老师和同学的解囊帮助!

参考文献

1、 康华光.电子技术基础[M].模拟部分.高等教育出版社,1998

2、 张国雄等编.测控电路.机械工业出版社,2001.8.

3、 李华.MCS一51系列单片机实用接口技术[M].电子工业出版社,1999

4、 闫玉德,葛龙,俞虹. 单片机微型计算机原理与设计. 中国电力出版社,2010.112-154,197-199,

5、 郑惟晖,《单片机智能温度控制系统的设计》[D],2008

附录

附1:源程序代码

************************************LCD1602

**********************************************/

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs=P2^7; //液晶使能端口

sbit rw=P2^6;

sbit e=P2^5;

sbit P3_6=P3^6;

sbit P1_0=P1^0;

sbit P1_1=P1^1;

模块

//sbit P1_0 = P1^0;

//sbit P1_1 = P1^1;

void delay_ms(uchar ms){ //延时

uint i,j;

for(i=0;i

for(j=0;j

}

void lcd_wcmd(uchar cmd){ //液晶写指令

rs=0;rw=0;

e=0;

P0=cmd;

e=1;

e=0;

delay_ms(5);

}

void lcd_wdat(uchar dat){ //液晶写数据

rs=1;rw=0;

e=0;

P0=dat;

e=1;

e=0;

delay_ms(5);

}

void lcd_dis(uchar post,uchar *p){

lcd_wcmd(0x80 | post); //设置数据地址指针 显示

while(*p!='\0'){

lcd_wdat(*p++);

}

}

uchar code def_char0[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //字符℃ void lcd_wcgram(uchar adress,uchar tmp[]){

uchar i;

for(i=0;i

{

lcd_wcmd(adress+i);

lcd_wdat(tmp[i]);

}

}

void lcd_inti(){

delay_ms(15);

lcd_wcmd(0x38); //16X2字符,5X7点阵,8位数据接口

lcd_wcmd(0x38);

lcd_wcmd(0x08); //关闭显示

lcd_wcmd(0x01); //清屏

lcd_wcmd(0x06); //设置光标工作方式

lcd_wcmd(0x0c); //开显示,设置光标显示方式

lcd_wcgram(0x48,def_char0); //载入用户自定义字符

}

sbit DQ=P3^7; //18B20数据管脚

/*************************ds18b20延迟子函数(晶振12MHz *********************************/

void delay_18B20(unsigned int i){

while(i--);

}

void reset() {

uchar x=0;

DQ = 1; //DQ复位

delay_18B20(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay_18B20(80); //精确延时 大于 480us

DQ = 1; //拉高总线

delay_18B20(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);

}

unsigned char rbyte(){

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--){

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(4);

}

return(dat);

}

void wbyte(uchar dat){

uchar i=0;

for (i=8; i>0; i--){

DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1;

}

}

uchar rTempetuare(uchar tmp[]){

uchar a=0,b=0,temp,decimal;

uint uival;

reset();

wbyte(0xCC); //跳过读序号列号的操作

wbyte(0x44); //启动温度转?

reset();

wbyte(0xCC); //跳过读序号列号的操作

wbyte(0xBE); //读取温度寄存器等(共可读9个寄存器) a=rbyte(); //读取温度值低位

b=rbyte(); //读取温度值高位

temp=b;

temp&=0xf0;

if(temp){ //负温

if(a==0){

a=~a+1; //bit7向bit8位产生进位

b=~b+1;

}

else{

a=~a+1;

b=~b;

}

tmp[0]='-';

}

else

tmp[0]=' ';

temp=(b>4); //组合

前两个就是温度

decimal=a&0x0f; //将小数点后的数据提取出来 uival=decimal*625;

tmp[0]='T';

tmp[1]='=';

tmp[2]=0x20; //空格

tmp[3]=temp/100 | 0x30; //取百位

tmp[4]=temp%100/10 | 0x30; //取十位

tmp[5]=temp%100%10 | 0x30; //取个位

tmp[6]=0x2e; //小数点

tmp[7]=uival/1000 | 0x30; //十分位

tmp[8]=uival%1000/100 | 0x30; //百分位

tmp[9]=uival%1000%100/10 | 0x30; //千分位

tmp[10]=uival%1000%100%10 | 0x30; //万分位

tmp[11]=0x20; //空格

tmp[12]=0x01; //字符℃

tmp[13]='\0';

return temp; //十进制温度

}

/*******************************红外解码模******************************************/

#define c(x) (x*110592/120000)

sbit Ir_Pin=P3^2; //红外数据管脚

unsigned char Ir_Buf[4]; //用于保存解码结果

//============================================================== unsigned int Ir_Get_Low() //计数器1,用于解码延时 {

TL1=0;

TH1=0;

TR1=1;

while(!Ir_Pin && (TH1&0x80)==0);

TR1=0;

return TH1*256+TL1;

}

//============================================================= unsigned int Ir_Get_High() //计数器1,用于解码延时 {

TL1=0;

TH1=0;

TR1=1;

while(Ir_Pin && (TH1&0x80)==0);

TR1=0;

return TH1*256+TL1;

}

char jianche()

{ //解码程序 char i,j;

uint temp;

restart:

while(Ir_Pin);

temp=Ir_Get_Low();

if(tempc(9500)) goto restart;//引导脉冲低电平9000 temp=Ir_Get_High();

if(tempc(5000)) goto restart;//引导脉冲高电平4500 for(i=0;i

temp=Ir_Get_Low();

if(tempc(800)) goto restart; temp=Ir_Get_High();

if(tempc(2000)) goto restart; Ir_Buf[i]>>=1;

if(temp>c(1120)) Ir_Buf[i]|=0x80;

}

return Ir_Buf[2]&0x0f; //所得码 }

附2:系统原理图

温度测量显示电路设计

目 录

1.引言„„„„„„„„„„„„„„„„„„„„„„„„„„„8 2.系统方案确定„„„„„„„„„„„„„„„„„„„„„„„9 2.1系统设计方案论证与确定„„„„„„„„„„„„„„„„„9 2.2硬件设计总体方案„„„„„„„„„„„„„„„„„„„„10 3.系统软件算法分析„„„„„„„„„„„„„„„„„„„„„12 3.1主程序流程图„„„„„„„„„„„„„„„„„„„„„„12

3.2读出温度子程序„„„„„„„„„„„„„„„„„„„„„12

3.3温度转换命令子程序„„„„„„„„„„„„„„„„„„„13

3.4 计算子程序温度„„„„„„„„„„„„„„„„„„„„„14

3.5显示数据刷新子程序„„„„„„„„„„„„„„„„„„„15

3.6扫描按键处理子程序„„„„„„„„„„„„„„„„„„„16

4.软件仿真„„„„„„„„„„„„„„„„„„„„„„„„„17

5.课程设计心得与体会„„„„„„„„„„„„„„„„„„„„21

参考文献

6.附录„„„„„„„„„„„„„„„„„„„„„„„„„„„22

6.1 源程序代码„„„„„„„„„„„„„„„„„„„„„„„22

6.2 系统硬件原理图„„„„„„„„„„„„„„„„„„„„„28

1.引言

近几年来随着单片机在检测和控制系统中得到广泛应用,传统控制技术也已经满足不了现代工业生产所需,各行各业对于控制和测量的需求也越来越高。而温度则是系统常需要测量、控制和保持一个量,如何分析和选取就显得尤为重要了。

经过对各种温度测量方案的收集整理之后(包括传统的分立式传感器),本系统最终选取采用铂电阻PT100作为温度传感器,恒流测温的方法,通过单片机进行控制,用放大器、A/D转换器进行温度信号的采集

本系统以四个部分为主体:放大电路,A/D转换电路,单片机电路,数码管显示电路。设计文氏电桥电路,得到温度与电压的关系,通过控制电阻值改变温度。利用单片机将现在温度与预设温度进行比较,将比较结果在LED数码管上显示,同时实现现在温度与预设温度之间的切换。

2. 方案论证与确定

2.1系统设计方案论证

方案一

通过温度传感器采集温度信号,经信号放大器放大后,送到A/D转换芯片,将模拟量转化为数字量,传送给单片机控制系统,最后经过LED显示温度。 热电阻也是最常用的一种温度传感器。它的主要特点是测量精度高,性能稳定,使用方便。该方案采用热电阻PT100做为温度传感器、AD620作为信号放大器,TLC2543作为A/D转换部件,对于温度信号的采集具有大范围、高精度的特点并且可以通过编写程序对输入信号进行分段线性化处理,使得测量精度大大提高。

这个方案在电路设计上比较麻烦,涉及到A/D转换,温度采集等复杂模块,而且电阻与温度的对应值的计算也无形的增大了设计的工作量,故不作为优先考虑

工作方框图如下

方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所

以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。

2.2硬件设计总体方案

2.2.1单片机最小模块

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51单片机引脚结构图如图2-3所示。

AT89C51的主要特性如下:

·与MCS-51 兼容

·4K字节可编程闪烁存储器寿命:1000写/擦循环,数据保留时间:10年

·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路

2.3.2 温度传感器模块

DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智

能温度传感器,其结构图如图3所示,与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。

DS18B20的特点:

(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

(2)在使用中不需要任何外围元件。

(3)可用数据线供电,电压范围:+3.0~ +5.5 V。

(4)测温范围:-55 ~+125 ℃。固有测温分辨率为0.5 ℃。 (5)通过编程可实现9~12位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。

(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。

(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

2.3.4温度显示模块

共阴极数码管中8个发光二极管的阴极连接在一起,即为共阴极接法,简称共阴数码管。通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 本次设计使用了四个型号为ARK SR42056的数码管,其管脚分别接至单片机管脚的10-13、32-39和排阻RP1,确保数码管能够精确显示温度,并能够使温度精确到十分位。其具体管脚连接如图2-4所示。

图2-4 数码管连接图

3 .系统软件算法分析

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。

3.1主程序流程图

图3.1 主程序流程图

3.2读出温度子程序

读出温度子程序的主要功能是读出RAM 中的9 字节,在读出时需进行CRC 校验,校验

有错时不进行温度数据的改写。其程序流程图如图3-2所示。

3.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12 位分辨率时转换时间约为

750ms,在本程序设计中采用1s 显示程序延时法等待转换的完成。温度转换命令

子程序流程

图3.2读温度数据流程图 图3-3温度转换流程图

3.4计算温度子程序

计算温度子程序将RAM 中读取值进行BCD 码的转换运算,并进行温度值正负的判定,

其程序流程图如图3-4所示。

3.5显示数据刷新子程序

显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1

时将符号显示位移入第一位。程序流程图如图3-5所示。

3.6按键扫描处理子程序

按键采用扫描查询方式,设置标志位,当标志位为1 时,显示设置温度,否则显示温度。如图3-6所示。

4. Proteus软件仿真

4.1 Proteus简介

Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,

同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。

④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

4.2 Proteus仿真过程

1、 Proteus软件仿真原理图如下图所示:

2、启动该系统,运行如下图所示:

3、利用K1、K2功能键,可以设定校正温度加减、开和关等。其界面分别为:

4、 温度校正调零示例:如把当前温度设定为28度,利用18b20

将温度设定为30度, Proteus仿真如下图(可观察到Q1处指示灯的颜色发生变化):

5.课程设计心得与体会

本次电子课程综合设计,让我受益匪浅。虽然时间比以往的长了不少,但是开始选题时还是很茫然。从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜。但是在这过程中我查阅和浏览了很多的相关资料,和同学们一起商量,相互合作,并且对Proteus软件的使用有了很大程度的提高。同时

不仅可以巩固和强化以前所学过的知识,还学到了很多书本上所不曾学到的知识。

这次我选择了温度测量系统设计,在应用系统设计时,必须先确定该系统的具体要求,这是系统设计的依据和出发点,整个设计过程都必须围绕这个训练要求来做。软件部分的设计,我按照模块化的思想,将各个模块单独调试,然后再一点一点地叠加,这样就容易避免更多错误的出现。在这次单片机系统的课程设计中,我们学到了很多,尤其是在调试程序的过程中,我遇到了很多问题,摸索着改正了一些,还有一些错误在指导老师的帮助下得以解决。这次课程设计,查阅了大量的文献资料和搜索了大量网络资料,也更清楚的认识到自己所学的不足,同时也加深了对以前所学知识的理解,也增强了编程与仿真的操作能力。

通过这次课程设计使我懂得了理论与实际相结合的重要性,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正所要的。在设计的过程中所遇到的问题,可以说是很多。难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说刚开始在连仿真图时,不能区分该数码管是共阴极还是共阳极的,等到连好图仿真时出现错误才知道自己用错了数码管,对单片机的C语言掌握得也还不太好„„通过这次课程设计之后,一定把以前所学过的知识重新温故。

总之,这次课程设计让我明白一个道理那就是:只有理论必须和实际结合,才能更好地让我们掌握书本上的知识。同时在设计过程中遇到了很多程序编写出错和系统不能正常仿真的问题,最后在杨庆老师的细心指导和同学们耐心帮助下终于得到解决。同时也让我懂得所学的东西最终是要面向应用的,是为了在以后的工作中能够更好的应用,此时的知识积累是为以后的工作做好准备。这个设计总体上不算完美,但是在这次设计训练的经历的益处是不能言表的,在此谢谢各位老师和同学的解囊帮助!

参考文献

1、 康华光.电子技术基础[M].模拟部分.高等教育出版社,1998

2、 张国雄等编.测控电路.机械工业出版社,2001.8.

3、 李华.MCS一51系列单片机实用接口技术[M].电子工业出版社,1999

4、 闫玉德,葛龙,俞虹. 单片机微型计算机原理与设计. 中国电力出版社,2010.112-154,197-199,

5、 郑惟晖,《单片机智能温度控制系统的设计》[D],2008

附录

附1:源程序代码

************************************LCD1602

**********************************************/

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs=P2^7; //液晶使能端口

sbit rw=P2^6;

sbit e=P2^5;

sbit P3_6=P3^6;

sbit P1_0=P1^0;

sbit P1_1=P1^1;

模块

//sbit P1_0 = P1^0;

//sbit P1_1 = P1^1;

void delay_ms(uchar ms){ //延时

uint i,j;

for(i=0;i

for(j=0;j

}

void lcd_wcmd(uchar cmd){ //液晶写指令

rs=0;rw=0;

e=0;

P0=cmd;

e=1;

e=0;

delay_ms(5);

}

void lcd_wdat(uchar dat){ //液晶写数据

rs=1;rw=0;

e=0;

P0=dat;

e=1;

e=0;

delay_ms(5);

}

void lcd_dis(uchar post,uchar *p){

lcd_wcmd(0x80 | post); //设置数据地址指针 显示

while(*p!='\0'){

lcd_wdat(*p++);

}

}

uchar code def_char0[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //字符℃ void lcd_wcgram(uchar adress,uchar tmp[]){

uchar i;

for(i=0;i

{

lcd_wcmd(adress+i);

lcd_wdat(tmp[i]);

}

}

void lcd_inti(){

delay_ms(15);

lcd_wcmd(0x38); //16X2字符,5X7点阵,8位数据接口

lcd_wcmd(0x38);

lcd_wcmd(0x08); //关闭显示

lcd_wcmd(0x01); //清屏

lcd_wcmd(0x06); //设置光标工作方式

lcd_wcmd(0x0c); //开显示,设置光标显示方式

lcd_wcgram(0x48,def_char0); //载入用户自定义字符

}

sbit DQ=P3^7; //18B20数据管脚

/*************************ds18b20延迟子函数(晶振12MHz *********************************/

void delay_18B20(unsigned int i){

while(i--);

}

void reset() {

uchar x=0;

DQ = 1; //DQ复位

delay_18B20(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay_18B20(80); //精确延时 大于 480us

DQ = 1; //拉高总线

delay_18B20(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);

}

unsigned char rbyte(){

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--){

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(4);

}

return(dat);

}

void wbyte(uchar dat){

uchar i=0;

for (i=8; i>0; i--){

DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1;

}

}

uchar rTempetuare(uchar tmp[]){

uchar a=0,b=0,temp,decimal;

uint uival;

reset();

wbyte(0xCC); //跳过读序号列号的操作

wbyte(0x44); //启动温度转?

reset();

wbyte(0xCC); //跳过读序号列号的操作

wbyte(0xBE); //读取温度寄存器等(共可读9个寄存器) a=rbyte(); //读取温度值低位

b=rbyte(); //读取温度值高位

temp=b;

temp&=0xf0;

if(temp){ //负温

if(a==0){

a=~a+1; //bit7向bit8位产生进位

b=~b+1;

}

else{

a=~a+1;

b=~b;

}

tmp[0]='-';

}

else

tmp[0]=' ';

temp=(b>4); //组合

前两个就是温度

decimal=a&0x0f; //将小数点后的数据提取出来 uival=decimal*625;

tmp[0]='T';

tmp[1]='=';

tmp[2]=0x20; //空格

tmp[3]=temp/100 | 0x30; //取百位

tmp[4]=temp%100/10 | 0x30; //取十位

tmp[5]=temp%100%10 | 0x30; //取个位

tmp[6]=0x2e; //小数点

tmp[7]=uival/1000 | 0x30; //十分位

tmp[8]=uival%1000/100 | 0x30; //百分位

tmp[9]=uival%1000%100/10 | 0x30; //千分位

tmp[10]=uival%1000%100%10 | 0x30; //万分位

tmp[11]=0x20; //空格

tmp[12]=0x01; //字符℃

tmp[13]='\0';

return temp; //十进制温度

}

/*******************************红外解码模******************************************/

#define c(x) (x*110592/120000)

sbit Ir_Pin=P3^2; //红外数据管脚

unsigned char Ir_Buf[4]; //用于保存解码结果

//============================================================== unsigned int Ir_Get_Low() //计数器1,用于解码延时 {

TL1=0;

TH1=0;

TR1=1;

while(!Ir_Pin && (TH1&0x80)==0);

TR1=0;

return TH1*256+TL1;

}

//============================================================= unsigned int Ir_Get_High() //计数器1,用于解码延时 {

TL1=0;

TH1=0;

TR1=1;

while(Ir_Pin && (TH1&0x80)==0);

TR1=0;

return TH1*256+TL1;

}

char jianche()

{ //解码程序 char i,j;

uint temp;

restart:

while(Ir_Pin);

temp=Ir_Get_Low();

if(tempc(9500)) goto restart;//引导脉冲低电平9000 temp=Ir_Get_High();

if(tempc(5000)) goto restart;//引导脉冲高电平4500 for(i=0;i

temp=Ir_Get_Low();

if(tempc(800)) goto restart; temp=Ir_Get_High();

if(tempc(2000)) goto restart; Ir_Buf[i]>>=1;

if(temp>c(1120)) Ir_Buf[i]|=0x80;

}

return Ir_Buf[2]&0x0f; //所得码 }

附2:系统原理图


相关文章

  • 电子课程设计论文_数字温度计
  • 电子技术课程设计报告 学院 专业班级 学生姓名 指导教师 完成时间 成绩 数字温度计 目录 数字温度测量显示²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²1 绪论²²²²²²²²²²² ...查看


  • 红外线温度传感器的设计毕业论文
  • 红外线温度传感器的设计毕业论文 摘要 红外线技术发展到现在,已经为大家所熟知,这种技术在现代科技.国防和农业等领域获得广泛的应用.本文介绍以模拟的红外线温度传感器来验证其温度测量精度达 10-5℃数量级.微小的温度变化转换成电压变化,经过放 ...查看


  • 单片机课程设计之热敏电阻测温
  • JIUJIANG UNIVERSITY 单片机课程设计报告 题 目 院 系 电子工程学院 专 业 自动化 姓 名 xxxx xxxx 班级学号 xxxx 指导教师 xxxx 日 期 2012-2-23 目 录 第一部分:设计背景------ ...查看


  • 温度采集系统课程设计
  • 1 引言 1.1 单片机概述 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 随机存储器RAM .只读存储器ROM .多种I/O口和中断系统.定时器/计时器等功能(可能还包括显示驱动电路.脉宽调制 ...查看


  • [单片机测控系统设计]课程设计报告
  • 超声波测距系统设计 专业班级: 学生学号: 学生姓名: 指导老师: 二〇XX 年X 月 目录 第一章 研究方案 . ........................................................ 1 1.1 ...查看


  • 数字式温度计
  • 数字式温度计 用传统的水银或酒精温度计来测量温度, 不仅测量时间长.读数不方便.而且功能单一, 已经不能满足人们在数字化时代的要求,本文提出了一种新型的 数字式温度测量电路的设计方案. 一. 设计目的 (1) 了解大规模专用集成电路的组成: ...查看


  • 传感器超声波测距系统设计
  • 吉林建筑工程学院 电气与电子信息工程学院 <传感器及检测技术>课程设计报告 设计题目: 超声波测距系统设计 专业班级: 电子信息科学与技术 学生姓名: 学 号: 指导教师: 设计时间: 2012.6.4-2012.6.15 目 ...查看


  • 铂电阻数字温度计课程设计
  • 铂电阻数字温度计课程设计报告 专业班级:学生学号:学生姓名:指导教师:设计时间: 测控技术与仪器063班 106034070 张利辉 潘文诚 2009年5月 一.设计任务与要求 1.铂电阻线性电路的设计: 2.消除引线影响: 3.ICL71 ...查看


  • 温度报警器传感器课程设计报告
  • 摘 要 随着时代的进步和发展,单片机技术已经普及到我们生活.工作.科研.各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于 89S51 单片机的测温系统,详细描述了利用数字温度 传 感 器 DS18B20 开发测温系统的过程,重 ...查看


热门内容