数字显示温度计程序
单片机基于stm32的数字温度计设计

单片机基于stm32的数字温度计设计
数字温度计是一种用于测量环境温度的设备。
在这个问题中,我们将使用基于STM32的单片机来设计一个数字温度计。
为了设计这个温度计,我们需要以下组件和步骤:
1. STM32单片机:STM32是一种基于ARM架构的单片机,它具有强大的计算能力和丰富的外设接口,适用于各种应用。
2. 温度传感器:我们需要选择一种适合的温度传感器,常用的有数字式温度传感器,如DS18B20。
3. 连接电路:将温度传感器连接到STM32单片机。
这通常需要使用一些电子元件,如电阻、电容和连接线等来建立电路连接。
4. 编程:使用适合STM32单片机的编程语言,如C语言,来编写程序。
程序将读取温度传感器的数据,并将其转换为数字值。
5. 温度显示:将温度数据显示在合适的显示设备上,如LCD显示屏或七段数码管。
可以使用STM32单片机的GPIO口控制这些显示设备。
6. 数据处理:可以对温度数据进行进一步处理,如计算平均温度、设定警报阈值等。
以上是一个基本的数字温度计设计的流程。
具体的实现细节和代码编写可能需要根据具体的硬件和软件平台进行调整。
DS18B20数字温度计C程序(能显示负温)

DS18B20数字温度计C程序(能显示负温)DS18B20数字温度计C程序(能显示负温)//***********DS18B20数字温度计C程序****************// //*MCU: AT892051 ////*MCU-crystal: 12M ////*Version: 01 ////*Last Updata: 2007-6-10 ////*Author: zhaojun ////*Description: ////DS18B20的读写程序,数据脚P3.4 ////温度传感器18B20汇编程序,采用器件默认的12位转化 // //最大转化时间750微秒,显示温度-55到+125度,显示精度 // //为0.1度,显示采用4位LED共阳显示测温值 ////P1口为段码输入,P0~P3为位选 ///***************************************************/#include "reg51.h"#include "intrins.h" //_nop_();延时函数用#define Disdata P1 //段码输出口#define discan P3 //扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P3^4; //温度输入口sbit DIN=P1^7; //LED小数点控制uint h;uint temp;//////**************温度小数部分用查表法***********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0 x07,0x08,0x08,0x09,0x09};//uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0 xff,0xbf};//共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //列扫描控制字uchar data temp_data[2]={0x00,0x00}; //读出温度暂放uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用///////*****************11us延时函数*************************///void delay(uint t){for (;t>0;t--);}///****************显示扫描函数***************************/scan(){char k;for(k=0;k<4;k++) //4位LED扫描控制Disdata=dis_7[display[k]]; //数据显示if (k==1){DIN=0;} //小数点显示discan=scan_con[k]; //位选delay(300);}}/////****************DS18B20复位函数************************/ ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;delay(50); //550 usDQ=1;delay(6); //66 uspresence=DQ; //presence=0 复位成功,继续下一步}delay(45); //延时500 uspresence=~DQ;}DQ=1; //拉高电平}///****************DS18B20写命令函数************************/ //向1-WIRE 总线上写1个字节void write_byte(uchar val){uchar i;for(i=8;i>0;i--){DQ=1;_nop_();_nop_(); //从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 usDQ=val&0x01; //最低位移出delay(6); //66 usval=val/2; //右移1位}DQ=1;delay(1);}///****************DS18B20读1字节函数************************///从总线上取1个字节uchar read_byte(void){uchar i;uchar value=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 usDQ=1;_nop_();_nop_();_nop_();_nop_(); //4 usif(DQ)value|=0x80;delay(6); //66 us}DQ=1;return(value);}///****************读出温度函数************************///read_temp(){ow_reset(); //总线复位delay(200);write_byte(0xcc); //发命令write_byte(0x44); //发转换命令ow_reset();delay(1);write_byte(0xcc); //发命令write_byte(0xbe);temp_data[0]=read_byte(); //读温度值的第字节temp_data[1]=read_byte(); //读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0]; // 两字节合成一个整型变量。
单片机的数字温度计设计方案(附代码与仿真)

基于STC89C52的数字温度计目录1、简介....... .......... ..... 3 _ _2、计划选择2.1。
主控片选 (3)2.2.显示模块.............................. (3)2.3、温度检测模块………………………………… .. 43、系统硬件设计3.1。
51单片机最小系统设计………………………… .4 .电源电路设计…………………… .. 5.液晶显示电路设计……………………………… ..63.4.温度检测电路设计………… . . . 74.系统软件设计4.1。
温度传感器数据读取流程图......... .. (9)4.2.系统编程………………… .105. 编程与仿真5.1、Keil编程软件………………… .. .. 115.2.变形杆菌 (11)5.3.模拟界面……………………… ..116.总结........ .......... ........ 12 _ _ _ _ _七、附录附录 1. 原理图........ .......... (12)附录 2. 程序清单…………………………………………………………………… ..131 简介进入信息飞速发展的21世纪,科学技术的发展日新月异。
科学技术的进步带动了测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。
我们已经进入高速发展的信息时代,测量技术也成为当今技术的主流,已经渗透到研究和应用工程的各个领域。
温度与人们的生活息息相关,温度的测量变得非常重要。
2.系统方案选择2.1 主控芯片选型方案一:STC89C52RCSTC89C52RC是8051内核的ISP在线可编程芯片,最高工作时钟频率为80MHz,芯片内含8KB Flash ROM,可反复擦写1000次。
该器件兼容MCS-51指令系统和8051引脚结构。
该芯片集成了通用8位中央处理器和ISP Flash存储单元,具有在线可编程特性,在PC端有控制程序,用户程序代码可下载到单片机部门,无需购买通用编程器,速度更快。
C51单片机数字温度计汇编程序及说明书

1绪论1.1选题背景随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学试验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。
现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计。
这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确等优点,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
因此本课题就尝试通过编程与芯片的结合来解决传统数字温度计的弊端,设计出新型数字温度计。
1.2课题现状分析及研究意义温度传感器的发展现状:温度传感器使用范围广,数量多,居各种传感器之首,其发展大致经历了以下3个阶段:①传统的分立式温度传感器(含敏感元件)——热电偶传感器,主要是能够进行非电量和电量之间转换。
②模拟集成温度传感器/控制器。
集成传感器是采用硅半导体集成工艺制成的,因此亦称硅传感器或单片集成温度传感器。
③智能温度传感器。
它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。
智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。
本课题的研究可以应用领域生产、生活等很多领域。
对于家用电器从洗衣机、微波炉到音响等等到处都可以用到温度控制器来方便大家的日常生活。
开发此产品后也可方便应用安装在小至家庭大到工厂车间,小至一个芯片大到一个机械设备。
例如在家庭客厅卧室等必要地方显示室温,可防止家里食物是否变质及早采取措施。
18B20温度传感器温度计程序

18B20温度传感器温度计程序2008-9-261.实验任务本实验实现的是通过18B20温度传感器读回温度并在6位数码管上显示。
精度为,范围为2.实验目的学会使用单片机控制18B20此类单总线器件。
原理及引脚介绍DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20产品的特点(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。
C到+125。
C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
TO-92封装的DS18B20的引脚排列见下图,其引脚功能描述见下:1.GND地信号2.DQ数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也能够向器件提供电源。
3.VDD可选择的VDD引脚。
当工作于寄生电源时,此引脚必需接地。
18B20管脚图4.实验原理图实验原理图5. 18B20操纵命令字指令说明读ROM(33H) 读18B20的序列号匹配ROM(55H) 继续读完64位序列号的命令,用于多个18B20时定位跳过ROM(CCH) 此命令执行后的在存储器打操作针对在线所有18B20 搜ROM(F0H) 识别总线上各器件的编码,为操作各器件做准备报警搜索(ECH) 公温度越限的器件对此命令作出响应指令说明温度转换(44H) 启动在线18B20做温度AD转换读数据(BEH) 从高速暂存器读9位温度值和CRC值写数据(4EH) 将数据写入高速暂存的第3和第4字节中复制(48H) 将高速暂存器中第3和第4字节复制到EERAM读EERAM(B8H) 将EERAM内容写入高速暂存器中第3和第4字节读电源供电方式(B4H) 了解18B20的供电方式6. 实验源程序WENDU_L EQU 29H;用于保留读出温度的低字节WENDU_H EQU 28H;用于保留读出温度的高字节XIAOSHU EQU 27H;用于保留温度的小数部份ZHENGSHU EQU 26H;用于保留整数部份BIAOZHI BIT 50H;18B20检查位1为存在,0为不存在ORG 0000HAJMP MAINORG 0030HMAIN:MOV SCON,#00HACALL DUWENACALL ZHENGHEACALL BCDACALL DISPACALL TIME1AJMP MAIN;---------------------------------------------------------------------------------------------------------------------------------------- ;读温度子程序;---------------------------------------------------------------------------------------------------------------------------------------- DUWEN:SETBACALL FUWEI ;读温度之前必需先复位JB BIAOZHI,CUNZAI;查看标志位看18B20是不是存在,1为存在,0为不存在RET ;不存在那么返回CUNZAI: ;存在那么开始读温度MOV A,#0CCH ;跳过ROM匹配ACALL XIE ;调写子程序MOV A,#44H ;发出温度转换命令ACALL XIE ;调写子程序ACALL TIME1 ;调1秒延时,等等AD转换完成,此刻分辨率为12位,温度最大转换时刻为750MSACALL FUWEI ;读温前需要复位MOV A,#0CCH ;跳过ROM匹配ACALL XIEMOV A,#0BEH ;发读温度命令ACALL XIEACALL DUSHU ;将闱出数据读回CLRRET;------------------------------------------------------------------------------------------------------------------------------;复位子程序;18B20复位需要将数据位拉低500us;18B20收到信号后要等待16-60us,然后发出60-240us的低脉冲;------------------------------------------------------------------------------------------------------------------------------- FUWEI:SETBNOPCLRMOV R0,#3INTE:MOV R1,#107 ;设一个537us延时KK1: DJNZ R1,KK1DJNZ R0,INTESETB ;拉高数据线,等待回应NOPNOPNOPMOV R0,#25 ;INTE1:JNB ,INTE2 ;延时延时50us等待18B20回应,假设返回低脉冲那么说明18B20存在DJNZ R0 ,INTE1AJMP INTE3 ;通过反映时刻而没检测到18B20的存在,那么跳转去清零标志位INTE2:SETB BIAOZHI ;检测到18B20存在,置1标志位CLRAJMP INTE4INTE3:CLR BIAOZHI ;没检测到18B20,清零标志位AJMP INTE5INTE4:MOV R0,#120 ;延时240us,确定回应信号已发完KK: DJNZ R0,KKINTE5:SETBRET;---------------------------------------------------------------------------------------------------------------------------------------- ;写18B20子程序;----------------------------------------------------------------------------------------------------------------------------------------- XIE:MOV R2,#8 ;写计数寄放器,一共有8位数据CLR CLP:CLRMOV R3,#6 ;设一个延时LL1:DJNZ R3,LL1RRC A ;右循环,先输出低位MOV ,CMOV R3,#23 ;设延时LL: DJNZ R3,LL ;SETBNOPNOPDJNZ R2,LP ;判定是不是完成数据传送SETB ;完成传送拉高数据位RET;----------------------------------------------------------------------------------------------------------------------------------------- ;从18B20中读出温度数据子程序;-----------------------------------------------------------------------------------------------------------------------------------------DUSHU:MOV R4,#2 ;设读回数据个数指针MOV R1,#WENDU_L ;把温度数据低位存入29HRE: MOV R2,#8 ;设数据长度指针RE1: CLR CSETBNOPNOP CLRNOPNOPNOPSETBMOV R3,#9 DJNZ R3,$ MOV C, MOV R3,#23NN: DJNZ R3,NNRRC ADJNZ R2,RE1MOV @R1,A DEC R1 ;高位存入28H DJNZ R4,RERET;---------------------------------------------------------------------------------------------------------------------------------;数据整合子程序;温度源数据的整合,读出数据的高字节的低四位决定温度的整数部份;低字节的低四位决定小数部份;----------------------------------------------------------------------------------------------------------------------------- ZHENGHE:MOV A,#0FHANL A,WENDU_L ;低字节的低四位就是小数部分MOV XIAOSHU,A ;取得小数部份MOV A,WENDU_L ;将高字节的低四位移入低字节的高4位,MOV C,40H ;获得的新字节就是整数部分的数据RRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV ZHENGSHU,ARET;----------------------------------------------------------------------------------------------------------------------------------------- ;显示数据拆解程序、显示程序、延时程序;----------------------------------------------------------------------------------------------------------------------------------------;数据拆解程序BCD:MOV A,ZHENGSHU MOV B,#10DIV ABMOV 50H,AMOV 51H,BMOV A,XIAOSHUMOV R0,#52HMOV R2,#4D0:MOV B,#10MUL ABMOV B,#16DIV ABMOV @R0,AINC R0MOV A,BDJNZ R2,D0RET ;----------------------------------- ;显示程序;---------------------------------- DISP:ACALL TIMEMOV R7,#6MOV DPTR,#TABMOV R0,#55HLP1:MOV A ,@R0;MOVC A,@A+DPTRCJNE R7,#2,NE1ANL A,#07FHNE1:MOV SBUF,AJNB TI ,$CLR TIDEC R0DJNZ R7,LP1RET;---------------------------------------- ;延时程序;---------------------------------------- TIME1:MOV R6,#4LOOP2:MOV R5,#250LOOP1:ACALL D1MSDJNZ R5,LOOP1DJNZ R6,LOOP2RETTIME:MOV R6,#200LOOP3:ACALL D1MSDJNZ R6,LOOP3RETD1MS:MOV R7,#250LOOP0:NOPNOPNOPDJNZ R7,LOOP0RETTAB:DB 0C0H,0F9H,0A4H,0B0H DB 99H, 92H, 82H, 0F8HDB 80H, 90H, 88H, 83HDB 0C6H,0A1H,86H, 8EHDB 0FFHEND。
数字温度指示仪表检定操作规程

目的:本规程规定了数字温度指示调节仪表检定程序。
责任:由工程部制订、审核,质量保证部批准并颁发,工程部计量室执行。
范围:本规程适用于与热电偶或热电阻配用,并具有模拟—数字转换的数字温度指示及指示调节仪的检定。
定义:被检仪表是一个由与热电偶或热电阻配用用以测量温度,辅以相应的执行机构组成的温度控制系统。
内容:1. 计量器具检定的技术要求1.1外观1.2绝缘电阻当环境温度为15℃—35℃,相对湿度为45—75%时,仪表输入端子与仪表外壳、电源端子与仪表外壳、输入端子与电源端子间的绝缘电阻均不应小于20兆欧。
1.3指示基本误差仪表的基本误差采用含有准确度等级的表达方法Δ=±α%F*S式中:Δ—允许基本误差;α—准确度等级; F*S---仪表的量程1.4分辨力修理后的仪表必须进行该项检定,且符合该仪表的要求。
1.5稳定度误差稳定度误差的显示值波动量不大于其分辨力。
短时间示值漂移,1小时内不大于允许基本误差的四分之一。
2. 检定条件2.1检定用的标准设备:选用SR501标准直流电压信号源,其精度为0.001级;0—50℃二等标准水银温度计;0.01级直流电阻箱;补偿导线;分辨率为0.1秒,误差小于±1秒/天的秒表;兆欧表;220伏、1千瓦交流稳压电源一台。
2.2环境条件:环境温度:20±5℃,相对湿度:45—75%除地磁场外,在仪表周围应无其它外磁场的影响存在。
3. 检定的项目及检定方法3.1外观检查:参照本规程第二条3.2绝缘电阻的检定:仪表电源开关处于接通位置(外电源应切断),用导线将电源端子及信号端子分别短接,用兆欧表进行测量,绝缘电阻应不小于20兆欧。
3.3通电项目检定铜导线铜导线℃。
检定点的选择不低于5点,一般应选择包括上下限在内的,原则上均匀的整十或整百摄氏度点。
用增加输入信号的办法,找出各被检测点附近转换点的值,直至上限:然后减少输入信号进行下行程的检定,找出各被检测点附近转换点的值直至下限值。
jjg 76数字温度计检定规程

jjg 76数字温度计检定规程第一章总则第一条为了保证数字温度计的准确性和可靠性,规范数字温度计的检定工作,根据国家有关法律法规和标准,制定本规程。
第二条本规程适用于数字温度计的检定工作,包括固定式和便携式数字温度计。
第三条数字温度计的检定应符合国家有关法律法规和标准的要求,确保检定结果准确可靠。
第四条数字温度计的检定应由具备相应资质的检定机构进行,并在检定报告中标明检定机构的名称、地址以及检定人员的姓名。
第五条数字温度计的检定应按照国家有关标准的要求进行,包括检定方法、检定装置和检定环境等。
第二章检定要求第六条数字温度计的检定应在恒定的环境条件下进行,确保检定结果的准确性。
温度计的检定环境应符合国家有关标准的要求。
第七条数字温度计的检定应使用具有合法计量认证的标准温度计进行,确保标准温度计的准确性。
第八条数字温度计的检定应按照国家有关标准的要求进行,包括温度计的测量范围、分度值和测量不确定度等。
第九条数字温度计的检定应在规定的温度范围内进行,确保检定结果的可靠性。
第十条数字温度计的检定应按照国家有关标准的要求进行,包括温度计的静态特性、动态特性和线性度等。
第十一条数字温度计的检定应记录检定结果,并填写检定报告,确保检定结果的可追溯性。
第三章检定程序第十二条数字温度计的检定程序包括准备工作、检定操作、检定结果处理和检定报告编制等。
第十三条准备工作包括检定环境的准备、标准温度计的准备以及数字温度计的准备等。
第十四条检定操作包括测量温度、调整温度、记录数据等。
第十五条检定结果处理包括数据处理、不确定度评定等。
第十六条检定报告编制包括填写检定报告、打印检定报告等。
第四章质量保证第十七条数字温度计的检定机构应建立和实施质量保证体系,确保检定工作符合国家有关标准的要求。
第十八条数字温度计的检定机构应定期进行内部审核和管理评审,确保质量保证体系的有效性。
第十九条数字温度计的检定机构应参加相关的国家和行业组织组织的检定能力评定,确保检定能力的合格性。
单片机课程设计方案—数字温度计

1 课题任务、功能要求说明及总体方案介绍1.1 课题目的随着社会的发展,温度的测量及控制变得越来越重要。
本文采用单片机STC89S52设计了温度实时测量及控制系统。
单片机STC89S52 能够根据温度传感器DS18B20 所采集的温度在数码管上实时显示,通过控制从而把温度控制在设定的范围之内。
所有温度数据均通过4位数码管LED显示出来。
系统可以根据时钟存储相关的数据。
通过该课程的学习使我们对计算机控制系统有一个全面的了解、掌握常规控制算法的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能力。
1.2 功能要求说明设计一个具有特定功能的数字温度计。
该数字温度计上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
测量温度范围0℃~99℃,测量精度小数点后两位,可以通过开始和结束键控制数字温度计的工作状态。
1.3 设计课题总体方案介绍及工作原理说明1.3.1设计课题总体方案(1>根据设计要求,选择AT89C52单片机为核心器件。
(2>温度检测器件采用DS18B20数字式温度传感器。
与单片机的接口为P3.6引脚。
(3>键盘采用独立式按键,由三个按键组成,分别是:设置键<SET),加一建<+1),确认键<RET)。
(4>SET键<上下限温度设置键):当该键按下时,进入上下限温度设置功能。
通过P0.1引脚接入。
(5>+1键<加一调整键):在输入上下限温度时,该键按下一次,被调整位加一。
通过P0.2引脚接入。
(6>RET键<确认键):当该键按下时,指向下一个要调整的位。
通过P0.3引脚接入。
1.3.2 工作原理说明本课题以是80S52单片机为核心设计的一种数字温度控制系统,利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报警限比较,超过限度后通过扬声器报警。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TIMEL EQU 0E0HTIMEH EQU 0B1HTEMPHEAD EQU 36H;*********************************************************** ; 工作内存定义;*********************************************************** BITST DATA 20HTIME1SOK BIT BITST.1TEMPONEOK BIT BITST.2TEMPL DATA 26HTEMPH DATA 27HTEMPHC DATA 28HTEMPLC DATA 29H;********************************************************** ; 引脚定义;********************************************************** TEMPDIN BIT P3.4TH BIT P1.3TL BIT P1.4;*********************************************************** ; 中断向量区;*********************************************************** ORG 0000HLJMP STARTORG 00BHLJMP T0IT;************************************************************ ; 系统初始化;************************************************************ ORG 0100HSTART: MOV SP,#60HCLSMEM: MOV R0,#20HMOV R1,#60HCLSMEM1: MOV @R0,#00HINC R0DJNZ R1,CLSMEM1MOV TMOD,#00100001BMOV TH0,#TIMEHMOV TL0,#TIMELSJMP INITERROR: NOPLJMP STARTNOPINIT: NOPSETB ET0SETB TR0SETB EAMOV PSW,#00HCLR TEMPONEOKMOV 80H,#00HMOV 79H,#28HMOV 78H,#0BHMOV 77H,#01HMOV P1,#00HLJMP MAIN;************************************************************ ; 定时器0中断程序;************************************************************ T0IT: PUSH PSWMOV PSW,#10HMOV TH0,#TIMEHMOV TL0,#TIMELINC R7CJNE R7,#32H,TOIT1MOV R7,#00HSETB TIME1SOKTOIT1: POP PSWRETI;************************************************************ ; 主程序;************************************************************ MAIN: LCALL DISP1JNB TIME1SOK,MAINCLR TIME1SOKJNB TEMPONEOK,MAIN2LCALL READTEMP1LCALL CONVTEMPLCALL DISPBCDLCALL DISP1MAIN2: LCALL READTEMPSETB TEMPONEOKLCALL KEYLCALL SHENGJIANGLCALL SHENGJIANG1LJMP MAIN;********************************; 数值比较子程序;********************************SHENGJIANG:CLR CCLR THMOV A,#0AHCJNE A,73H,MANMOV A,#0AHCJNE A,72H,MAN4LJMP MAN1MAN4: JNC MAN2LJMP SSMAN: JNC MAN2 ;C=0 跳转 LJMP SSMAN3: CLR CMOV A,80HANL A,#0FHCJNE A,73H,MAXMAN2: CLR CMOV A,79HSWAP AANL A,#0FHCJNE A,72H,MAXMAN1: CLR CMOV A,79HANL A,#0FHCJNE A,71H,MAXCLR THJMP SSMAX: JC BJCLR THJMP SSBJ: SETB THLCALL DELAY10retSS: RET;****************************** SHENGJIANG1:CLR CCLR TLMOV A,78HANL A,#0FHCJNE A,73H,MAX1CLR CMOV A,77HSWAP AANL A,#0FHCJNE A,72H,MAX1CLR CMOV A,77HANL A,#0FHSUBB A,71HCJNE A,71H,MAX1JC BJCLR TLJMP SSMAX1: JC BJ1CLR TLJMP SS1BJ1: setb TLLCALL DELAY10retSS1: RETDELAY10: MOV R5,#200DEL:MOV R6,#123NOPDJNZ R6,$DJNZ R5,DELRET;******************************** ; 按键;********************************KEY: MOV P1,#0E7HKEY0: JB P1.0, KEE ;设置MOV 75H,#01HCALL D10MSJNB P1.0,$KKK: MOV A,80H ;上限ANL A,#0FHMOV 73H,AMOV A,79HSWAP AANL A,#0FHMOV 72H,AMOV A,79HANL A,#0FHMOV 71H,AMOV A,#00HANL A,#0FHMOV 70H,ALCALL DISP1LCALL KEY1JB P1.0,KKKMOV 75H,#01HCALL D10MSJNB P1.0,$KYY: MOV A,78H ;下限ANL A,#0FHMOV 73H,AMOV A,77HSWAP AANL A,#0FHMOV 72H,AMOV A,77HANL A,#0FHMOV 71H,AMOV A,#00HANL A,#0FHMOV 70H,ALCALL DISP1LCALL KEEY1JB P1.0,KYYMOV 75H,#01HCALL D10MSJNB P1.0,$KEE: MOV P1,#00HRET;KEY1: JB P1.1,KEY2 ;加CALL D10MSJNB P1.1,$CLR CMOV 75H,#01HMOV A,79HADDC A,75HDA AMOV 79H,AJNC LSMOV A,80HADDC A,#00HDA AMOV 80H,ALS: JMP KYKKKEY2: JB P1.2,KYKK ;减CALL D10MSJNB P1.2,$CLR CMOV 75H,#01HMOV A,79HSUBB A,75HMOV 76H,ACJNE A,#00H,LSASMOV A,#09HORL A,#09HLSAS: MOV 79H,AJNC LSSMOV A,80HSUBB A,#00HDA AMOV 80H,ALSS: JMP KYKKKYKK: RET;KEEY1: JB P1.2,KEEY2 ;加CALL D10MSJNB P1.2,$CLR CMOV 75H,#01HMOV A,77HADDC A,75HDA AMOV 77H,AJNC LS1MOV A,78HADDC A,#00HDA AMOV 78H,ALS1: JMP KYKKKEEY2: JB P1.1,KYKKK ;减CALL D10MSJNB P1.1,$MOV 75H,#01HMOV A,76HSUBB A,75HMOV 76H,AJMP KYKKKKYKKK: RET;***************************; 子程序区;***************************; RESET DS18B20;***************************INITDS1820:SETB TEMPDINNOPNOPCLR TEMPDINMOV R6,#0A0HDJNZ R6,$MOV R6,#0A0HDJNZ R6,$SETB TEMPDINMOV R6,#32HDJNZ R6,$MOV R6,#3CHLOOP1820: MOV C,TEMPDINJC INITDS1820OUTDJNZ R6,LOOP1820MOV R6,#64HDJNZ R6,$SJMP INITDS1820RET;INITDS1820OUT: SETB TEMPDINRET;;********************************;读DS18B20的程序,从DS18B20中读出一个字节的数据;**********************************READDS1820:MOV R7,#08HSETB TEMPDINNOPNOPREADDS1820LOOP: CLR TEMPDINNOPNOPNOPSETB TEMPDINMOV R6,#07HDJNZ R6,$MOV C,TEMPDINMOV R6,#3CHDJNZ R6,$RRC ASETB TEMPDINDJNZ R7,READDS1820LOOPMOV R6,#3CHDJNZ R6,$RET;;**************************************;写DS1820的程序,从DS18B20中写一个字节的数据;************************************** WRITEDS1820: MOV R7,#08HSETB TEMPDINNOPNOPWRITEDS1820LOP: CLR TEMPDINMOV R6,#07HDJNZ R6,$RRC AMOV TEMPDIN, CMOV R6,#34HDJNZ R6,$SETB TEMPDINDJNZ R7,WRITEDS1820LOPRET;*********************************************** ; READ TEMP;*********************************************** READTEMP: LCALL INITDS1820MOV A,#0CCHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV A,#44HLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$RET;READTEMP1: LCALL INITDS1820MOV A,#0CCHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV A,#0BEHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV R5,#09HMOV R0,#TEMPHEADMOV B,#00HREADTEMP2: LCALL READDS1820MOV @R0,AINC R0READTEMP21: LCALL CRC8CALDJNZ R5,READTEMP2MOV A,BJNZ READTEMPOUTMOV A,TEMPHEAD+0MOV TEMPL,AMOV A,TEMPHEAD+1MOV TEMPH,A READTEMPOUT: RET;******************************************** ; 处理温度BCD码子程序;******************************************** CONVTEMP: MOV A,TEMPHANL A,#80HJZ TEMPC1CLR CMOV A,TEMPLCPL AADD A,#01HMOV TEMPL,AMOV A,TEMPHCPL AADDC A,#00HMOV TEMPH,AMOV TEMPHC,#0BHSJMP TEMPPC11TEMPC1: MOV TEMPHC,#0AH TEMPPC11: MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FHMOV DPTR,#TEMPDOTTABMOVC A,@A+DPTRMOV TEMPLC,AMOV A,TEMPLANL A,#0F0HSWAP AMOV TEMPL,AMOV A,TEMPHANL A,#0FHSWAP AORL A,TEMPLLCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHCMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP AORL A,TEMPLCMOV TEMPLC,AMOV A,R7JZ TEMPC12ANL A,#0FHSWAP AMOV R7,AMOV A,TEMPHCANL A,#0FHORL A,R7MOV TEMPHC,ATEMPC12: RET;;*********************************************; 小数部分码表;********************************************* TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H DB 06H,07H,08H,08H,09H,09H;;*********************************************; 显示区BCD码温度值刷新子程序;*********************************************;DISPBCD: MOV A,TEMPLCANL A,#0FHMOV 70H,AMOV A,TEMPLCSWAP AANL A,#0FHMOV 71H,AMOV A,TEMPHCANL A,#0FHMOV 72H,AMOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,AMOV A,TEMPHCANL A,#0F0HCJNE A,#010H,DISPBCD0SJMP DISPBCD2DISPBCD0: MOV A,TEMPHCANL A,#0FHJNZ DISPBCD2MOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,#0AHMOV 72H,ADISPBCD2: RET;*****************************/* 显示子程序*/;*****************************;用6位LED共阳数码管显示,P1口输出段码数据,P3口作扫描控制,每个LED数码管亮1ms时间再逐位循环;DISP: MOV A,R0ANL A,#0FHMOV 71H,AMOV A,R0SWAP AANL A,#0FHMOV 72H,ADISP1: MOV R5,#01HMOV R1,#70HPLAY: MOV A,R5MOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,AMOV A,R5JNB ACC.1,LOOP5CLR P0.7LOOP5: LCALL DL1MSMOV A,R5RL AMOV R5,AINC R1JNB ACC.4,PLAYRETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;共阳段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "一" ;DL1MS: MOV R6,#2DL1: MOV R7,#16DL2: DJNZ R7,DL2DJNZ R6,DL1RETD10MS:MOV R5,#10HD1MS:MOV R4,#249DL: NOPNOPDJNZ R4,DLDJNZ R5,D1MSRET;****************************************; 单字节十六进制转BCD;****************************************HEX2BCD1: MOV B,#064HDIV ABMOV R7,AMOV A,#0AHXCH A,BDIV ABSWAP AORL A,BRET;;****************************************; CRC校验;;**************************************** CRC8CAL: PUSH ACCMOV R7,#08HCRC8LOOP1: XRL A,BRRC AMOV A,BJNC CRC8LOOP2XRL A,#18HCRC8LOOP2: RRC AMOV B,APOP ACCRR APUSH ACCDJNZ R7,CRC8LOOP1POP ACCRETEND。