收藏 分销(赏)

温度测量显示电路设计.doc

上传人:精**** 文档编号:2197532 上传时间:2024-05-22 格式:DOC 页数:31 大小:352.54KB 下载积分:12 金币
下载 相关 举报
温度测量显示电路设计.doc_第1页
第1页 / 共31页
温度测量显示电路设计.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
温度测量显示电路设计.doc ———————————————————————————————— 作者: ———————————————————————————————— 日期: 2 个人收集整理 勿做商业用途 目 录 一 摘要......................................................1 二 设计目的与意义.............................................1 三 方案论证与确定.............................................2 3。1系统方案的确定..................................................2 3.2传感器方案的确定...............................................。3 3.3测量显示方案的确定..............................................3 四 系统工作原理分析...........................................4 五 电路制作与调试..........................................10 六 附录...................................................16 七 参考文献...............................................27 一.摘 要 在现今科技高速发展的时代,各行各业对控制和测量的要求越来越高,其中,温度测量和控制在很多行业中都有比较重要的应用,尤其在工业上,如炼钢时对温度高低的控制。要控制好温度,测量是前提,测量的精度影响着后续工序的进行,因此温度测量的方法和选取就显得相当重要了。 针对各种温度测量方案的讨论分析后,我们组决定以AT89S52为核心,采用DS18B20温度传感器进行温度信号的检测,并通过LCD液晶显示测量所得温度,外加红外遥控调节设置温度测量的上下限数值(默认温度上下限为10℃~24℃),在所测温度到达所设上下限数值时,蜂鸣器启动报警提示. 本报告是我们组所设计的数字温度计的说明书,包括方案论证选取、工作原理、所用元件介绍和设计电路原理图、调试程序等。 二. 设计目的与意义 随着电子技术的高速发展,对电子方面人才的要求越来越高,不仅要求其具备相关的专业理论知识,还要求其具有较强的设计、制作等实践动手能力。此次课程设计无疑是对从事测控专业的人的一次很好的锻炼和考验,是培养测控技术的人才的一次良好的机会,为其提供了一个理论知识与实践相结合的平台。通过本次课程设计,引导学生结合所学的测控电路理论知识,思考设计方案,以小组合作方式,分工完成各个部分,从而掌握相关的测量显示电路的设计和调试技术,一方面提高了学生的实践动手和协作能力,另一方面培养了学生综合运用所学理论知识进行工程设计的能力。 通过此次课程设计,可以培养学生的工程设计能力,包括动手能力、独立思考设计能力、解决实际设计过程中遇到的问题以及团队协作能力等,为今后的专业学习和工程实践打下坚实的基础. 三. 方案论证与确定 3。1系统方案的确定 3.1.1方案一 该方案利用AVR单片机对输入信号进行模数转换输出数字信号控制数码管显示温度值。并且可以通过编写程序对输入信号进行分段线性化处理,使得测量精度大大提高,而且该电路无须外接译码器,结构简单。 工作框图如图1所示: 图1 方案一工作框图 3。1。2方案二 该方案以AT89S52为控制器,采用DS18B20温度传感器检测温度信号,利用红外遥控设置温度测量的上下限数值,并通过LCD液晶显示。 工作框图如图2所示: 图2 方案二工作框图 经过综合研究分析,考虑整个设计和成本,方案三成本低,测量温度方便简单,故此次数字温度计课程设计选取方案三。 3。2传感器方案的确定 3。2。1方案一 该方案采用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单片机进行数据处理、译码、显示、报警等, 系统框图如图3所示: 图3 系统框图 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个全双工串行通信口,看门狗电路,片内时钟振荡器。 单片机引脚如图4所示: 图4 单片机引脚图 4。2传感器原理 4。2。1DS18B20简介 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。 DS18B20元件图如图5所示: DS18B20的性能特点如下: ●独特的单线接口仅需要一个端口引脚进行通信; ●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件; ●可通过数据线供电,电压范围为3。0~5。5V; ●零待机功耗; ●温度以9或12位数字; ●用户可定义报警设置; ●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 图5 DS18B20元件图 ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 4.2.2DS18B20内部结构 DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图所示. C 64 位 ROM 和 单 线 接 口 高速缓存 存储器与控制逻辑 温度传感器 高温触发器TH 低温触发器TL 配置寄存器 8位CRC发生器 Vdd 64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。 DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图7所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3所示.低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。 温度 LSB 温度 MSB TH用户字节1 TL用户字节2 配置寄存器 保留 保留 保留 CRC 图7 DS18B20字定义 由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。 表1 DS18B20温度转换时间表 高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1.第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。 当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节.单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。 当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。 温度/℃ 二进制表示 十六进制表示 +125 0000 0111 1101 0000 07D0H +85 0000 0101 0101 0000 0550H +25.0625 0000 0001 1001 0000 0191H +10.125 0000 0000 1010 0001 00A2H +0。5 0000 0000 0000 0010 0008H 0 0000 0000 0000 1000 0000H —0.5 1111 1111 1111 0000 FFF8H —10。125 1111 1111 0101 1110 FF5EH —25。0625 1111 1110 0110 1111 FE6FH -55 1111 1100 1001 0000 FC90H 表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,表示温度较热,开蜂鸣器; 遥控远程控制,改变上下限报警温度。 主程序流程图如图8所示: 开始 温度读取 数值送显示 判定按键 摄氏变华氏 < 10度 开黄灯报警 > 24度 遥控信号 初始化 开绿灯报警 改变上下限温度 是 否 是 是 否 否 图8 主程序流程图 5.2。2子程序流程 DS18B20工作流程图如图9所示; 计算温度流程图如图10、图11所示; 温度读取流程图如图12所示. Y 发DS18B20复位命令 发跳过ROM命令 发读取温度命令 读取操作,CRC校验 9字节完? CRC校验正?确? 移入温度暂存器 结束  N N Y 初始化 调用显示子程序 0.5 S到? 初次上电 读出温度值温度计算处理显示数据刷新 发温度转换开始命令 N Y N Y 图9 DS18B20工作流程图 开始 温度零下? 温度值取补码置“—”标志 计算小数位温度BCD值 计算整数位温度BCD值 结束 置“+”标志 N Y 图10 计算温度流程图 温度数据移入显示寄存器 十位数0? 百位数0? 十位数显示符号百位数不显示 百位数显示数据(不显示符号) 结束 N N Y Y 图11 显示数据刷新流程图 图12 温度读取流程图 温度读取程序开始 复位DS18B20,等待大于480us 发送避开ROM信息指令 发送转换命令,开始转换 延时等待转换完成 发送读取指令 开始读取温度,保存 温度进制处理,化为十进制 温度读取程序结束 六. 附录 6。1课程设计心得体会 本次课程设计,我们组成功完成了数字温度计的设计、制作与调试。三天的时间里,我们分工合作,组长全瑞负责写程序,我和景存负责电路部分(主要绘制电路、焊接电路),安荣负责刻板、包装。最后的调试工作我们共同参与,遇到了不少问题,大家从电路、程序中寻找出错的原因(负责检查自己负责的那部分,并作相应修改),经过讨论、思考找到解决的方法,使得最终用程序调试电路显示成功。 在这里,很感谢与我共同奋斗的我们组的成员,尤其是景存,在我绘制电路原理图和PCB图时给予我很多帮助.这次课程设计,我尝试用Protel DXP绘制电路图,因为我们在讨论方案是确定了电路制作方面采用刻板方式。虽然以前有学过Protel 99,但从未接触过DXP,所以还是去图书馆借了相关的书籍,边学边绘制。这次用DXP而不用99,主要是考虑到对以后学习FPGA等会有更大的帮助。 绘制电路图的过程中,的确遇到了不少问题。虽然这次设计的电路并不复杂,(主要由单片机最小系统、DS18B20测温电路、液晶显示电路、红外遥控电路、报警电路和供电电路组成),但里面的元件查找和封装很繁琐,导入PCB后有些封装太大,要做相应的替换。通过这次绘制电路,认识了不少元件的各种封装,更学会了刻板时用到的相关参数的设置,例如焊盘、布线等参数的设置。因为是第一次刻板,在设置这些参数时还请教了我们513实验室的师兄,在这里非常感谢他们给予的帮助。导入PCB后,更头痛的是布局.刚开始尝试用自动布局功能,但是出来的效果不是很理想,有不少跳线,所以还是用手动布局。对应着电路原理图,初步调整元件的位置,在尽量避免线路的交叉。在布局过程中,景存和我一起思考讨论布局方案,可是第一次自动布线后,还是有不少跳线.我们研究自动布线时线路的走向,讨论怎样移动一下元件的位置能让这里的跳线消除,让线路有空间绕过去而不必跳线。另外结合刻板的实际(例如雕刻机的刀有些钝),线的大小和焊盘孔径的大小的修改也相当考验我。当安荣把第一块板刻出来时,发现线太细,有些几乎要断了,孔径太小,根本无法钻孔。就这样,我结合师兄给予的建议和实际出来的效果修改了相关参数,最后终于有所成效。文档为个人收集整理,来源于网络文档为个人收集整理,来源于网络 出来自己负责的绘制电路原理图和PCB图外,我还学会了雕刻电路板(例如如 何定位雕刻刀、如何调整进刀的大小等),在电路调试中更是深有感慨。一个作品无论大小、复杂或简单,在软硬件相结合的过程中总会出现一些问题,要我们去调试,去检查,才能使结果更精确。而且调试时让我着实体会到前期电路制作部分很重要,电路制作得好,会减少调试中出现问题的可能性. 这次课程设计我受益匪浅,也是进实验室以来的又一次不错的经历.团队协作做出来的作品,每一部分都不可或缺,既要分工又要合作,这样才能有更佳的效果。 6。2系统电路原理图 6.5程序代码 ************************************LCD1602模块**********************************************/ #include <reg52。h〉 #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<ms;i++) for(j=0;j〈120;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){ 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<8;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延迟子函数(晶振12MHz )*********************************/ 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; //拉高总线 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; 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)|(a>>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,用于解码延时 { 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(temp〈c(8500) || temp〉c(9500)) goto restart;//引导脉冲低电平9000 temp=Ir_Get_High(); if(temp〈c(4000) || temp〉c(5000)) goto restart;//引导脉冲高电平4500 for(i=0;i<4;i++) //4个字节 for(j=0;j〈8;j++) //每个字节8位 { temp=Ir_Get_Low(); if(temp<c(200) || temp>c(800)) goto restart; temp=Ir_Get_High(); if(temp〈c(200) || temp>c(2000)) goto restart; Ir_Buf[i]>>=1; if(temp>c(1120)) Ir_Buf[i]|=0x80; } return Ir_Buf[2]&0x0f; //所得码 } /*********************************时钟模块****************************************/ 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 <= minTX) { 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; } } } 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]="min:10”; char maxT[7]="max:24"; 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);
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服