ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:436.14KB ,
资源ID:4918394      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4918394.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字温度计课程设计实验报告Word文档格式.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数字温度计课程设计实验报告Word文档格式.docx

1、(6)复位电路:对整个系统进行复位;(7)时钟振荡模块:为整个系统提供统一的时钟周期。(三)重要器件及其相关参数(1)单片机STC89C52P0.0P0.7:通用I/O引脚或数据低8位地址总线复用地址;P1.0P1.7:通用I/O引脚;P2.0P2.7:通用I/O引脚或高8位地址总线复用地址;P3.0P3.7:通用I/O引脚或第二功能引脚(RxD、TxD、INT0、INT1、T0、T1、WR、RD);XTAL1、XTAL2:外接晶振输入端;RST/Vpd:复位信号输入引脚/备用电源输入引脚;Vcc:接+5V电源;Vss:地端。(2)DS18B20(a)通过单线总线端口访问 DS1820 的协议

2、如下: 初始化 ROM 操作命令 存储器操作命令 执行/数据DS1820 需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和 DS1820 间的任何通讯都需要以初始化序列开始,初始化序列见图11。一个复位脉冲跟着一个存在脉冲表明DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令)(b)当总线上只有一个器件时,DS18B20读温度的流程为:复位 发0CCH SKIP ROM命令 发44H开始转换命令 延时 复位 发0CCHSKIP ROM命令 发0BEH读存储器命

3、令 连续读出两个字节数据(即温度) 结束。Convert T 44h这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后DS1820 保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS1820 又忙于做时间转换的话,DS1820 将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。Read Scratchpad BEh这个命令读取暂存器的内容。读取将从字节0 开始,一直进行下去,直到第9(字节8,CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。(c)

4、DS18b20 用12 位存贮温值度最高位为符号位,下图为18b20 的温度存储方式,负温度S=1 正温度S=0LSB:D7 D6 D5 D4 D3 D2 D1 D0232221202-12-22-32-4MSB:D7 D6 D5 D4 D3 D2 D1 D0S272625三硬件电路设计本次实验采用了老师提供的单片机系统,所以整体的硬件电路设计需要在已知的硬件条件下进行设计。(一)下图为已有的单片机系统部分电路图分析:(1)由上图可知,时钟振荡电路,复位电路均以在原系统中正确连接。(2)数字温度计所需的显示电路电路中,原系统将段码输出连在P2接口中,但由图可知,该图中的六个数码管中的小数点均无

5、法点亮,原因在于图中并未对其进行连接,也无引脚供外界连接。而六个数码管的位选端口连在P1接口上。本次课程设计中,我们选择使用P1.0P1.3上所连接的四个数码管。(3)通过软件测试验证,原系统中的数码管为共阴极,且原系统中位选信号是通过一个反向器之后才输入数码管。(4)原系统中P0端口未使用,所以可以用排线引出,连接我们所需要补充的电路,包括DS18B20总线输入电路、门限设置电路以及报警电路。(二) 温度采集电路、门限设置电路及报警电路(其余电路省略)图中:(1)门限中的三个按键,分别为模式切换按键、加按键、减按键;(2)报警电路中,超过高门限或者低于低门限时发光二极管被点亮,其余时刻均熄灭

6、;(3)DS18B20温度采集电路中,需要注意的是DQ上需要一个上拉电阻,一般为4.7K左右。四系统软件设计(一)读取数据的流程图DSl8820的主要数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。此外,还可外接5 V电源,给DSl8820供电。DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。下图读取数据流程图。(二)温度数据处理程序的流程图读出温度数据后,t

7、emp的低四位为温度的小数部分,可以精确到0.0625,temp的中间8位为温度的整数部分,temp的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行显示时要使用另外的查询表,与整数显示查询表有所不同。因为本次课程设计只要求测试的温度范围为070,所以符号位S必为0,软件设计中则默认所测数据为正,从而不设符号位判定。为0 为0(三)模式切换流程图使用模式值st来标记不同模式,st=1时,表示在正常温度模式,st=2,表示在高门限模式,st=3表示在低门限模式,每次按下一次模式切换键,st+1,待其加至4时,将该值返回至1。从

8、而形成了模式键不断按下,三种模式循环切换的情况。防抖在这里是十分关键的。因为此处的按键是按下然后又返回为按了一次。所以按下时,则进入程序,为了防止机械抖动等不确定情况,延时恰当的一段时间后再次检测是否确实按下。若确实按下,则对模式进行切换。切换后,延时等待按键返回高位,返回高位后,再次延时消除抖动,再次检验,确定按键返回高位后,退出程序。五软件仿真 电路图连接:严格按照硬件设计中已有的单片机系统的连接方式和自己补充的电路的连接方式进行仿真,要最贴近实际电路,才能更准确的得到仿真结果。系统电路图 高门限下数码管显示 低门限下数码管显示 正常模式下数码管显六实际连接与调试(一)仿真成功后,在实际操

9、作中,电路图的连接应该严格按照仿真电路进行。 问题:在最开始实验中,我将DS18B20的DQ连接在P1.4,且仿真成功。但是在实际连接中,我将DQ连接在了P0.4端口,但实际电路中无任何数据显示。再次仿真,将DQ接至P0.4,仿真不成功。后查阅P0、P1、P2以及P3口的内部结构后发现,除P0外另外三口均接有上拉电阻,而P0则无。所以P0在作为通用I/O接口使用时,必须外接上拉电阻,其余端口则不需要。所以,为方便起见,实际中,将DQ按照最初仿真设计,接至P1.4。(二)原系统所拥有资料太少,数码管类型未知。 因只查阅到原系统的部分电路图,且无详细说明,所以为证明在网上搜索到的电路图的正确性以及

10、确定数码管的类型。先编写一个简单的数字显示程序。最开始,我并没有意识到原系统中的片选信号接有反向器,在测试程序中,无论使用共阴还是共阳数字查询表,数码管均显示8888,后发现问题将所有片选数值取反,再次进行测试,确定数码管为共阴极。同时,在测试过程中,发现原系统的小数点是无法点亮的。(三)关于位选在最开始的测试数码管类型中,我只测试了一位数码管,使其显示数值1,但测试成功后,6位数码管均显示为1。在测试过程中,我并未注意这个问题。测试结束后,进行整体联调。但数码管始终无正确显示。当时,我首先着手于寻找软件程序中是否有错误。所以人为将temp设定为一个固定值,先确定数据处理程序和数据显示程序无误

11、。然而数码管无法正常显示我预先设定的值,后经过反复改动,发现,在位选过程中,必须在选中一位数码管的过程中同时将其余所有的数码管关闭,否则将产生混乱。若逐一设定S1=1;S2=0;S3=0;S4=0未免太过麻烦,所以设定一个数组,分别赋值0x08,0x04,0x02,0x01。片选时按照规则将上值赋给,则一举多得。(四)DQ数据采集 上述问题均解决后,再次进行调试,数码管显示25592。这个值非常特殊,且第5个数码管,在程序中所有地方均是将其熄灭的,为何此处会亮呢?显然采集的数据是有很大问题的,因为很明显2559中,9为小数部分,将2559换为二进制则为1111 1111 1111。这就说明电路

12、并没有采集到温度数据,原因一:DQ上接有上拉电阻,在输出正常温度数据外始终为高电平,所以此处很可能并没有采集到正常输出温度数据;原因二:室温不可能为25592。 但是当时,我并没有对器件是否损坏产生怀疑。原因在于,大部分时候数码管显示的是12791,且两边的1很亮且基本无闪烁,279则在不断闪烁,频率很快,造成了27.9为数码管要显示的温度的错觉,且27.9是与当时实验室的温度非常接近的。同时,在我不断的对程序中DS18B20的初始化时等部分的时序进行调整时,279的闪烁频率发生变化,两个1并无变化。在经历了无法显示正常温度的挫败后,我仔细查阅了DS18B20的数据手册,确定了在其初始化过程中

13、,DQ电平应该如何变化且应当延时多少。同时也确定了DS8B20的在12位分辨率情况下数据A/D转换所需时间为500ms750ms,所以在发出转换命令后需要给其充分的时间来进行A/D转换。在经历了上述种种之后,我基本确定了程序中时序的正确性。再次进行实验室,数码管始终显示的为850,第5位数码管无故亮起的情况消失了(到现在我都不清楚它当时为什么会亮)。上网搜索资料,总结原因有二。一是程序时序存在问题;二是DS18B20损坏了。为排除第二个状况,我与同学更换了器件,数码管上显示出了令人欣喜的289!但是,仍然存在的问题和解决过程是(1)为保证充分的延时,导致数码管中数字不断闪烁,看起来非常不舒服。

14、后通过改进程序,使程序采集一次数据,却多次扫描显示温度数值。以此法使其不再闪烁。但是实际上,这种方法是不完美的,完美的状况应当是多次采集数据,扫描显示多次采集值的平均值。但限于时间紧迫和后者的复杂度,只能采用前者的方法了。 程序如下:case 1: work_temp(read_temp();/采集处理温度数值 for(i=0;i0;t-); _nop_();/*显示扫描函数*/void scan() char k; for(k=0;k=1;/*DS18B20读1字节函数*/从总线上取1个字节uchar read_byte(void) uchar value=0; for(i=8;ii-) v

15、alue duqu=1; delay(1); if(duqu=1) value|=0x80; delay(5); return value;/*读出温度函数*/uint read_temp() ow_reset(); /总线复位 write_byte(0xcc); /发命令 write_byte(0x44); /发转换命令 delay(200); write_byte(0xbe); temp_data0=read_byte(); /读温度值的第字节 temp_data1=read_byte(); /读温度值的高字节 temp=temp_data1; temp / 取中间八位,即整数部分的值 d

16、isplay3=display4/100; / 取百位数据暂存 display1=display4%100; / 取后两位数据暂存 display2=display1/10; / 取十位数据暂存 display1=display1%10; r=display1+display2*10+display3*100; if(!display3) /符号位显示判断 display3=0x0a; /百位为0时数码管熄灭display2) display2=0x0a; /十位为0时数码管熄灭 /*二极管报警函数*/void BEEP() if(r=high|rhigh) pp=low;low=high;h

17、igh=pp; while(!key02); /*门限值减1*/void key3() while(key03=0) if(key03=0) if(st=3) low=low-1; if(st=2) high=high-1; key03); /*上限温度显示*/void high1() uchar k; display0=high%10; display1=high/10; display2=10; /个位熄灭 display3=12; /百位显示H for(k=0;2;k+) discan=scan_conk; disdata=dis_7displayk; if (k=1)dian=0; delay(300); disdata=0x00; delay(100);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2