北交单片机课程设计报告温度计.docx
《北交单片机课程设计报告温度计.docx》由会员分享,可在线阅读,更多相关《北交单片机课程设计报告温度计.docx(16页珍藏版)》请在冰豆网上搜索。
北交单片机课程设计报告温度计
电气工程学院
单片机课程设计
设计题目:
温度计
学 号:
姓名:
同组人:
指导教师:
王健强
设计时间:
2013/3/10
设计地点:
电气学院实验中心
一、课程设计题目:
温度计
内容:
选用温度传感器AD590实现温度采集、摄氏温度显示,温度精度达到0.1度,测量范围零下10度到零上100度。
二、课程设计要求
1.根据具体设计课题的技术指标和给定条件,独立进行方案论证和电路设计,要求概念清楚、方案合理、方法正确、步骤完整;
2.查阅有关参考资料和手册,并能正确选择有关元器件和参数,对设计方案进行仿真;
3.完成预习报告,报告中要有设计方案,设计电路图,还要有仿真结果;
4.进实验室进行电路调试,边调试边修正方案;
5.撰写课程设计报告——最终的电路图、调试过程中遇到的问题和解决问题的方法。
三、进度安排
1.时间安排
序号
内容
学时安排(天)
1
方案论证和系统设计
1
2
完成电路仿真,写预习报告
1
3
电路调试
2
4
写设计总结报告与答辩
1
合计
5
设计调试地点:
电气楼410
2.执行要求
微机原理与接口技术课程成绩优秀的可以自拟题目,其余的同学都是指定题目。
,每组不得超过2人,要求学生在教师的指导下,独力完成所设计的详细电路(包括计算和器件选型)。
严禁抄袭,严禁两篇设计报告雷同。
第一章系统方案设计
整体设计思路
1.本实验要求温度计的范围-10℃~100℃,并且显示两位小数,所以我们需要四个LED,前两个显示温度的整数部分,后两个显示小数部分,根据给出的元件,我们用AD590做温度传感器,可以把绝对温度转换成电压电流信号。
2.把得到的电压电流信号输入0832以后得到数字信号,即为要采样接收的数据,根据要求,所测温度为-10℃~100℃,则温度每变化一摄氏度输出电压变化10mv,又根据0度时输出电压为2.73V得出电压的变化范围是2.63V-3.73V。
这是采集到的数据为:
2.73*255/5=139
3.那么实际的温度计算公式为:
(采集到的数据-139)*5*100/255。
温度为正时:
高八位放在B中,除以10得到的商为十位数,余数为各位;低八位放在A中,除以10,商为第一位小数,余数为第二位小数。
温度为负值:
高八位的数小于10放在个位数字,十位数显示符号,得到的低八位放在A中,,除以10,商为第一位小数,余数为第二位小数。
由此就得到了所要显示的温度。
4.第一个LED的字形地址偏移量放在40H,将40H送入P0.5;
第二个LED的字形地址偏移量放在41H,将40H送入P0.4;
第三个LED的字形地址偏移量放在42H,将40H送入P0.3;
第四个LED的字形地址偏移量放在43H,将40H送入P0.2。
由此得到的整体框架图为:
初始化
温度显示
主要元件的相关资料
一.所用芯片以及器件:
80S51、AD590、ADC0832、74HC245、电阻若干、二极管若干、三极管若干、七段数码管
二.所用器件的相关介绍
1.AD590参数介绍
(1)流过器件的电流(μA)等于器件所处环境的热力学温度(开尔文)度数:
Ir/T=1
(1)
式中,Ir—流过器件(AD590)的电流,单位为μA;T—热力学温度,单位为K;
(2)AD590的测温范围为-55℃~+150℃;
(3)AD590的电源电压范围为4~30V,可以承受44V正向电压和20V反向电压,因而器件即使反接也不会被损坏;
(4)输出电阻为710mΩ;
(5)精度高,AD590在-55℃~+-150℃范围内,非线性误差仅为±0.3℃。
对于为什么使用10K欧电阻
而AD590输出端输出电流,经过10K的电阻,转换为电压值。
OP07为一射极跟随器,A=1,用于提高输入阻抗。
两个二极管用于隔离干扰。
电流-电压转换公式如下:
AD590的灵敏度:
经过10K电阻后:
故10K的电阻用来使精度达到0.1
2.ADC0832引脚介绍
CS———片选端,低电平有效。
CH0,CH1———两路模拟信号输入端。
DI———两路模拟输入选择输入端。
DO———模数转换结果串行输出端。
CLK———串行时钟输入端。
VCC/REF———正电源端和基准电压输入端。
GND———电源地
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。
当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能
当CS由高变低时,选中ADC0832。
在时钟的上升沿,DI端的数据移入ADC0832内部的多路地址移位寄存器。
在第一个时钟期间,DI为高,表示启动位,紧接着输入两位配置位。
当输入启动位和配置位后,选通输入模拟通道,转换开始。
转换开始后,经过一个时钟周期延迟,以使选定的通道稳定。
ADC0832接着在第4个时钟下降沿输出转换数据。
数据输出时先输出最高位(D7~D0);输出完转换结果后,又以最低位开始重新输出一遍数据(D7~D0),两次发送的最低位共用。
当片选CS为高时,内部所有寄存器清0,输出变为高阻态。
如果要再进行一次模/数转换,片选CS必须再次从高向低跳变,后面再输入启动位和配置位。
3.89S51引脚图以及介绍
89S51管脚图
89S51管脚的作用及其工作原理
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
第二章仿真
实验原理图:
仿真结果
负温度
正温度
PCB
实验程序
ADDIBITP3.0;伪指令
ADDOBITP3.1
ADCLKBITP3.2
ADCSBITP3.3
LED1EQU40H;第一个LED的字形地址偏移量放在40H
LED2EQU41H;第一个LED的字形地址偏移量放在41H
LED3EQU42H;第一个LED的字形地址偏移量放在42H
LED4EQU43H;第一个LED的字形地址偏移量放在43H
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H
MOVR4,#5
TEST:
LCALLADC0832;调用AD转换程序
LCALLBCDCON;调用数值转换程序
LP:
LCALLDISPLAY;调用显示程序
DJNZR4,LP
SJMPTEST
ADC0832:
SETBADDI;初始化通道选择
CLRADCLK
NOP
NOP
CLRADCS;拉低/CS端
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿
SETBADDI
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿2
CLRADDI;1-0选择1通道
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿3
SETBADDI
NOP
NOP
MOVR7,#8;准备送下后8个时钟脉冲
AD1:
MOVC,ADDO;接收数据
MOVACC.0,C
RLA;左移一次
SETBADCLK
NOP
NOP
CLRADCLK;形成一次时钟脉冲
NOP
NOP
DJNZR7,AD1;循环7次
MOVC,ADDO;接收数据
MOVACC.0,C
SETBADCS;拉高/CS端
CLRADCLK;拉低CLK端
SETBADDO;拉高数据端,回到初始状态
MOV30H,A;数据放在30H
ADDA,#7
MOV30H,A
RET
BCDCON:
CLRC
SUBBA,#139;与0摄氏度作判断
JNCABOVEZERO;有借位往下执行,没有借位跳转ABOVEZERO
BELOWZERO:
MOVA,#139
SUBBA,30H
MOVB,#05H
MULAB
MOVB,#64H
MULAB
MOVR1,A
MOVA,B
MOVB,#0AH
DIVAB
MOVLED1,0AH;最高位显示负号
MOVLED2,B;显示个位
MOVA,R1
MOVB,#64H
MULAB
MOVA,B
MOVB,#0AH
DIVAB
MOVLED3,A;显示第一位小数
MOVLED4,B;显示第二位小数
RET
ABOVEZERO:
MOVB,#05H
MULAB
MOVB,#64H
MULAB
MOVR1,A
MOVA,B
MOVB,#0AH
DIVAB
MOVLED1,A;显示十位
MOVLED2,B;显示个位
MOVA,R1
MOVB,#64H
MULAB
MOVA,B
MOVB,#0AH
DIVAB
MOVLED3,A;显示第一位小数
MOVLED4,B;显示第二位小数
RET
DISPLAY:
;显示子程序
SETBP0.2
SETBP0.3
SETBP0.4
SETBP0.5
MOVDPTR,#TAB
MOVA,40H
MOVCA,@A+DPTR;查字形表
MOVP2,A;P2口作字形,P0口做字位
CLRP0.5;开
ACALLDELAY
SETBP0.5;关
MOVDPTR,#TAB
MOVA,41H
MOVCA,@A+DPTR;查字形表
MOVP2,A
SETBP2.7
CLRP0.4
ACALLDELAY
SETBP0.4
MOVDPTR,#TAB
MOVA,42H
MOVCA,@A+DPTR;查字形表
MOVP2,A
CLRP0.3
ACALLDELAY
SETBP0.3
MOVDPTR,#TAB
MOVA,43H
MOVCA,@A+DPTR
MOVP2,A
CLRP0.2
ACALLDELAY
SETBP0.2
RET
DELAY:
MOVR7,#01H
DELAY1:
MOVR6,#0FFH
DELAY2:
DJNZR6,DELAY2
DJNZR7,DELAY1
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
RET
第三章调试
1.在本程序中,每次AD采样都得采样10次并求平均值,以达到减小误差更接近实际值的目的。
采样结束后将数字量与139(零度)相比较,然后转入相应的显示程序。
而显示程序共执行了255次,以达到延长显示时间防止示数显示出现跳跃等问题。
2.开始的时候不知道怎么设置温度显示数码管的小数点,后来,经过查阅资料,知道了在子程序现实中,第二个数码管显示的程序中加入SETBP2.7,便可以实现。
3.在实验过程中有些焊点没有焊实,导致数码管显示出现状况,后来将短接的焊点分开后,数码管显示正常.
第四章结论
经过仿真以及调试后,调节电位器可以调节数码管示数。
用打火机烧AD590,显示示数会大幅度升高。
室温下最终在数码管上实际显示可调数据为17.52-21.36
数码管上数据显示比较稳定
参考文献
[1]李维波,MATLAB在电气工程中的应用,中国电力出版社,2007