温度测量系统设计.docx
- 文档编号:24201290
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:18
- 大小:921.71KB
温度测量系统设计.docx
《温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《温度测量系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
温度测量系统设计
第1章单片机系统硬件电路
实习目的
1、了解单片机最小系统;
2、了解keilc软件操作,程序下载及调试方法;
3、掌握单片机外部电路使用;
4、掌握键盘和数码管显示编程方法;
5、应用单片机开发板进行实验开发;
单片机型号及特性
1、AT89S51单片机功能及特点
5l系列单片机中典型芯片(AT89S51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256B的RAM,2个16b的定时/计数器TO和T1,4个8b的I/O端I:
P0,P1,P2,P3,一个全双功串行通信口等组成。
特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。
5l系列单片机提供以下功能:
4kB存储器;256BRAM;32条工/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟电路。
空闲方式:
CPU停止工作,而让RAM、定时/计数器、串行口和中断系统继续工作。
掉电方式:
保存RAM的内容,振荡器停振,禁止芯片所有的其他功能直到下一次硬件复位。
5l系列单片机为许多控制提供了高度灵活和低成本的解决办法。
充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。
2、STC89C52单片机功能及特点
STC89C52单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
增强型8051单片机,12时钟/机器周期和6时钟/机器周期可以任选选择,指令代码完全兼容传统8051;工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机);工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz;用户应用程序空间为8K字节;片上集成512字节PAM;通用I/O口(32个),复位后为:
P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻;ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片;具有EEPROM功能;具有看门狗功能;共3个16位定时器/计数器。
即定时器T0、T1、T2;外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒;通用异步串行口(UART),还可用定时器软件实现多个UART;工作温度范围:
-40~+85摄氏度(工业级)/0~75摄氏度(商业级);PDIP封装。
单片机开发板
1、复位电路
单片机的复位操作使单片机进入初始化状态。
复位后,PC内容为0000H,P0口~P3口内容为FFH,SP内容为07H,SBUF内容不定,IP、IE和PCON的有效位为0,其余的特殊功能寄存器的状态均为00H.
图1-1为复位电路
当单片机的复位引脚RST(全称REASTA)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电自动复位或按钮复位两种。
上电复位要求接通电源后,自动实现复位操作。
上电自动复位是通过外部复位电路给C充电加至RST引脚一个短的高电平信号,此信号随着Vcc对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C的充电时间。
因此为保证系统能可靠地复位,RST引脚上的高电平必须维持足够长的时间。
该电路参数为:
晶振为12MHz时,电容为10μF,电阻为8.2KΩ;晶振为6MHz时,电容为22μF,电阻为1KΩ。
本设计采用上电复位电路,电路参数为电容10μF,电阻8.2K。
2、晶振电路
图1-2为晶振电路
晶振选择是单片机应用设计的重要环节之一,因此很有必要了解晶振电路的特点,作用等。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以有外加电压在一定范围内调整频率,称为压控振荡器(VCO)。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
单片机晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。
如果不同子系统需要不同的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。
单片机工作时,是一条一条地从ROM中提取指令,然后一步一步地执行。
单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。
一个机器周期包括12个时钟周期。
如果一个单片机选择了12MHz晶振,它的时钟周期为1/12us,它的一个机器周期是12×(1/12us),也就是1us。
在单片机的所有指令中,有一些完成的比较快,只要一个机器周期就行了,有一些完成比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。
为了衡量指令执行时间的长短,又引入一个新的概念:
指令周期。
所谓指令周期就是指执行一条指令的时间。
例如,当需要计算DJNZ指令完成所需要的时间时,首先必须要知道晶振的频率,设所用晶振为12MHz,则一个机器周期就是1us。
而DJNZ指令是双周期指令,所以执行一次要2us。
如果该指令需要执行500次,正好1000us,也就是1ms。
3、键盘和中断
图1-3为键盘电路
键盘由行线列线交叉而成。
列线接有上拉电阻。
对第一行的行线置0,然后读取列线码,如果所有列线都是1说明买有被按下的键,继续扫描下一行。
直到能读到0为止,读到0时所扫描的行就是该键的行码,而0所在的位是列码。
一般的键盘扫描都做成中断形式,把列线所有线相与,只要有一个0就输出0,将这个信号送给中断,就可以实现在有键被按下时开启扫描了。
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
中断:
程序执行过程中,允许外部或内部事件通过硬件打断程序的执行,使其转向为处理外部或内部事件的中断服务程序中去;完成中断服务程序后,CPU继续原来被打断的程序,这样的过程称为中断响应过程。
AT89S51单片机的中断系统有5个中断请求源,两个中断优先级,可实现两级中断服务程序嵌套。
中断源:
能产生中断的外部或内部事件。
中断优先级:
当有几个中断源同时申请中断时,或者CPU正在处理某中断源服务程序时,又有另一个中断源申请中断,那么CPU必须确定要优先去处理谁的能力,称为中断优先级。
中断嵌套:
优先级高的事件可以中断CPU正在处理的低级的中断服务程序,待完成了高级中断服务程序后,再继续被打断的低级中断服务程序。
这是中断嵌套问题。
4、其它电路
图1-4
图1-4为数码管显示电路
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别有字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发光,以形成我们眼睛看到的字样了。
数码管显示器有共阴极和共阳极两种。
共阴极LED数码管的发光二极管的阴极连接在一起,通常此公共阴极接地。
当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。
同样,共阳极LED数码管的发光二极管的阳极连接在一起,通常此公共阳极接正电压。
当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
第2章单片机应用系统软件
STC下载软件
STC-ISP是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可
下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便现已被广泛应用。
连接硬件:
将串口下载线一头与计算机串口相连,另一头与学习版串口相连,此时注意不要给学习版上电。
运行STC下载软件,第一步:
选择单片机型号,与学习版单片机一致。
第二步:
打开要下载的HEX文件。
第三步:
选择串口和波特率,波特率请选用默认值。
第四步:
请选用默认值,特别是下次冷启动选择“与下载无关”。
第五步:
点击下载按钮。
最后给目标版上电,程序下载即可完成。
图2-1为STC下载主界面
Keil软件
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软
件时更能体现高级语言的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
KeilC51单片机软件开发系统的整体结构,C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创
建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容
易理解。
在开发大型软件时更能体现高级语言的优势。
外部电路驱动
1、串口
AT89S51单片机串行口有两个物理上对立的接收、发送缓冲器SBUF,可同时
发送、接收数据。
发送缓冲器只能写入不能输出,接收缓冲器只能读出不能写入,两个缓冲器共用一个特殊功能寄存器字节地址(99H)。
SCON用于控制和监视串行口的工作状态,其各位定义相应的各位功能介绍如下:
SM0、SM1:
用于定义串行口的操作模式,两个选择位对应4种模式,见表6.2。
其中fOSC是振荡器频率,UART为通用异步接收和发送器的英文缩写。
SM2:
多机通信时的接收允许标志位。
在模式2和3中,若SM2=1,且接收到的第9位数据(RB8)是0,则接收中断标志(RI)不会被激活。
在模式1中,若SM2=1且没有接收到有效的停止位,则RI不会被激活。
在模式0中,SM2必须是0
特殊功能寄存器PCON中,只有一位(最高位)SMOD与串行口的工作有关,该位是串行口波特率系数的控制位:
SMOD=1时,波特率加倍,否则不加倍。
PCON的地址为87H,不可位寻址,因此初始化时需要字节传送。
2、定时器
MCS-51单片机内部有两个可编程的定时器/计数器,以满足这方面的需要。
它们
具有两种工作模数(计数器模式、定时器模式)和四种工作方式(方式0、方式1、方式2、方式3),其控制字均在相应的特殊功能寄存器(SFR)中,通过对它的SFR的编程,可以方便的选择工作模数和工作方式。
定时器/计数器,本质上都是加法计数器,当对固定周期的脉冲信号计数时是定时器,对脉冲长度不确定的信号计数时是计数器。
每接收到一个计数脉冲,加法计数器的值就加一,当计满时发生溢出,并从0开始继续计数。
加法计数器的计满溢出信号就是定时/计数器的输出,该信号使TCON的某位(TF0或TF1位)置一,作为定时器/计数器的溢出中断标志。
C/T=0,为定时器模式,内部计数器对晶振脉冲12分频后的脉冲计数,该脉冲周期等于机器周期,所以可以理解为对机器周期进行计数。
从计数值可以求得计数的时间,所以称为定时器模式。
C/T=1,为计数器模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数,允许的最高计数频率为晶振频率的1/24。
3、中断
程序执行过程中,允许外部或内部事件通过硬件打断程序的执行,使其转向为处理
外部或内部事件的中断服务程序中去;完成中断服务程序后,CPU继续原来被打断的程序,这样的过程称为中断响应过程。
中断请求源:
外部中断请求源:
即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,
名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。
在内部的TCON中有四位是与外中断有关的。
IT0:
INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。
IE0:
INT0中断请求标志位。
当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。
IT1、IE1的用途和IT0、IE0相同。
内部中断请求源:
TF0:
定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。
当CPU响应中断后,再由硬件将TF0清0。
TF1:
与TF0类似。
TI、RI:
串行口发送、接收中断。
中断响应过程:
CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将相应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。
这些工作都是由硬件来完成的,不必我们去考虑。
第3章温度测量系统设计
DS18B20
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20产品的特点:
采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念;测量温度范围宽,测量精度高DS18B20的测量范围为-55。
C到+125。
C;在使用中不需要任何外围元件;持多点组网功能,多个DS18B20可以并排在唯一的单线上,实现多点测温;供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。
因此,当数据线上的时序满足一定要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高;测量参数可配置DS18B20的测量分辨率可通过设定9~12位;负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;掉点保护功能DS18B20内部含有EEPROM,在系统掉点以后,它仍可保存分辨率及报警温度的设定值。
图3-1为DS18B20管脚
设计原理
这次的设计利用了数字温度传感器DS18B20以及单片机STC89C52开发测温系统的过程,在设计中主要包括温度采集模块,温度转换模块和显示模块三大部分。
DS18B20与传统的温度计相比,其具有读数方便,测温范围广,测温准确,输出温度采用数字显示,主要用于对测温要求比较准确的场所,或科研实验室使用。
该设计使用AT89S51芯片,测温传感器使用DALLAS公司DS18B20,用数码管来实现温度显示。
通过实验测试得到结果:
电源接通时可以对当前的环境温度进行测量并显示。
在外界人为的温度刺激下可以对温度的变化进行调整并显示,从而达到数码测温的目的。
图3-2为主程序流程图
实现方法
程序开始首先对温度传感器DS18B20进行复位,检测是否正常工作;接着读取温度数据,主机发出CCH指令与在线的DS18B20联系,接着向DS18B20发出温度A/D转换44H指令,再发出温度寄存器的温度值BEH指令,并反复调用复位,写入及读取数据子程序,之后再经过数据转换,由数码管显示出来,不断循环。
第4章实习总结
实习体会
在这次的实习中,我通过老师的讲解,去图书馆查找书籍,在网上的论坛学习等多种途径,学到了很多的知识。
我本次的设计成品是以单片机18B20芯片作为核心部件,
实现温度测温的功能。
这次的设计我在软件、编写程序方面花费了很多的时间。
通过自己亲自动手,我现在已经熟练掌握了KeilC51集成开发环境的使用方法,并且掌握了单片机芯片烧写方法与步骤等。
这次的实习对于我是一个很好的机会,使我可以用专业知识、专业技能分析问题,解决问题。
这对于我将来的就业方面会有很大的帮助。
虽然短暂的实习已经结束了,但
是它却让我的生活过的很充实,让我对我的专业有了更深的理解和体会。
设计硬件体会
本次课程设计使我认识到了设计思路是实施操作的扎实基石。
一个良好的设计思路,是电路的生命。
宁愿在思路设计上多花上50%的时间。
因为前期看似慢,实际上恰恰给后期的制作带来很大的方便,效果往往是更节省了许多时间。
通过这次设计让我真正体会到了书本知识永远是基础,而基础正是你向高层次迈进的扎实阶梯,没有这个基础,就无法实现技术上的腾飞。
在实践当中,灵活运用书本上所讲的知识,万变不离其中,只有扎实掌握了核心的方法,才有可能做到活用巧用。
参考文献
[1]王建霞,史杰,吴丽辉.非接触智能测温系统的设计原理[J].河北工业科
技.2000,(3):
25-27.
[2]张俊谟.单片机的发展与应用[J].电子制作.2007,(8):
7-9.
[3]宁玉杰,程杰,王育欣.非接触测温误差的修正方法研究[J].小型微型计算机系统.2002,(3):
58-62.
[4]闫毅.单片机的应用于开发[J].科技风.2008,(17):
[5]吴岩.单片机在电子技术中的应用和开发技术研究[J].黑龙江科技信
息.2011,(9):
45-49.
[6]居水荣.单片机及其发展趋势[J].半导体情报.2001,
(2):
15-18.
附录1实物图
附录2系统主要程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDS=P2^0;//定义DS18B20接口
inttemp;
ucharflag1;
voiddelay();//延时子函数,5个空指令
codeunsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
//0-90123456789
0x88,0x83,0xc6,0xa1,0x86,0x8e,
//10-15abcdef
0x7F,0xBF,0x9C,0xFF
//16-19.-。
null
};
ucharcodewei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsignedcharl_tmpdate[8]={0,0,0,0,0,0,0,0};//定义数组变量,并赋值1,2,3,4,5,6,7,8,就是本程序显示的八个数
inttmp(void);
voidtmpchange(void);
voidtmpwritebyte(uchardat);
uchartmpread(void);
bittmpreadbit(void);
voiddsreset(void);
voiddelayb(uintcount);
获取温度的程序:
inttmp()//获得温度
{
floattt;
uchara,b;
dsreset();
delayb
(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);//发送读取数据命令
a=tmpread();//连续读两个字节数据
b=tmpread();
temp=b;
temp<<=8;
temp=temp|a;//两字节合成一个整型变量。
tt=temp*0.0625;//得到真实十进制温度值,因为DS18B20
//可以精确到0.0625度,所以读回数据的最低位代表的是
//0.0625度。
temp=tt*10+0.5;//放大十倍,这样做的目的将小数点后第一位
//也转换为可显示数字,同时进行一个四舍五入操作。
returntemp;//返回温度值
显示程序:
voiddisplay()
{
P1=wei[0];
P0=table[l_tmpdate[0]];
delay3
(2);
P1=wei[1];
P0=table[l_tmpdate[1]];
delay3
(2);
P1=wei[2];
P0=table[l_tmpdate[2]];
delay3
(2);
P1=wei[3];
P0=table[16];
delay3
(2);
P1=wei[4];
P0=table[l_tmpdate[4]];
delay3
(1);
}
主程序:
voidmain()//主函数
{
intl_tmp;
//chushi();
while
(1)
{
tmpchange();//温度转换
l_tmp=tmp();
if(l_tmp<0)
l_tmpdate[0]=17;//判断温度为负温度,前面加"-"
else
{
l_tmpdate[0]=temp/1000;//显示百位,这里用1000,是因为我们之前乖以10位了
if(l_tmpdate[0]==0)
l_tmpdate[0]=0;//判断温度为正温度且没有上百,前面不显示
}
l_tmp=temp%1000;
l_tmpdate[1]=l_tmp/100;//获取十位
l_tmp=l_tmp%100;
l_tmpdate[2]=l_tmp/10;//获取个位
l_tmpdate[3]=11;
l_tmpdate[4]=l_tmp%10;//获取小数第一位
display();
//display(l_tmpdate,5);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 测量 系统 设计