基于单片机的数字温度计课程设计报告

《基于单片机的数字温度计课程设计》

设计报告

设计时间:班 级: 姓 名:报告页数:

广东工业大学课程设计报告

设计题目_基于单片机的数字温度计设计_ 学院_信息工程_专业__应用电子技术_11(3)_班

学号_3111002657_姓名__李耿亮__(合作者_张斌洪_第8组)

成绩评定_______

教师签名_______

目录

一 .课程设计目的„„„„„„„„„„„„„„„„„„„„„„„„„„„ 4 二 .设计任务„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 4 三 .设计要求 „„„„„„„„„„„„„„„„„„„„„„„„„„„„ 4 四 . 设计方案及比较(设计可行性分析)„„„„„„„„„„„„„ 4 五 .系统设计总体思路„„„„„„„„„„„„„„„„„„„„„„ 6 六 .系统原理框图及工作原理分析„„„„„„„„„„„„„„„„„ 6 1.温度计设计系统流程图 „„„„„„„„„„„„„„„„„„„ 6 2.数字温度计应用系统的硬件设计 „„„„„„„„„„„„„„„ 8 (1).单片机小系统的基本组成及其选择 „„„„„„„„„„„„ 8 (2).电源 „„„„„„„„„„„„„„„„„„„„„„„„„ 8 (3).晶振控制 „„„„„„„„„„„„„„„„„„„„„„„ 8 (4).I/O口&接口 „„„„„„„„„„„„„„„„„„„„„„ 9 (5).主要芯片及其功能 „„„„„„„„„„„„„„„„„„„ 10

①AT89S52 „„„„„„„„„„„„„„„„„„„„„„„ 10 ②DS18B20 „„„„„„„„„„„„„„„„„„„„„„„ 12 ③1602液晶显示屏 „„„„„„„„„„„„„„„„„„„ 18

七 .系统软件程序的设计 „„„„„„„„„„„„„„„„„„„„ 19

1.软件流程框图 „„„„„„„„„„„„„„„„„„„„„„„19 2.C语言程序 „„„„„„„„„„„„„„„„„„„„„„„„21 八 .系统仿真调试 „„„„„„„„„„„„„„„„„„„„„„„„25 1.仿真器的介绍 „„„„„„„„„„„„„„„„„„„„„„„„27 ⑴.keil软件的开发运用 „„„„„„„„„„„„„„„„„„„27 ①.Keil C51单片机软件开发系统的整体结构 „„„„„„„„„27 ②.使用独立的Keil仿真器时,注意事项 „„„„„„„„„ 28 ⑵.proteus软件的开发运用 .„„„„„„„„„„„„„„„„„28 ①.Protues 软件介绍 .„„„„„„„„„„„„„„„„„„ 28 ②.proteus 的工作过程 .„„„„„„„„„„„„„„„„„„28 2.系统整体调试„„„„„„„„„„„„„„„„„„„„„„„„„28 ⑴.仿真调试结果„„„„„„„„„„„„„„„„„„„„„„„28 ⑵.仿真结果分析„„„„„„„„„„„„„„„„„„„„„„„29 九 .PCB板制作以及成品制作调试„„„„„„„„„„„„„„„„„29 十 .实验结果„„„„„„„„„„„„„„„„„„„„„„„„„„30 十一 .结论(设计分析)„„„„„„„„„„„„„„„„„„„„„30 十二 .课程设计心得体会 „„„„„„„„„„„„„„„„„„„„30

一 课程设计目的

1、 加强学生理论联系实际的能力,提高学生的动手能力; 2、 学会基本电子元器件的识别和检测;

3、 学会应用EDA软件Proteus, Multisim进行电路的设计和仿真; 4、 基本掌握单片机的基本原理,并能将其应用于系统的设计: 5.学会运用Altium Designer Pcb进行pcb板制作;

6.通过实训,提高学生的学习兴趣,激发自主学习能力,培养创新意识。 二 设计任务

先焊制一个单片机最小系统,并以制作的单片机最小系统为核心,设计并制作一个数字温度计应用系统。 三 设计要求

1 采用DS18B20作为温度传感器进行温度检测;

2 对采集温度进行显示,采用两路设计(显示温度分辨率0.1℃); 3 采集温度数值应采用数字滤波措施,保证显示数据稳定; 4 显示数据,无数据位必须消隐。

四、设计方案及比较(设计可行性分析)

该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。

方案一

采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(热电偶的构成如图 3.1),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。

图 3.1热电偶电路图

系统主要包括对A/D0809 的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。此外还有复位电路,晶振电路,启动电路等。故现场输入硬件有手动复位键、A/D 转换芯片,处理芯片为51 芯片,执行机构有4 位数码管、报警器等。

方案二

采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51(52)构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20

控制工作,还可以与PC 机通信上传数据,另外AT89S51(52) 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。

该系统利用AT89C51(52)芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。

系统框图如图

从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,

还可以进行各种功能的扩展,例如报警系统,时间显示等

,故本次设

计采用了方案二,并采用两路设计。

五 系统设计总体思路

设计方案及其总体设计框图

六 系统原理框图及工作原理分析

1.温度计设计系统流程图

系统设计原理:

本次课程设计是基于单片机的数字温度计设计,在开始课程设计的时候我们要理解并掌握对单片机的开发,学会使用KEIL及Proteus, Multisim等仿真软件。根据设计任务要求选择好器件,编写好程序运行成功之后进行软件联调,验证系统是否正确。通过筛选,我们组选用单片机AT89S52作为主控制系统;用1602液晶显示模块芯片作为温度数据显示装置;智能温度传感器采用DS18B20器件作为测温电路主要组成部分。

2、数字温度计应用系统的硬件设计 (1)、单片机小系统的基本组成及其选择

单片机选型参考

• ① AT89S51、AT89S52 :具备ISP下载功能 ,可以使用USBASP程序下载线或者并口下载

• ② STC89C51、STC89C52:使用串口线+MAX232烧写程序。

• ③AT89C51、AT89C52 :可以在最小系统板上使用,但需要另外用编程器烧写程序

本次课程设计选用AT89S52型号单片机进行操作。

AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个 全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 AT89S52引脚图

此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时 AT89S52引脚图 计数器,串行口,外中断 系统可继续工作,掉电模式冻结振

荡器而保存RAM的数据,停止芯片其它功能直至外中断激活

或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三 种 封装形式,以适应不同产品的需求。

此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停

止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三 种封装形式,以适应不同产品的需求。 (2)电源

• ①电源适配器供电:DC座(三个管脚) • ②usb供电:

(3) 晶振控制

晶振控制

电路结构原理如右图所示

(4)I/O口&接口

• ① 所有I/O用排针引出 • ② 串行通信口:P3.0,p3.1 • ③ ISP:

p1.6,p1.7

单片机共有4个8位双向并行I/O通道口,每位均有自己的锁存器、输出驱动器和输入缓冲器组成。这种结构,在数据输出时可以锁存,及输出新的数据以前,通道口上的原始数据不变。但对输入信息是不锁存的,所以从外部输入的信息必须保持到取数指令执行完为止。

(5)主要芯片及其功能

②DS18B20

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。

TO-92封装的DS18B20的引脚排列见下图,其引脚功能描述见表3-3。(底视图)

图3-3 DS18B20引脚图

表3-3 DS18B20详细引脚功能描述

DS18B20的性能特点如下:

独特的单线接口仅需要一个端口引脚进行通信;

多个DS18B20可以并联在惟一的三线上,实现多点组网功能; 无须外部器件;可通过数据线供电,电压范围为3.0~5.5V; 零待机功耗;温度以9或12位数字;用户可定义报警设置;

报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图3-4所示。

图3-4 DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用

一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3-4所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3-5所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率.

.

.

TMR1R01

.

1111

.

图3-5 DS18B20字节定义

DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。 当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。

表3-4 DS18B20温度转换时间表

R1 0 0 1 1

R0 0 1 0 1

分辨率/位

9 10 11 12

温度最大转换时间/ms

93.75 187.5 375 750

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。 在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。

DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。

表3-5 一部分温度对应值表

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

.

.

.

.

DS18B20温度传感器与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

DS18B20的复位时序

DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线

上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

③1602液晶显示屏

管脚功能

1602采用标准的16脚接口,其中: 第1脚:VSS为电源地

第2脚:VCC接5V电源正极

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6

脚:E(或EN)端为使能(enable)端。 第7~14脚:D0~D7为8位双向数据端。

第15~16脚:

空脚或背灯电源。15脚背光正极,16脚背光负极。

七 系统软件程序的设计

1 软件流程框图:

主程序流程图

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

计算温度流程图

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如下图。

N

显示数据刷新流程图

2 C语言程序

#include // 包含头文件 //

#include

#include //浮点数处理

#include

#define uchar unsigned char

#define uint unsigned int

sbit LCD_Busy = P2 ^ 7; // 定义LCM2402

LCM2402_DB0_DB7关联)

/***LCD1602端口定义***/

sbit LCD_E=P0^5;

sbit RW=P0^6;

sbit RS=P0^7;

uint temp,temp2;

float f_temp,f_temp2;

sbit ds=P3^7;

sbit ds2=P3^6;

void delay(uint z) //延时z MS

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void LCD_TestBusy(void){

P2 = 0xff; //设备读状态

RS = 0;

RW = 1;

LCD_E = 1;

while(LCD_Busy); //等待LCM不忙

LCD_E = 0; //

}

void write_com(uchar com)

{

LCD_TestBusy();

P2 = com;

RS = 0;

RW = 0;

LCD_E = 1;

LCD_E = 0;

}

测忙线与的(

void write_dat(uchar dat)

{

LCD_TestBusy();

P2 = dat;

RS = 1;

RW = 0;

LCD_E = 1;

LCD_E = 0;

}

void print(uchar a,uchar *str){

write_com(a | 0x80);

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

write_dat(*str++);

}

*str = 0;

}

void print_sfm(uchar add,uint t)

{

uchar a,b,c;

a=t/100;

b=t%100/10;

c=t%100%10;

write_com(0x80+0x40+add);

write_dat(0x30+a);

write_dat(0x30+b);

write_dat(0x30+c);

}

void init()

{

RW=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

}

void dsreset(void)//DS18B20复位,初始化

{

uint i;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}

bit tempreadbit(void) //读一位数据

{

uint i;

bit dat;

ds=0;i++;

ds=1;i++;i++;

dat=ds;

i=8;while(i>0)i--;

return(dat);

}

uchar tempread(void) //读一字节(8位)

{

uchar i,j,dat;

dat=0;

for(i=1;i

{

j=tempreadbit();

dat=(j>1); //读出的最低位在最前面,刚好一字节在dat里 }

return (dat);

}

void tempwritebyte(uchar dat) //向DS18B20写一个字节数据

{

uint i;

uchar j;

bit testb;

for(j=1;j

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

ds=0;

i++;i++;

ds=1;

i=8;while(i>0)i--;

}

else

{

ds=0;

i=8;while(i>0)i--;

ds=1;

i++;i++;

}

}

}

void tempchange(void) // 开始获取温度并转换

{

dsreset();

delay(1);

tempwritebyte(0xcc); // 写跳过读ROM指令

tempwritebyte(0x44); // 写温度转换指令

}

uint get_temp()

{

uchar a,b;

dsreset();

delay(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a=tempread(); // 读低八位

b=tempread(); // 读高八位

if(b&0x80) // 判断正负

{

temp=~b+1;}

else{

temp=b;}

temp

temp=temp|a;

f_temp=temp*0.0625; //

temp=f_temp*10+0.5; //

f_temp=f_temp+0.05;

return temp; //返回temp是整型

}

void dsreset2(void)//DS18B20复位,初始化

{

uint i;

ds2=0;

while(i>0)i--;

ds2=1;

i=4;

while(i>0)i--;

}

bit tempreadbit2(void) //读一位数据

{

uint i;

bit dat;

ds2=0;i++;

ds2=1;i++;i++;

dat=ds2;

i=8;while(i>0)i--;

return(dat);

}

uchar tempread2(void) //读一字节(8位)

{

uchar i,j,dat;

dat=0;

for(i=1;i

{

j=tempreadbit2();

dat=(j>1); //读出的最低位在最前面,刚好一字节在dat里 }

return (dat);

}

void tempwritebyte2(uchar dat) //向DS18B20写一个字节数据

{

uint i;

uchar j;

bit testb;

for(j=1;j

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

ds2=0;

i++;i++;

ds2=1;

i=8;while(i>0)i--;

else

{

ds2=0;

i=8;while(i>0)i--;

ds2=1;

i++;i++;

}

}

}

void tempchange2(void) // 开始获取温度并转换

{

dsreset2();

delay(1);

tempwritebyte2(0xcc); // 写跳过读ROM指令

tempwritebyte2(0x44); // 写温度转换指令

}

uint get_temp2()

{

uchar a,b;

dsreset2();

delay(1);

tempwritebyte2(0xcc);

tempwritebyte2(0xbe);

a=tempread2(); // 读低八位

b=tempread2(); // 读高八位

temp2=b;

temp2

temp2=temp2|a;

f_temp2=temp2*0.0625; //

temp2=f_temp2*10+0.5; //

f_temp2=f_temp2+0.05;

return temp2; //返回temp是整型

}

void main()

{ uint i,j;

init();

print(0x80,"T is"); //第一行地址

tempchange();

delay(1000);

tempchange();

tempchange2();

delay(1000);

tempchange2();

while(1)

{

tempchange();

i=get_temp();

print_sfm(4,i);

tempchange2();

j= get_temp2();

print_sfm(10,j);

}

}

八 系统仿真调试

1、仿真器的介绍

⑴keil软件的开发运用

Keil C51是美国Keil Software公司出品的51

系列兼容单片机C语言软件开发系统,与汇编相比,

C语言在功能上、结构性、可读性、可维护性上有

明显的优势,因而易学易用。Keil提供了包括C编

译器、宏汇编、连接器、库管理和一个功能强大的

仿真调试器等在内的完整开发方案,通过一个集成

开发环境(uVision)将这些部分组合在一起。运行

Keil软件需要WIN98、NT、WIN2000、WINXP等操作

系统。如果使用C语言编程,那么Keil几乎就是不

二之选,即使不使用C语言而仅用汇编语言编程,

其方便易用的集成环境、强大的软件仿真调试工具

也会令你事半功倍。

①Keil C51单片机软件开发系统的整体结构

C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件

由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

②使用独立的Keil仿真器时,注意事项

● 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔

中换插其他频率的晶振。

● 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。

● 仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内

ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。

⑵proteus软件的开发运用

① Protues 软件介绍

Proteus 是目前最好的模拟单片机外围器件的工具,它可以仿真51系列、AVR,PIC 等常用的MCU 及其外围电路。本文基于Proteus 6.9 和Keil uVision3 软件。Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。

② proteus 的工作过程

运行proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作前,要设

置view 菜单下的捕捉对齐和system 下的颜色、图形界面大小等项目。通过工

具栏中的p 命令,在pick devices 窗口中选择电路所需的元件,放置元件并调

整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的

Define code generation tools 菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source 菜单的Add/removesource files 命令下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真程序和电路的运行情况。

Proteus 软件提供了30 多个元件库,数千种元件。元件涉及数字和模拟、交流和直流等。

2、系统整体调试

⑴仿真调试结果

⑵仿真结果分析

在运行仿真结果时通过改变温度传感器DS18B20的温度,然后调用各种子函数,可以改变液晶显示1602的第二行显示数据,说明程序编写正确。

九 PCB板制作以及成品制作调试

1 运用Altium Designer Pcb进行pcb板制作;

2 产品的焊接和调试,温度的测量可以读取,温度测量可用电烙铁进行.

十 实验结果

两路温度显示正常,环境温度测量正常.

十一结论(设计分析)

我们组设计的数字温度计系统知识运用简单的AT89S52芯片的I/O口传输功能,通过几个小的读数据、传递数据、延时子函数实现温度的读取传输功能,是比较简单,容易实现的,所以我们的系统只是实现了一些简单的功能,系统整体来说比较简易,但好像这个温度计没有多大的应用价值,所以我们后续分析觉得这个系统可以加一个温度复位系统提高AT89S52芯片的功能价值,也提高数字温度计的智能价值,还可以增加一个报警子函数,实现智能数字温度计更高的应用价值。由于时间太仓促,经验不足,理论方面也相应的存在不足,加上条件有限,仍存在着一些设计方面的问题,个人技能也有待提高,理论知识还要巩固加强。

十二、课程设计心得体会

经过这次单片机课程设计,终于完成了我们的数字温度计的设计,虽然不能做到很完美,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思!

在本次设计的过程中,我们发现很多的问题,也许是第一次进行这种系统的设计所以感觉完成这样一次小系统设计我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而

基于单片机的数字温度计课程设计

言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

本来起初做的函数信号发生器,仿真实验结果挺理想,调试过程发现波形失真比较严重,具体实验数据也测量不到,可能是实验数据参数选择还是有点问题,实战经验还是不足的,迫于期末考试的压力,不得不重新选择做这个51的数字温度计,作品还有很多不足,对于C语言也还没有更熟悉,深层次的理解,在答辩时还有很多不懂,梁老师也积极为我们解答,感谢老师的指导,我们会继续努力,放假之后继续把函数信号发生器系统再优化,把作品完成,如果有什么不懂的地方,还希望老师不吝赐教.

31


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn