单片机课设结题报告.docx
《单片机课设结题报告.docx》由会员分享,可在线阅读,更多相关《单片机课设结题报告.docx(16页珍藏版)》请在冰豆网上搜索。
单片机课设结题报告
BeijingJiaotongUniversity
单片机课设结题报告——
温度计的设计
组员姓名:
WT
TYP
班级:
电气0906
指导老师:
季晓衡
完成日期:
2011年11月24日
一、实验元件介绍
1、感温元件AD590
(1)AD590的主要特性:
AD590是美国模拟器件公司生产的单片集成两端感温电流传感器,是一种已经IC化的温度感测器,它会将温度转换为电流。
其规格如下:
a、度每增加1℃,它会增加1μA输出电流
b、可测量范围-55℃至150℃
c、供电电压范围+4V至+30V
(2)AD590管脚图及元件符号
(3)AD590工作原理
AD590相当于一个温度控制的恒流源,输出电流大小只与温度有关,且与温度成正比。
只需一个精密电阻,就可以将电流(温度)信号转化为电压信号,总的灵敏度系数通过该电阻设定。
AD590的温度系数是1μA/K,即温度每增加1K,它会增加1μA输出电流。
其输出电流是以绝对温度零度-273℃为基准,每增加1℃,它会增加1μA输出电流,因此0℃到100℃时AD590输出电流为273μA到373μA。
(4)电流-电压转换电路
电压-电流转换电路
图中,AD590输出端输出电流,经过10K的电阻,转换为电压值。
OP07为一射极跟随器,A=1,用于提高输入阻抗。
两个二极管用于隔离干扰。
电流-电压转换公式如下:
AD590的灵敏度:
经过10K电阻后:
具体温度-电压值对应如下表
摄氏温度/℃
AD590电流/μA
经10KΩ电压/V
0
273.2
2.732
10
283.2
2.832
20
293.2
2.932
30
303.2
3.032
40
313.2
3.132
50
323.2
3.232
60
333.2
3.332
100
373.2
3.732
2、ADC0832
通过特定的电流-电压转换电路之后,可得到与温度相对应的电压。
但是若想显示,需要得到数字信号才行。
所以需要用ADC0832。
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,芯片的模拟电压输入在0-5V之间。
其引脚图及说明如下:
引脚功能说明:
◆CS_片选使能,低电平芯片使能。
◆CH0模拟输入通道0,或作为IN+/-使用。
◆CH1模拟输入通道1,或作为IN+/-使用。
◆GND芯片参考0电位(地)。
◆DI数据信号输入,选择通道控制。
◆DO数据信号输出,转换数据输出。
◆CLK芯片时钟输入。
◆Vcc/REF电源输入及参考电压输入(复用)
输入格式
配置位
选择通道号
CH0
CH1
CH0
CH1
差分
L
L
+
-
L
H
-
+
单端
H
L
+
H
H
+
ADC0832时序:
当CS由高变低时,选中ADC0832。
在时钟的上升沿,Din端的数据移入ADC0832内部的多路地址移位寄存器。
在第一个时钟期间,Din为高,表示启动位,紧接着输入两位配置位。
当输入启动位和配置位后,选通输入模拟通道,转换开始。
转换开始后,经过一个时钟周期延迟,以使选定的通道稳定。
ADC0832接着在第4个时钟下降沿输出转换数据。
数据输出时先输出最高位(D7-D0);输出完转换结果后,又以最低位开始重新输出一遍数据(D7-D0),两次发送的最低位共用。
当片选CS为高时,内部所有寄存器清0,输出变为高阻态。
实验中我们由CH0输入模拟量,Dout输出数字量。
我们把ADC0832的CS、CLK、Dout、Din端分别连接在P3.3、P3.2,P3.1,P3.0端,所以ADC0832的片选、时钟信号、启动位和配置位均通过置位端口实现。
由于是CH0输入模拟信号,所以配置位为10(B)。
ADC0832为单端输出模式。
由于AD是串行输入输出,故前3个脉冲上升沿完成设置,第4—11个脉冲下降沿后取1位AD转换的结果,在第11—18个脉冲下降沿后第二次取AD转换结果,将两次结果进行比对,如果一致,则完成转换,关ADC0832;如果不一致,则重新开始转换。
经AD转换后,数字量D与温度值的转换如下所示:
3、51单片机
实验中将用51单片机作为将数字信号输出为数码显像管显示数字的转换芯片,用汇编程序控制单片机不同输出端口的高低电平,即可控制数码显像管显示的数字。
4、数码显像管
实验中所用的是较为普遍的4个8位显像管,显示的数字分别有不同的输出位所对应。
其字形表为1-10:
3FH,06H,5BH,4FH,66H,
6DH,7DH,07H,7FH,6FH。
二、设计思路:
该数字温度计的设计要求为:
(1)四位数码管显示,两位整数,两位小数;
(2)温度显示范围:
0℃(或20℃室温)~100℃。
电路由温度传感器(AD590),电压-电流转换电路,AD转换器,51单片机和显示模块组成。
AD590属于电流输出型传感器,其输出的电流经电压-电流转换电路变为模拟电压信号,通过AD转换器变为数字量。
此数字量输入单片机,单片机直接控制显示。
显示模块由四个LED数码显示管和若干阻排组成。
电路板连接如下图:
实验原理图如下图:
三、程序设计框图及汇编语句:
系统程序包括主程序、AD子程序、BCD子程序和显示子程序。
实验中由于需要显示小数,所以需要借助100/51得到的小数位。
具体计算过程如下:
程序中将R7作为存储ADC0832输出8位的位。
实验测得在0℃~100℃的过程中,AD590经过10kΩ电阻,经过ADC0832转换之后的范围为8BH-BEH,其中共有51个数,反映的是0℃~100℃的变化。
由于100/51=1.96=2-0.04,所以2可以作为整数显示的基础位,0.04可作为小数显示的基础位。
这样就可以实现实验要求的功能。
在ADC0832输出8BH-A4H的时候,小数位都不会超过1,所以就在整数位将其输出的数值乘以2之后减1,然后送到数码显像管显示;小数位就用其输出的数值乘以4,再用100减去这个数,作为小数位的数,送给数码显像管显示。
这就是我们设计的温度计的基本原理。
当然,由于ADC0832的原因,在CLK口输入的时钟信号需要从单片机中发出,所以还需要用SETB,CLR,DELAY等语句产生时钟信号。
程序框图如下:
开始
输入使能信号,使之开始工作
输入通道控制字
产生时钟脉冲,输出两字节数据
调用显示子程序
调用AD子程序
调用BCD子程序
初始化
开始
否
关显示
显示缓存区内容送A,查字形表
字型码送P0口,字位码送P1口
延时2ms
变量调整,3位显示完成?
是
结束(返回)
显示子程序
主程序:
ORG0000H
SJMP0040H
ORG0040H
MAIN:
MOVIE,#00H
CLRREN
MOVP3,#0FFH
MOVP2,#0FFH
MOVP0,#0FFH
CLRP3.2
CHUSHI:
MOVR0,#00H
CLRP3.3
ACALLDELAY
SETBP3.2
ACALLDELAY
CLRP3.2
ACALLDELAY
SETBP3.2
ACALLDELAY
CLRP3.2
CLRP3.0
ACALLDELAY
SETBP3.2
ACALLDELAY
CLRP3.2
ACALLDELAY
SETBP3.2
ACALLDELAY
CLRP3.2
DUSHU:
ACALLDELAY
MOVB,P3
SETBP3.2
JBB.1,ZHIWEI
CLRACC.7
FANHUI:
RLA
INCR0
CLRP3.2
CJNER0,#08H,DUSHU
ACALLLUEGUO
MOVP3,#0FFH
CLRP3.2
AJMPXIANSHI
ZHIWEI:
SETBACC.7
AJMPFANHUI
XIANSHI:
CLRC
MOVR7,A
SUBBA,#8BH
JNCPANDUAN1
MOVR1,#00H
MOVR2,#00H
PANDUAN1:
MOVA,R7
CLRC
SUBBA,#0BEH
JCPANDUAN2
MOVR1,#99
MOVR2,#99
PANDUAN2:
MOVA,R7
CLRC
SUBBA,#0A4H
JNCJIEWEI
MOVA,R7
CLRC
SUBBA,#8BH
MOVB,#02H
MULAB
SUBBA,#01H
MOVR1,A
MOVA,R7
SUBBA,#8BH
MOVB,#04H
MULAB
MOVR0,A
MOVA,#64H
SUBBA,R0
CLRC
MOVR2,A
HUIGUI:
MOVA,R1
MOVB,#10
DIVAB
MOVR3,A
MOVR4,B
MOVA,R2
MOVB,#10
DIVAB
MOVR5,A
MOVR6,B
MOVR0,#00H
XIANSHIW:
MOVDPTR,#MAP
MOVA,R3
MOVCA,@A+DPTR
MOVP2,A
CLRP0.5
ACALLDELAY
ACALLDELAY
SETBP0.5
MOVDPTR,#MAP
MOVA,R4
MOVCA,@A+DPTR
ORLA,#80H
MOVP2,A
CLRP0.4
ACALLDELAY
ACALLDELAY
SETBP0.4
MOVDPTR,#MAP
MOVA,R5
MOVCA,@A+DPTR
MOVP2,A
CLRP0.3
ACALLDELAY
ACALLDELAY
SETBP0.3
MOVDPTR,#MAP
MOVA,R6
MOVCA,@A+DPTR
MOVP2,A
CLRP0.2
ACALLDELAY
ACALLDELAY
SETBP0.2
INCR0
CJNER0,#0FFH,XIANSHIW
AJMPCHUSHI
JIEWEI:
MOVA,R7
CLRC
SUBBA,#8BH
MOVB,#02H
MULAB
SUBBA,#02H
MOVR1,A
SUBBA,#8BH
MOVB,#04H
MULAB
MOVR0,A
MOVA,#0C8H
SUBBA,R0
CLRC
MOVR2,A
AJMPHUIGUI
LUEGUO:
MOVR0,#00H
XUNHUAN:
SETBP3.2
ACALLDELAY
INCR0
CLRP3.2
ACALLDELAY
CJNER0,#07H,XUNHUAN
RET
MAP:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DELAY:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
END
四、实验心得:
通过这次课程设计,我对ADC0832的结构有了全面的认识,也对运用汇编语言编程的能力和整体掌握有了大幅度的提升。
而此次课设对我最大的提高在于对未知知识的搜集、掌握和运用过程。
由于之前帮助老师焊过板子,所以我们就先于其他人知道了各种转换电路的元器件,如温度传感器是输出电流的,A/D转换是用ADC0832的,他们之间需要用10kΩ电阻作相应转换。
最关键的就在于对ADC0832的掌握。
因为单片机课上主要讲授了ADC0809,所以我们上网查到相关芯片的资料,得知AD0832的数字量输出与AD0809的并行输出不同,是串行输出的,所以应该将其输出量在P3.1口输入到单片机。
而且它的选口、输输出都要在外部输入的时钟下降沿的时候读写,时钟信号还需要外部给定,所以它的CLK口要与P3.2口相连。
ADC0832在数据传输前要在Din中输入起停位和配置位,以设定ADC0832的工作模式,这三位数据也可通过移位输入。
由于ADC0832的输入在CH0口,输出为单端输出,所以配置位为10(B)。
有了总体思路后我们开始着手分块编写程序,编译无误后就到实验室进行了实验仿真。
我们的实验还只停留在仿真头试验阶段,没有真正的将程序烧入单片机,所以还是有点遗憾的。
不管之前怎样全面思考,实验过程中还是会出现意想不到的问题。
实验过程中AD590输出的电流变化范围没有设计的那么大,即使将1kΩ电位器调到最大也不能将显示的室温调至准确。
所以我们对程序进行了进一步修改,将输入的数值做了一定比例的放大,并做了一些误差调整,最终实现了室温时显示21-23度,用电烙铁烫AD590之后最大显示数值度能超过100(即在99.99之后又从0.00开始显示),最终做出的温度计量程为0℃到100℃左右。
在实验调试过程中,我们的程序出现了一个小bug,就是在温度到60度以上的时候第三个显像管就自动灭掉,到80度以上之后又会恢复显示。
一开始我们都想不明白,但之后终于想清楚了:
是以A作为字位选择的时候超过了9,字形表就查不到,自然就显示不出来了。
之后我们将字形表增加成三个0-9循环的形式,成功解决了这一问题,我们也感到很欣慰。
总的来说,这样的课设总是比较有趣,富有挑战性而又不枯燥,非常吸引人,对我个人来说试一次绝佳的锻炼机会,既能进一步巩固专业知识,增强专业基础,又能提高动手能力,使自己对实验调试的方法更加熟练。
如果以后还能有机会接触此类实验的话,我一定会倍加珍惜的。