温度测量显示电路设计与制作(课程设计报告)
课 程 设 计
课程名称
题目名称学生学院专业班级
学 号学生姓名指导教师
2009年 1月8日
广东工业大学本科生课程设计(论文)任务书
题目名称 学 院 专业班级 姓 名 学 号
温度测量显示电路设计与制作
信息工程学院 06级计算机测控1班
卢秋岑 3206002638
一、课程设计(论文)的内容
模块一(设计为主型):
1、设计内容:
(1)系统原理框图设计与分析(包括传感器的选择与确定);
(2)系统方案设计、比较及选定(给出两种以上的方案比较);
(3)系统原理图设计(包含测量电路、放大电路、A/D转换及显示电路等); (4)确定原理图中元器件参数(给出测量电路、放大电路计算公式与数据);
2、运用protel软件绘出系统原理电路图(鼓励能完成印刷电路板图的绘制)。
模块二(制作为主型):
1、设计内容:
(1)系统原理框图设计与分析(包括传感器的选择与确定);
(2)系统方案设计、比较及选定(给出两种以上的方案比较);
(3)系统原理图设计(包含测量电路、放大电路、A/D转换及显示电路等); (4)确定原理图中元器件参数(给出测量电路、放大电路计算公式与数据); 2、根据系统原理图所设计的元件及参数,购买相应元器件,并利用实验室现有“电路
实验插件板”完成安装、调试及测试。
二、课程设计(论文)的要求与数据
1、任务分为设计为主和制作为主的两个重点内容不同的模块; 2、完成一个温度范围为0-50 0C的温度测量显示电路的设计与制作; 3、讨论、分析与总结、提交设计报告。
三、课程设计(论文)应完成的工作
1、传感器的选择; 2、电路方案比较; 3、系统工作原理分析; 4、电路原理图绘制(模块一); 5、电路制作、调试(模块二); 6、撰写设计报告
四、课程设计(论文)进程安排
五、应收集的资料及主要参考文献
1、 张国雄等编。测控电路,机械工业出版社,2001.8
2、 赵负图主编,现代传感器集成电路,人民邮电出版社,2000.1 3、 刘征宇主编,线性放大器应用手册,福建科学技术出版社,2005.1 4、 蔡锦福等编,运算放大器原理与应用,科学出版社,2005.7 5、 自编,测控电路设计型实验任务书
发出任务书日期:2009 年 1 月 4 日 指导教师签名: 计划完成日期: 2009 年 1 月 4 日 专业责任人签名:
主管院长签名:
目 录
一.摘 要......................................... 错误!未定义书签。 二. 设计目的与意义................................ 错误!未定义书签。 三. 方案论证与确定................................ 错误!未定义书签。
3.1系统方案的确定.............................. 错误!未定义书签。
3.1.1方案一 ................................ 错误!未定义书签。 3.1.2方案二 ................................ 错误!未定义书签。 3.1.3方案三 ................................ 错误!未定义书签。 3.2传感器方案的确定............................ 错误!未定义书签。
3.2.1方案一 ................................ 错误!未定义书签。 3.2.2方案二 ................................ 错误!未定义书签。 3.3测量显示方案的确定.......................... 错误!未定义书签。
3.3.1方案一 ................................ 错误!未定义书签。 3.3.2方案二 ................................ 错误!未定义书签。
四. 系统工作原理分析.............................. 错误!未定义书签。
4.1微控制器原理................................ 错误!未定义书签。 4.2传感器原理.................................. 错误!未定义书签。
4.2.1DS18B20简介 ........................... 错误!未定义书签。 4.2.2DS18B20内部结构 ....................... 错误!未定义书签。 4.2.3DS18B20测温原理 ....................... 错误!未定义书签。 4.3温度数值分析................................ 错误!未定义书签。 五. 电路制作与软件调试............................ 错误!未定义书签。
5.1硬件制作.................................... 错误!未定义书签。 5.2软件调试.................................... 错误!未定义书签。
5.2.1主程序流程 ............................ 错误!未定义书签。 5.2.2子程序流程 ............................ 错误!未定义书签。
六. 附录.......................................... 错误!未定义书签。
6.1课程设计心得体会............................ 错误!未定义书签。 6.2系统电路原理图.............................. 错误!未定义书签。 6.3PCB图....................................... 错误!未定义书签。 6.4数字温度计实物图............................ 错误!未定义书签。 6.5程序代码.................................... 错误!未定义书签。 七. 参考文献...................................... 错误!未定义书签。 八. 致谢.......................................... 错误!未定义书签。
一.摘 要
在现今科技高速发展的时代,各行各业对控制和测量的要求越来越高,其中,温度测量和控制在很多行业中都有比较重要的应用,尤其在工业上,如炼钢时对温度高低的控制。要控制好温度,测量是前提,测量的精度影响着后续工序的进行,因此温度测量的方法和选取就显得相当重要了。
针对各种温度测量方案的讨论分析后,我们组决定以AT89S52为核心,采用DS18B20温度传感器进行温度信号的检测,并通过LCD液晶显示测量所得温度,外加红外遥控调节设置温度测量的上下限数值(默认温度上下限为10℃~24℃),在所测温度到达所设上下限数值时,蜂鸣器启动报警提示。
本报告是我们组所设计的数字温度计的说明书,包括方案论证选取、工作原理、所用元件介绍和设计电路原理图、调试程序等。
关键词:AT89S52、DS18B20、LCD液晶显示、红外遥控
二.设计目的与意义
随着电子技术的高速发展,对电子方面人才的要求越来越高,不仅要求其具备相关的专业理论知识,还要求其具有较强的设计、制作等实践动手能力。此次课程设计无疑是对从事测控专业的人的一次很好的锻炼和考验,是培养测控技术的人才的一次良好的机会,为其提供了一个理论知识与实践相结合的平台。通过本次课程设计,引导学生结合所学的测控电路理论知识,思考设计方案,以小组合作方式,分工完成各个部分,从而掌握相关的测量显示电路的设计和调试技术,一方面提高了学生的实践动手和协作能力,另一方面培养了学生综合运用所学理论知识进行工程设计的能力。
通过此次课程设计,可以培养学生的工程设计能力,包括动手能力、独立思考设计能力、解决实际设计过程中遇到的问题以及团队协作能力等,为今后的专业学习和工程实践打下坚实的基础。
三.方案论证与确定
3.1系统方案的确定
3.1.1方案一
该方案为ICL7107 A/D转换&译码方案。
常见A/D转换器的转换方式有非积分式和积分式两类,如逐次逼近比较式A/D转换、斜坡电压式A/D转换等属于非积分式,其特点是转换速度快,但抗干扰能力差。电压反馈型V-F变换、双积分式A/D转换则属于积分式,其特点是抗干扰能力强、测量精度高,但转换速度低,在转换速度要求不太高的情况下,获得广泛应用。
工作方框图如图1所示:
电路原理图如图2所示:
图1 方案一工作框图
3.1.2方案二
该方案利用AVR单片机对输入信号进行模数转换输出数字信号控制数码管显示温度值。并且可以通过编写程序对输入信号进行分段线性化处理,使得测量精度大大提高,而且该电路无须外接译码器,结构简单。
工作框图如图3所示:
图3 方案二工作框图
3.1.3方案三
该方案以AT89S52为控制器,采用DS18B20温度传感器检测温度信号,利用红外遥控设置温度测量的上下限数值,并通过LCD液晶显示。
工作框图如图4所示:
经过综合研究分析,考虑整个设计和成本,方案三成本低,测量温度方便简单,故此次数字温度计课程设计选取方案三。
图4 方案三工作框图
3.2传感器方案的确定
3.2.1方案一
该方案采用热敏电阻。
热敏电阻价格比较便宜、灵敏度比较好,在实际应用的时候线性度较差,另外调试比较困难。不适合使用。故不使用热敏电阻。
3.2.2方案二
该方案采用AD590。
AD590拥有良好的线性关系,灵敏度较高、使用简单方便。但是这种传感器的价格比其他的两种都贵很多。故不选用。
方案三:DS18B20数字温度传感器
DS18B20是美国DALLAS半导体公司智能温度传感器,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面拥有很大优势,给用户带来了更方便的使用和更令人满意的效果。
经过上述三种方案的论证比较,综合考虑成本、性能等因素,最终选取方案三。
3.3测量显示方案的确定
3.3.1方案一
该方案采用LED显示。
LED数码显示中每一个像素单元就是一个发光二极管,如果是单色,一般是红色发光二级管。如果是彩色,一般是三个三原色小二极管组成的一个大二级管。这些二级管组成的矩阵由数码控制实时显示文字或者图像,造价相对低廉,组成的显像面积大。
3.3.2方案二
该方案采用LCD液晶显示。
液晶显示器是一种被动式的显示器,即液晶本身并不发光,而是利用液晶经过处理后能改变光线通过方向的特性,而达到白底黑字或黑底白字显示的目的。LCD液晶的像素单元是整合在同一块液晶版当中分隔出来的小方格。通过数码控制这些极小的方格进行显像。造价高但是显示非常细腻。
经过研究分析,选择方案二。
四.系统工作原理分析
本系统由温度传感器DS18B20、AT89S52、LCD显示电路、软件构成。DS18B20输出表示摄氏温度的数字量,然后用51单片机进行数据处理、译码、显示、报警等,
系统框图如图5所示:
图5 系统框图
4.1微控制器原理
AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8K Bytes ISP的可反复擦写100000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,其具有如下特点:40个引脚,8K Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器,32个外部双向输入/输出口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗电路,片内时钟振荡器。
单片机引脚如图6所示:
图6 单片机引脚图
4.2传感器原理
4.2.1DS18B20简介
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20元件图如图7所示: DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗;
●温度以9或12位数字; ●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
图7 DS18B20元件图
4.2.2DS18B20内部结构
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图8所示。
图8 DS18B20内部结构图
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图9所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。
.
.
TMR1R01
.
1111
.
图9 DS18B20字定义
由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。 .
.
.
分辨率/位温度最大转向时间/ms
93.75187.5375750
表1 DS18B20温度转换时间表
.
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。
表2 一部分温度对应值表 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时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
4.2.3DS18B20测温原理
DS18B20低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。此外,用斜率累加器补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,
4.3温度数值分析
利用的单片机的一个IO口,读取DS18B20的温度高位,温度低位。由上面的分析可知:温度高位的高5位的符号位、低3位是整数部分的高四位(整数部分的最高位永远为0),温度低温的高四位为整数部分的低四位,温度地位的低四位是小数部分用以下公式计算:
整数部分=温度低位/16+温度高位×16 小数部分十分位=(温度低位&0x0f)×10/16
由于DS18B30的集成度很高,使得设计的原理还是比较简单,设计的关键是了解DS18B20的时序,准确地获得温度高位和温度低位。
五.电路制作与软件调试
5.1硬件制作
本次设计应用Protel DXP绘制电路原理图,生成PCB图,然后用雕刻机刻板,焊接电路元件,最后用程序调试系统功能。
硬件电路主要由单片机最小系统、DS18B20为核心的传感器电路、液晶显示电路、报警电路、红外遥控电路和供电电路组成。
单片机最小系统:提供一个上电复位高电平,和12MHZ时钟振荡。
DS18B20传感器电路:加电即可工作,DATA端加4.7K电阻作上拉电阻保证有足够大的灌拉电流。
液晶显示电路:
报警电路:利用5V蜂鸣器作报警提示。
供电电路:利用7805组成线性稳压电源为整个系统供电。
具体电路连接见附录SCH电路原理图,硬件接线正确,单片机能构正常工作,硬件调试成功。
5.2软件调试
首先用Proteus进行仿真,调试程序,然后在制作好的电路板上调试程序。测温精度可取到小数点后三位。
5.2.1主程序流程
主程序说明:小于10度,亮黄色LED,表示较凉,开蜂鸣器; 大于24度,亮绿色LED,表示温度较热,开蜂鸣器; 遥控远程控制,改变上下限报警温度。 主程序流程图如图10所示:
图10 主程序流程图
5.2.2子程序流程
DS18B20工作流程图如图11所示; 计算温度流程图如图12、图13所示; 温度读取流程图如图14所示。
图11 DS18B20工作流程图
图12 计算温度流程图
图13 显示数据刷新流程图
图14 温度读取流程图
六.附录
6.1课程设计心得体会
本次课程设计,我们组成功完成了数字温度计的设计、制作与调试。三天的时间里,我们分工合作,组长全瑞负责写程序,我和景存负责电路部分(主要绘制电路、焊接电路),安荣负责刻板、包装。最后的调试工作我们共同参与,遇到了不少问题,大家从电路、程序中寻找出错的原因(负责检查自己负责的那部分,并作相应修改),经过讨论、思考找到解决的方法,使得最终用程序调试电路显示成功。
在这里,很感谢与我共同奋斗的我们组的成员,尤其是景存,在我绘制电路原理图和PCB图时给予我很多帮助。这次课程设计,我尝试用Protel DXP绘制电路图,因为我们在讨论方案是确定了电路制作方面采用刻板方式。虽然以前有学过Protel 99,但从未接触过DXP,所以还是去图书馆借了相关的书籍,边学边绘制。这次用DXP而不用99,主要是考虑到对以后学习FPGA等会有更大的帮助。
绘制电路图的过程中,的确遇到了不少问题。虽然这次设计的电路并不复杂,(主要由单片机最小系统、DS18B20测温电路、液晶显示电路、红外遥控电路、报警电路和供电电路组成),但里面的元件查找和封装很繁琐,导入PCB后有些封装太大,要做相应的替换。通过这次绘制电路,认识了不少元件的各种封装,更学会了刻板时用到的相关参数的设置,例如焊盘、布线等参数的设置。因为是第一次刻板,在设置这些参数时还请教了我们513实验室的师兄,在这里非常感谢他们给予的帮助。导入PCB后,更头痛的是布局。刚开始尝试用自动布局功能,但是出来的效果不是很理想,有不少跳线,所以还是用手动布局。对应着电路原理图,初步调整元件的位置,在尽量避免线路的交叉。在布局过程中,景存和我一起思考讨论布局方案,可是第一次自动布线后,还是有不少跳线。我们研究自动布线时线路的走向,讨论怎样移动一下元件的位置能让这里的跳线消除,让线路有空间绕过去而不必跳线。另外结合刻板的实际(例如雕刻机的刀有些钝),线的大小和焊盘孔径的大小的修改也相当考验我。当安荣把第一块板刻出来时,发现线太细,有些几乎要断了,孔径太小,根本无法钻孔。就这样,我结合师兄给予的建议和实际出来的效果修改了相关参数,最后终于有所成效。
出来自己负责的绘制电路原理图和PCB图外,我还学会了雕刻电路板(例如如何定位雕刻刀、如何调整进刀的大小等),在电路调试中更是深有感慨。一个作品无论大小、复杂或简单,在软硬件相结合的过程中总会出现一些问题,要我们去调试,去检查,才能使结果更精确。而且调试时让我着实体会到前期电路制作部分很重要,电路制作得好,会减少调试中出现问题的可能性。
这次课程设计我受益匪浅,也是进实验室以来的又一次不错的经历。团队协作做出来的作品,每一部分都不可或缺,既要分工又要合作,这样才能有更佳的效果。
20
6.2系统电路原理图
21
6.3PCB图
6.4数字温度计实物图
22
6.5程序代码
************************************LCD1602
**********************************************/
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^7; //液晶使能端口 模块
sbit rw=P2^6;
sbit e=P2^5;
sbit P3_6=P3^6;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
//sbit P1_0 = P1^0;
//sbit P1_1 = P1^1;
void delay_ms(uchar ms){ //延时
uint i,j;
for(i=0;i
for(j=0;j
}
void lcd_wcmd(uchar cmd){ //液晶写指令
rs=0;rw=0;
e=0;
P0=cmd;
e=1;
e=0;
delay_ms(5);
}
void lcd_wdat(uchar dat){ //液晶写数据
rs=1;rw=0;
e=0;
P0=dat;
e=1;
e=0;
delay_ms(5);
}
void lcd_dis(uchar post,uchar *p){
23
lcd_wcmd(0x80 | post); //设置数据地址指针 显示
while(*p!='\0'){
lcd_wdat(*p++);
}
}
uchar code def_char0[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //字符℃ void lcd_wcgram(uchar adress,uchar tmp[]){
uchar i;
for(i=0;i
{
lcd_wcmd(adress+i);
lcd_wdat(tmp[i]);
}
}
void lcd_inti(){
delay_ms(15);
lcd_wcmd(0x38); //16X2字符,5X7点阵,8位数据接口
lcd_wcmd(0x38);
lcd_wcmd(0x08); //关闭显示
lcd_wcmd(0x01); //清屏
lcd_wcmd(0x06); //设置光标工作方式
lcd_wcmd(0x0c); //开显示,设置光标显示方式
lcd_wcgram(0x48,def_char0); //载入用户自定义字符
}
sbit DQ=P3^7; //18B20数据管脚
/*************************ds18b20延迟子函数
*********************************/
void delay_18B20(unsigned int i){
while(i--);
}
void reset() {
uchar x=0;
DQ = 1; //DQ复位
delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(80); //精确延时 大于 480us
DQ = 1; //拉高总线
24 晶振12MHz ) (
delay_18B20(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);
}
unsigned char rbyte(){
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--){
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
void wbyte(uchar dat){
uchar i=0;
for (i=8; i>0; i--){
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
uchar rTempetuare(uchar tmp[]){
uchar a=0,b=0,temp,decimal;
uint uival;
reset();
wbyte(0xCC); //跳过读序号列号的操作
wbyte(0x44); //启动温度转?
reset();
wbyte(0xCC); //跳过读序号列号的操作
wbyte(0xBE); //读取温度寄存器等(共可读9个寄存器)
a=rbyte(); //读取温度值低位
b=rbyte(); //读取温度值高位
temp=b;
25 前两个就是温度
temp&=0xf0;
if(temp){ //负温
if(a==0){
a=~a+1; //bit7向bit8位产生进位
b=~b+1;
}
else{
a=~a+1;
b=~b;
}
tmp[0]='-';
}
else
tmp[0]=' ';
temp=(b>4); //组合
decimal=a&0x0f; //将小数点后的数据提取出来
uival=decimal*625;
tmp[0]='T';
tmp[1]='=';
tmp[2]=0x20; //空格
tmp[3]=temp/100 | 0x30; //取百位
tmp[4]=temp%100/10 | 0x30; //取十位
tmp[5]=temp%100%10 | 0x30; //取个位
tmp[6]=0x2e; //小数点
tmp[7]=uival/1000 | 0x30; //十分位
tmp[8]=uival%1000/100 | 0x30; //百分位
tmp[9]=uival%1000%100/10 | 0x30; //千分位
tmp[10]=uival%1000%100%10 | 0x30; //万分位
tmp[11]=0x20; //空格
tmp[12]=0x01; //字符℃
tmp[13]='\0';
return temp; //十进制温度
}
/*******************************红外解码模******************************************/
#define c(x) (x*110592/120000)
sbit Ir_Pin=P3^2; //红外数据管脚
unsigned char Ir_Buf[4]; //用于保存解码结果
//============================================================== unsigned int Ir_Get_Low() //计数器1,用于解码延时
{
26 块
TL1=0;
TH1=0;
TR1=1;
while(!Ir_Pin && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
//============================================================= unsigned int Ir_Get_High() //计数器1,用于解码延时 {
TL1=0;
TH1=0;
TR1=1;
while(Ir_Pin && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
char jianche()
{ //解码程序 char i,j;
uint temp;
restart:
while(Ir_Pin);
temp=Ir_Get_Low();
if(tempc(9500)) goto restart;//引导脉冲低电平9000 temp=Ir_Get_High();
if(tempc(5000)) goto restart;//引导脉冲高电平4500 for(i=0;i
for(j=0;j
temp=Ir_Get_Low();
if(tempc(800)) goto restart;
temp=Ir_Get_High();
if(tempc(2000)) goto restart;
Ir_Buf[i]>>=1;
if(temp>c(1120)) Ir_Buf[i]|=0x80;
}
return Ir_Buf[2]&0x0f; //所得码
}
27
/*********************************时钟模****************************************/
extern uchar minTX; //最小报警温度
extern uchar maxTX; //最大报警温度
uchar storeT[14]; //实际温度的显示长度
uchar wendu;
void t0ISR() interrupt 1 //T0中断(50ms),中断读温度 块
{
static uchar timeC = 0;
TH0=0x3c;
TL0=0xb0;
if(10==++timeC) // (50*N)毫秒
{
timeC=0;
wendu=rTempetuare(storeT);
lcd_dis(0x42, storeT);
if(wendu
{
P1_0= 0;
P3_6=0;
}
else
{
P1_0= 1;
P3_6=1;
}
if(wendu>=maxTX)
{
P1_1= 0;
P3_6=0;
}
else
{
P1_1= 1;
P3_6=1;
}
}
}
//显示实际温度 //小于最小温度,报警 //大于最高温度,报警 28
void inti_timer()
{ //初始化
IE|=0x82; //允许定时器0中断
IP|=0x02; //设置定时器0的优先级
TMOD=0x01; //选用定时器0
TH0=0x3c; //50ms定时
TL0=0xb0;
TR0=1; //启动定时器0
}
/*****************************主程***************************************/
uchar minTX = 10; //最小报警温度初始化 uchar maxTX = 24; //最大报警温度初始化 char minT[7]=
char maxT[7]=
main()
{
uchar i;
lcd_inti(); //LCD初始化
inti_timer();
TMOD=0x11; //设置计数器寄存器
lcd_dis(0x01, minT); //显示最小报警温度 lcd_dis(0x0a, maxT); //显示最大报警温度
while(1)
{
for(i=4; i!=6; ++i){
minT[i]=jianche();
minT[i] |= 0x30;
lcd_dis(0x01, minT);
}
minTX=(minT[4]-0x30)*10 + (minT[5]-0x30);
for(i=4; i!=6; ++i){
maxT[i]=jianche();
maxT[i] |= 0x30;
lcd_dis(0x0a, maxT);
}
maxTX=(minT[4]-0x30)*10 + (minT[5]-0x30);
}
}
29 序模块
七.参考文献
1. 张国雄等编.测控电路.机械工业出版社,2001.8.
2. 赵负图等编.现代传感器集成电路.人民邮电出版社,2000.1. 3. 刘征宇等编.线性放大器应用手册.福建科学技术出版社,2005.1. 4. 蔡锦福等编.运算放大器原理与应用.科学出版社,2005.7. 5. 自编.测控电路设计型实验任务书.
6. 谷树忠等编.Protel 2004实用教程——原理图与PCB设计.电子工业出版社,2007.2. 7. 袁鹏平等编.Protel DXP电路设计实用教程.化学工业出版社,2007.1
八.致谢
这次课程设计,首先要感谢我们组的每一位成员。感谢组长全瑞给予我锻炼的机会,把绘制电路部分交给我;感谢景存和安荣给予的帮助。此外,还要感谢513实验室的晓明师兄在刻板方面给予的建议和指导,感谢老师给予我们这次锻炼工程设计和实践动手能力的机会。
由于时间原因,我们的作品还有很多可以完善的地方,但整个过程我们受益匪浅。负责硬件方面的工作让我真切感受到硬件的制作要不断积累经验,硬件制作得好,对于软件调试有重要意义,能减少不少问题。
另外,我必须感谢一直以来给予我帮助和支持的老师、师兄和同学。无论是在课程方面还是在实验室的电子制作方面,他们都给予了我不少建议和引导。在实验室参与电子方面的制作和比赛的一年里,学到了很多知识,也提高了自己的实践动手能力和独立思考能力。运用在实验室接触到的知识和课堂所学知识,我才得以顺利完成此次课程设计的任务。最后,要感谢学院给予我们提高综合应用理论知识解决实际问题的学习平台。