《基于51单片机的数字温度计21页》由会员分享,可在线阅读,更多相关《基于51单片机的数字温度计21页(20页珍藏版)》请在金锄头文库上搜索。
1、 硬件 课程设计实验报告课 题: 数字温度计班 级: 作 者: 学 号:指导老师: 课设评价:课设成绩:19目录一需求分析1二概要设计1三硬件电路设计3四系统软件设计5五软件仿真8六实际连接与调试9七本次课设的收获与感受11附录(程序源代码)12一 需求分析功能要求: 测量环境温度,采用接触式温度传感器测量,用数码管显示温度值。 设计要求:(一)功能要求 (1) 由4位数码管显示当前温度。 (2) 具备报警,报警门限通过键盘设置。 (3) 精度为0.5。(二)画出参考的电路原理图(三)画出主程序及子程序流程图、画出MCS51内部RAM分配图,并进行适当地解释。(四)写出实现的程序及实现过程。并
2、进行适当地解释说明。二 概要设计(一)方案选择 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。(二)系统框图 该系统可分为以下七个模块:(1) 控制器:采用单片机STC89C52对采集的温度数据进行处理;
3、(2) 温度采集:采用DS18B20直接向控制器传输12位二进制数据;(3) 温度显示:采用了4个LED共阴极七段数码管显示实际温度值;(4) 门限设置:主要实现模式切换及上下门限温度的调节;(5) 报警装置:采用发光二极管进行报警,低于低门限或高于高门限均使其发光;(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引脚或
4、第二功能引脚(RxD、TxD、INT0、INT1、T0、T1、WR、RD);XTAL1、XTAL2:外接晶振输入端;RST/Vpd:复位信号输入引脚/备用电源输入引脚;Vcc:接+5V电源;Vss:地端。(2)DS18B20(a)通过单线总线端口访问 DS1820 的协议如下: 初始化 ROM 操作命令 存储器操作命令 执行/数据DS1820 需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和 DS1820 间的任何通讯都需要以初始化序列开始,初始化序列见图11。一个复位脉冲跟着一个存
5、在脉冲表明DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令)(b)当总线上只有一个器件时,DS18B20读温度的流程为:复位 发0CCH SKIP ROM命令 发44H开始转换命令 延时 复位 发0CCHSKIP ROM命令 发0BEH读存储器命令 连续读出两个字节数据(即温度) 结束。 Convert T 44h这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后DS1820 保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS1820 又忙于做时间转换的话,DS1820 将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源
6、,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。 Read Scratchpad BEh这个命令读取暂存器的内容。读取将从字节0 开始,一直进行下去,直到第9(字节8,CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。(c)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 D0SSSSS272625三硬件电路设计本次实验采用了老师提供的单片
7、机系统,所以整体的硬件电路设计需要在已知的硬件条件下进行设计。(一)下图为已有的单片机系统部分电路图分析:(1)由上图可知,时钟振荡电路,复位电路均以在原系统中正确连接。(2)数字温度计所需的显示电路电路中,原系统将段码输出连在P2接口中,但由图可知,该图中的六个数码管中的小数点均无法点亮,原因在于图中并未对其进行连接,也无引脚供外界连接。而六个数码管的位选端口连在P1接口上。本次课程设计中,我们选择使用P1.0P1.3上所连接的四个数码管。(3)通过软件测试验证,原系统中的数码管为共阴极,且原系统中位选信号是通过一个反向器之后才输入数码管。(4)原系统中P0端口未使用,所以可以用排线引出,连
8、接我们所需要补充的电路,包括DS18B20总线输入电路、门限设置电路以及报警电路。(二) 温度采集电路、门限设置电路及报警电路(其余电路省略)图中:(1)门限中的三个按键,分别为模式切换按键、加按键、减按键;(2)报警电路中,超过高门限或者低于低门限时发光二极管被点亮,其余时刻均熄灭;(3)DS18B20温度采集电路中,需要注意的是DQ上需要一个上拉电阻,一般为4.7K左右。四系统软件设计(一)读取数据的流程图DSl8820的主要数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部
9、电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。此外,还可外接5 V电源,给DSl8820供电。DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。下图读取数据流程图。开始DS18B20的初始化启动温度转换读取温度寄存器跳过读序列号的操作跳过读序列号的操作DS18B20的初始化RET将LSB与MSB值合并为temptemp(二)温度数据处理程序的流程图读出温度数据后,temp的低四位为温度的小数部分,可以精确到0.0625,temp的中间8位为温度的整数部分,temp的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出
10、来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行显示时要使用另外的查询表,与整数显示查询表有所不同。因为本次课程设计只要求测试的温度范围为070,所以符号位S必为0,软件设计中则默认所测数据为正,从而不设符号位判定。开始取小数部分,并暂存其显示值取整数部分,并计算百位、十位、个位,并暂存显示值判断百位是否为0为0百位赋值0x0a,即该数码管熄灭判断十位是否为0 为0十位数码管熄灭RET(三)模式切换流程图使用模式值st来标记不同模式,st=1时,表示在正常温度模式,st=2,表示在高门限模式,st=3表示在低门限模式,每次按下一次模式切换键,st+1,待其加至4时,将该值返回至1。
11、从而形成了模式键不断按下,三种模式循环切换的情况。防抖在这里是十分关键的。因为此处的按键是按下然后又返回为按了一次。所以按下时,则进入程序,为了防止机械抖动等不确定情况,延时恰当的一段时间后再次检测是否确实按下。若确实按下,则对模式进行切换。切换后,延时等待按键返回高位,返回高位后,再次延时消除抖动,再次检验,确定按键返回高位后,退出程序。开始模式键是否按下延时消抖模式值st在13间切换延时等待按键返回延时消抖RET五软件仿真 电路图连接:严格按照硬件设计中已有的单片机系统的连接方式和自己补充的电路的连接方式进行仿真,要最贴近实际电路,才能更准确的得到仿真结果。系统电路图 高门限下数码管显示
12、低门限下数码管显示 正常模式下数码管显六实际连接与调试(一)仿真成功后,在实际操作中,电路图的连接应该严格按照仿真电路进行。 问题:在最开始实验中,我将DS18B20的DQ连接在P1.4,且仿真成功。但是在实际连接中,我将DQ连接在了P0.4端口,但实际电路中无任何数据显示。再次仿真,将DQ接至P0.4,仿真不成功。后查阅P0、P1、P2以及P3口的内部结构后发现,除P0外另外三口均接有上拉电阻,而P0则无。所以P0在作为通用I/O接口使用时,必须外接上拉电阻,其余端口则不需要。所以,为方便起见,实际中,将DQ按照最初仿真设计,接至P1.4。(二)原系统所拥有资料太少,数码管类型未知。 因只查
13、阅到原系统的部分电路图,且无详细说明,所以为证明在网上搜索到的电路图的正确性以及确定数码管的类型。先编写一个简单的数字显示程序。最开始,我并没有意识到原系统中的片选信号接有反向器,在测试程序中,无论使用共阴还是共阳数字查询表,数码管均显示8888,后发现问题将所有片选数值取反,再次进行测试,确定数码管为共阴极。同时,在测试过程中,发现原系统的小数点是无法点亮的。(三)关于位选在最开始的测试数码管类型中,我只测试了一位数码管,使其显示数值1,但测试成功后,6位数码管均显示为1。在测试过程中,我并未注意这个问题。测试结束后,进行整体联调。但数码管始终无正确显示。当时,我首先着手于寻找软件程序中是否有错误。所以人为将temp设定为一个固定值,先确定数据处理程序和数据显示程序无误。然而数码管无法正常显示我预先设定的值,后经过反复改动,发现,在位选过程中,必须在选中一位数码管的过程中同时将其余所有的数码管关闭,否则将产生混乱。若逐一设定S1=1;S2=0;S3=0;S4=0未免太过麻烦,所以设定一个数组,分别赋值0x08,0x04,0x02,0x01。片选时按照规则将上值赋给,则一举多得。(四)DQ数据采集 上述问题均解决后,再次进行调试,数码管显示25592。这个值非常特殊,且