51单片机 温度控制 1602显示 DS18B20读取温度

51单片机 温度控制 1602显示 DS18B20读取温度,第1张

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

sbit lcd_rs=P2^0;

sbit lcd_rw=P2^1;

sbit lcd_en=P2^2;

sbit tempt=P3^4;

uchar code disp[]="0123456789";

uchar code disp2[]="Temperature:";

uchar code disp3[]="^C";

uint u_tempt;

float f_tempt;

void delay(uint x)

{

 uint i,j;

 for(i=0;i<x;i++)

 for(j=0;j<130;j++);

}

void write_command(uchar com)

{

 lcd_rs=0;

 P0=com;

 delay(5);

 lcd_en=1;

 delay(5);

 lcd_en=0;

 delay(5);

}

void write_data(uchar date)

{

 lcd_rs=1;

 P0=date;

 delay(5);

 lcd_en=1;

 delay(5);

 lcd_en=0;

 delay(5);

}

void lcd_init()

{

 lcd_en=0;

 lcd_rw=0;

 write_command(0x38);

 write_command(0x0c);

 write_command(0x06);

 write_command(0x01);

}

void display_tempt(uint date)

{

 uchar i,j,k;

 i=date/100;

 j=date%100/10;

 k=date%100%10;

 write_command(0xc0+5);

 write_data(disp[i]);

 write_data(disp[j]);

 write_data('');

 write_data(disp[k]);

}

void reset_tempt()

{

 uint i;

 tempt=0;

 i=90;

 while(i>0)

 i--;

 tempt=1;

 i=4;

 while(i>0)

 i--;

}

bit read_bit()

{

 uint i;

 bit dat;

 tempt=0;

 i++;

 tempt=1;

 i++;

 i++;

 dat=tempt;

 i=8;

 while(i>0)

 i--;

 return dat;

}

uchar read_tempt()

{

 uchar i,j,dat;

 dat=0;

 for(i=1;i<=8;i++)

 {

 j=read_bit();

dat=(j<<7)|(dat>>1);

 }

 return dat;

}

void write_byte(uchar dat)

{

 uint i;

 uchar j;

 bit testbit;

 for(j=1;j<=8;j++)

 {

 testbit=dat&0x01; //每次写一位数据

dat=dat>>1;

if(testbit)

{

tempt=0;

i++;

tempt=1;

i=8;

while(i>0)i--;

}

else 

{

tempt=0;

i=8;

while(i>0)i--;

tempt=1;

i++;

i++;

}

 }

}

void convert_tempt()

{

 reset_tempt();

delay(1);

write_byte(0xcc);

write_byte(0x44);

}

uint get_tempt()

{

 uchar a=0,b=0;

 //uint t=0;

 reset_tempt();

 write_byte(0xcc);

 write_byte(0x44);

 reset_tempt();

 write_byte(0xcc);

 write_byte(0xbe);

 a=read_tempt();

 b=read_tempt();

 u_tempt=b;

 u_tempt<<=8;

 u_tempt=u_tempt|a;

 f_tempt=u_tempt00625; 

 u_tempt=f_tempt10;

 return u_tempt;

}

void display()

{

 uchar i,j;

 write_command(0x80+3);

 for(i=0;i<11;i++)

 {

 write_data(disp2[i]);

 }

 write_command(0xc0+10);

 for(j=0;j<2;j++)

 {

 write_data(disp3[j]);

 }

 }

 void main()

 {

 uchar i;

lcd_init();

display();

while(1)

{

convert_tempt();

for(i=0;i<10;i++)

{

display_tempt(get_tempt());

}

}

 }

;具有报警功能

LED_0 EQU  30H

LED_1  EQU  31H

LED_2  EQU  32H

ADC EQU 35H

TCNTA EQU 36H

TCNTB EQU 37H

H_TEMP EQU 38H ;温度上限

L_TEMP EQU 39H ;温度下限

FLAG BIT 00H

H_ALM BIT P30

L_ALM BIT P31

SOUND BIT P37

CLOCK BIT P24

ST  BIT  P25

EOC  BIT  P26

OE  BIT  P27

ORG  00H

SJMP START

ORG 0BH

LJMP INT_T0

ORG 1BH

LJMP INT_T1

START: MOV LED_0,#00H

MOV LED_1,#00H

MOV LED_2,#00H

MOV DPTR,#TABLE

MOV H_TEMP,#153

MOV L_TEMP,#77

MOV TMOD,#12H

MOV TH0,#245

MOV TL0,#0

MOV TH1,#(65536-1000)/256

MOV TL1,#(65536-1000)MOD 256

MOV IE,#8aH

CLR C

SETB TR0 ;为ADC0808提供时钟

WAIT: SETB H_ALM

SETB L_ALM

CLR  ST

SETB  ST

CLR  ST ;启动转换

JNB  EOC,$

SETB  OE

MOV  ADC,P1 ;读取AD转换结果

CLR  OE

MOV A,ADC

SUBB A,#77     ;判断是否低于下限

JC LALM

MOV A,H_TEMP

MOV R0,ADC

SUBB A,R0 ;判断是否高于上限

JC HALM

CLR TR1

LJMP PROC

LALM: ;低温报警

CLR L_ALM

SETB TR1

CLR FLAG

LJMP PROC

HALM:     ;高温报警

CLR H_ALM

SETB TR1

SETB FLAG

LJMP PROC

PROC: MOV  A,ADC   ;数值转换

MOV  B,#100

DIV  AB

MOV  LED_2,A

MOV  A,B

MOV  B,#10

DIV  AB

MOV  LED_1,A

MOV  LED_0,B

LCALL DISP

SJMP  WAIT

INT_T0: CPL CLOCK     ;提供ADC0808时钟

RETI

INT_T1: MOV TH1,#(65536-1000)/256

MOV TL1,#(65536-1000)MOD 256

CPL SOUND

INC TCNTA

MOV A,TCNTA

JB FLAG,I1     ;判断是高温警报还是低温警报

CJNE A,#30,RETUNE ;低温警报声

SJMP I2

I1: CJNE A,#20,RETUNE ;高温警报声

I2: MOV TCNTA,#0

INC TCNTB

MOV A,TCNTB

CJNE A,#25,RETUNE

MOV TCNTA,#0

MOV TCNTB,#0

LCALL DELAY2

RETUNE: RETI

DISP: MOV A,LED_0 ;数码显示子程序

MOVC A,@A+DPTR

CLR P23

MOV P0,A

LCALL DELAY

SETB P23

MOV A,LED_1

MOVC A,@A+DPTR

CLR P22

MOV P0,A

LCALL DELAY

SETB P22

MOV A,LED_2

MOVC A,@A+DPTR

CLR P21

MOV P0,A

LCALL DELAY

SETB P21

RET

DELAY: MOV R6,#10

D1: MOV R7,#250

DJNZ R7,$

DJNZ R6,D1

RET

DELAY2: MOV R5,#20

D2: MOV R6,#20

D3: MOV R7,#250

DJNZ R7,$

DJNZ R6,D3

DJNZ R5,D2

RET

TABLE:  DB  3FH,06H,5BH,4FH,66H

DB  6DH,7DH,07H,7FH,6FH

END

您好,制作基于单片机恒温水箱需要以下材料:

1、单片机:单片机是控制恒温水箱的核心,它可以控制水箱的温度,以及控制其他功能,如定时功能等。

2、温度传感器:温度传感器用于测量水箱内的温度,并将信息发送给单片机,以便单片机可以根据温度传感器的信息来控制水箱的温度。

3、电加热器:电加热器用于加热水箱内的水,以便达到所需的温度。

4、电机:电机用于控制水箱内的水流,以便达到恒温的效果。

5、控制电路:控制电路用于将单片机的控制信号转换为电机的控制信号,以便控制水流的方向和速度。

6、电源:电源用于为单片机、温度传感器、电加热器、电机和控制电路提供电源。

此外,还需要一些其他材料,如电缆、连接器等,以及一些工具,如电钻、剪刀等,以便将上述材料进行安装和组装。

单片机恒温烙铁的方案应该是比较简单,只要实现以下功能即可:

1、单片机:主控制器,用来检测烙铁头的温度,然后与用户调节的作对比。如果温度低于用户设定的温度,加热。反之,停止加热。

2、带温度传感器的加热烙铁头:单片机可通过温度传感器获得温度值,通过控制给烙铁头供电来打开或者关闭加热。

3、一般恒温式电烙铁都搭配有热吹风q,这个只要根据用户设定的温度进行加热就行了。

4、数码显示:用于显示用户设定温度值。

5、其他电路:变压器、开关等。

以上基本上就是恒温式电烙铁的电气器件组成了。

想要电路图,你也把要求说明白呀。

例如:恒温箱有多大,加热器件有多大功率?单相还是三相电源?恒温箱的控温范围是多少?控制精度是多少?要不要显示温度?要不要控制、设定参数?

如果你没有做过这方面的设计,少于2个月你做不完美。

如果你对电子电路不精通,对编程也不精通,就算把电路图画好给你,少于4个月你也做不完美。单一个PID模糊控制程序就够你研究一个月了。

扣扣交流:531521080

上传内容

仅供学习与参考

摘要

本检测系统硬件设计以AT89C51单片机为核心,用温度传感器DS18B20实现温度控制,用数码管显示实际温度和预设温度,制作数字温度计,并可以实现温度预警控制。

单片机系统的软件编程采用单片机汇编进行编程。应用软件采用KEIL和PROTEUS仿真软件模拟实现控制过程。

温度控制系统是基于单片机的计算机检测技术的软硬件开发和面向对象的高级可视化程序开发的有机结合。对温度控制的发展有很大的好处。如果投入生产,不仅会创造良好的经济效益,还可提高温控的简单化。

关键词 单片机;DS18B20;调节;温度

Abstract

This examination system hardware design take at89C51 monolithic integrated circuit as a core, realizes the temperature control with temperature sensor DS18B20, Demonstrates the actual temperature and the preinstall temperature with the nixie tube,manufactures the simple intelligence temperature control system - - digit thermometer,And may realize the temperature early warning control

The monolithic integrated circuit system's software programming uses the monolithic integrated circuit assembly to carry on the programming The superior machine application software uses KEIL and the PROTEUS simulation software simulation realizes the controlled process

This article develops the intelligence temperature control system is based on monolithic integrated circuit's computer examination technology software and hardware development and face the object high-level visualization procedure development organic synthesis Has the very big advantage to temperature control's development If place in operation, not only will create the good economic efficiency, but may also propose the simplification which the high temperature will control

Keywords microcontroller;DS18B20;measure;temperture

目录

摘要 I

Abstract II

第1章 绪论 4

11 温度传感器发展概述 4

12 单片机技术简介 4

13 温度检测技术的发展 5

第2章 温度传感器的选择 8

21 测温方法 8

22 DS18B20简介 9

第3章 软硬件设计 10

31 单片机的选择 10

32 温度传感器的选择 10

33 仿真软件的选择 11

34 编译软件的选择 11

35 PROTEUS 仿真电路图 12

第4章 汇编语言程序 13

41 主程序和温度值转换成显示值子程序的流程图 13

42 DS18B20温度子程序和显示子程序的流程图 14

43 汇编语言源程序 14

第1章 绪论

11 温度传感器发展概述(略)

12 单片机技术简介(略)

13 温度检测技术的发展(略)

第2章 温度传感器的选择

21 测温方法

温度是一个很重要的物理参数,钢铁的冶炼、石油的分馏、塑料的合成以

及农作物的生长等等都必须在一定的温度范围内进行,各种构件、材料的体积、电阻、强度以及抗腐蚀等物理化学性质,一般也都会随温度而变化。人们利用各种能源为人类服务,也往往是使某些介质通过一定的温度变化来实现的。所以在生产和化学试验中,人们经常会碰到温度测量的问题。

温度传感器是检测温度的器件,其种类最多,应用最广,‘发展最快。众所周知,日常使用的材料及电子元件大部分都随温度而变化,资料5中介绍了作为实用传感器必须满足的一些条件:

(1)在使用温度范围内温度特性曲线要求达到的精度能符合要求:为了能

在较宽的温度范围内进行检测,温度系数不宜过大,过大了就难以使用,但对

于狭窄的温度范围或仅仅定点的检测,其温度系数越大,检测电路也能越简单。

(2)为了将它用于电子线路的检测装置,要具有检测便捷和易于处理的特

性。随着半导体器件和信号处理技术的进步,对温度传感器所要求的输出特性

应能满足要求。

(3)特性的偏移和蠕变越小越好,互换性要好。

(4)对于温度以外的物理量不敏感。

(5)体积小,安装方便:为了能正确地测量温度,传感器的温度必须与被

测物体的温度相等。传感器体积越小,这个条件越能满足。

(6)要有较好的机械、化学及热性能。这对于使用在振动和有害气体的环

境中特别重要。

(7)无毒、安全以及价廉、维修、更换方便等。

温度测量的方法很多,根据温度传感器的使用方式,通常分为接触式测温

法与非接触式测温法两类。

(1)接触式测温法

由热平衡原理可知,两个物体接触后,经过足够长时间的热交换达到热平

衡,则它们的温度必然相等。如果其中之一为温度计,就可以用它对另一个物体实现温度测量,这种测温方式称为接触式测温法。接触式测温的优点显而易

见,它简单,可靠,测量精度高,但同时也存在不足:温度计要与被测物体有

良好的热接触,并充分换热,从而产生了测温滞后现象;测温组件可能与被测

物体发生化学反应;由于受到耐高温材料的限制,接触式测温仪表不可能应用

于很高温度的测量。

(2)非接触式测温法

由于测量组件与被测物体不接触,利用物体的热辐射能随温度变化的原理

测定物体温度。因而测量范围原则上不受限制,测温速度较快,还可以在运动

中测量。这种测温方式称为非接触式测温法。它的特点是:不与被测物体接触,也不改变被测物体的温度分布,热惯性小。从原理上看,用这种方法测温无上限。通常用来测定1000℃以上的移动、旋转或反应迅速的高温物体的温度或表面温度。

22 DS18B20简介

221技术性能描述

单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围 -55℃~+125℃,固有测温分辨率05℃。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。工作电源: 3~5V直流电源。

在使用中不需要任何外围元件,测量结果以9~12位数字量方式串行传送。适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温。

222应用范围

该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域,轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。

223接线说明

特点有一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为30 V至55 V 无需备用电源 测量温度范围为-55 ° C至+125 ℃ 。华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±05 ° C。

温度传感器可编程的分辨率为9~12位 温度转换为12位数字格式最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个DS18B20可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。6

第3章 软硬件设计

31 单片机的选择

单片机系统由单片机AT89C51、74HC245等芯片构成,完成数据采集、处理、通讯以及所有的功能,是整个系统的核心模块。

单片机是整个系统的核心,对系统起监督、管理、控制作用,并进行复杂的信号处理,产生测试信号及控制整个检测过程。所以在选择单片机时,参考了以下标准。

(1)运行速度。单片机运行速度一般和系统匹配即可。

(2)存储空间。单片机内部存储器容量,外部可以扩展的存储器(包括1/0口)空间。

(3)单片机内部资源。单片机内部存储资源越多,系统外接的部件就越少,这可提高系统的许多技术指标。

(4)可用性。指单片机是否能很容易地开发和利用,具体包括是否有合适的开发工具,是否适合于大批量生产:、性能价格比,是否有充足的资源,是否有现成的技术资源等。

(5)特殊功能。一般指可靠性、功耗、掉电保护、故障监视等。

从硬件角度来看,与MCS-51指令完全兼容的新一一代AT89CXX系列机,比在片外加EPROM才能相当的8031-2单片机抗干扰性能强,与87C51-2单片机性能相当,但功耗小。程序修改直接用+5伏或+12伏电源擦除,更显方便、而且其工作电压放宽至27伏一6伏,因而受电压波动的影响更小,而且4K的程序存储器完全能满足单片机系统的软件要求。故AT89C51单片机是构造本检测系统的更理想的选择。本系统选用ATMEL生产的AT89C51单片机,其特性如下:

(1) 4K字节可编程闪速程序存储器;1000次循环写/擦

(2)全静态工作:OHz-24MHz

(3)三级程序存储器锁定

(4) 128 X 8位内部数据存储器,32条可编程1/0线

(5)两个十六位定时器/计数器,六个中断源

(6)可编程串行通道,低功耗闲置和掉电模式

该器件采用了ATMEL的高密度非易失性的存储器工艺,并且可以与工业标准的MCS-51指令集和输出管脚兼容。由于将多功能8位CPU与闪速式存储器组合在单个芯片中,AT89C51是一种高效的微控制器,为很多嵌入式系统提供了高灵活性且价廉的方案。

32 温度传感器的选择

DS18B20是美国达拉斯半导体公司的产品,与其他产品相比较它的性能有如下特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为00625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。所以在本设计中,我采用了DS18B20作为温度传感器。8

33 仿真软件的选择

Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows *** 作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C uVision2、MPLAB等软件。9

34 编译软件的选择

KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编 器,实时 *** 作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。

C51 V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三 方开发工具。因此,C51 V7版本无疑是8051开发用户的最佳选择。

uVision2集成开发环境具有如下功能:

一、项目管理

工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。

一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单个文件。

uVision2包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定 微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速(math accelerator)的特 性。

uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。

二、集成功能

uVision2的强大功能有助于用户按期完工。

1集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器。

2文件寻找功能:在特定文件中执行全局文件搜索。

3工具菜单:允许在V2集成开发环境下启动用户功能。

4可配置SVCS接口:提供对版本控制系统的入口。

5PC-LINT接口:对应用程序代码进行深层语法分析。

6Infineon的EasyCase接口:集成块集代码产生。10

35 PROTEUS 仿真电路图

图1是基于单片机的智能温度检测系统电路原理图。控制加热热水器电源电路用LED灯模拟代替,取消无水报警电路。装上水后接通电源,下方LED数码管显示当前水温。上方LED数码管显示预设水温。 *** 作“个位”键和“十位”键可预设水温(如99℃)控制点。该电路具有如下功能:

(1) 测量水温,精度为1℃,范围为0~99℃;

(2) 三位数码管实时显示水温;

(3) 可预设水温(如99℃)控制点,当水加热到该水温时自动断电,当水温低于该水温时自动上电加热;

(4) 无水自动断电和报警功能(略)。

图1 基于单片机的智能温度检测系统电路原理图

第4章 汇编语言程序

41 主程序和温度值转换成显示值子程序的流程图

42 DS18B20温度子程序和显示子程序的流程图

43 汇编语言源程序

ORG 0

LJMP MAIN1

ORG 0003H

LJMP ZINT0

ORG 13H

LJMP ZINT1

TMPH: EQU 28H

FLAG1: EQU 38H

DATAIN: BIT P37

MAIN1: SETB IT0

SETB EA

SETB EX0

SETB IT1

SETB EX1

SETB P36

SETB P32

MOV 74H,#0

MOV 75H,#0

MOV 76H,#0

MOV 77H,#0

MAIN: LCALL GET_TEMPER

LCALL CVTTMP

LCALL DISP1

AJMP MAIN

INIT_1820:

SETB DATAIN

NOP

CLR DATAIN

MOV R1,#3

TSR1: MOV R0,#107 ;保持642ms

DJNZ R0,$

DJNZ R1,TSR1

SETB DATAIN ;释放DS18B20总线

NOP

NOP

NOP

MOV R0,#25H

TSR2: JNB DATAIN,TSR3

DJNZ RO,TSR2

CLR FLAG1

SJMP TSR2

TSR3: SETB FLAG1 ;标志位置1,证明DS18b20存在

CLR P17

MOV R0,#117

TSR6: DJNZ R0,$

TSR7: SETB DATAIN

RET ;延时254us

GET_TEMPER:

SETB DATAIN

LCALL INIT_1820

JB FLAG1,TSS2

NOP

RET ;DS18B20检测程序

TSS2: MOV A,#0CCH ;跳过ROM,使用存储器

LCALL WRITE_1820

MOV A,#44H ;对RAM *** 作,开始温度转换

LCALL WRITE_1820

ACALL DISP1

LCALL INIT_1820

MOV A,#0CCH

LCALL WRITE_1820

MOV A,#0BEH

LCALL WRITE_1820

LCALL READ_1820;读暂存器中的温度数值

RET

WRITE_1820:

MOV R2,#8

CLR C

WR1: CLR DATAIN

MOV R3,#6

DJNZ R3,$

RRC A

MOV DATAIN,C

MOV R3,#23

DJNZ R3,$

SETB DATAIN

NOP

DJNZ R2,WR1

SETB DATAIN

RET

READ_1820:

MOV R4,#2

MOV R1,#29H

RE00: MOV R2,#8

RE01: CLR C

SETB DATAIN

NOP

NOP

CLR DATAIN

NOP

NOP

NOP

SETB DATAIN

MOV R3,#9

RE10: DJNZ R3,RE10

MOV C,DATAIN

MOV R3,#23

RE20: DJNZ R3,RE20

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

CVTTMP: MOV A,TMPH

ANL A,#80H ;判断温度正负,正不变,负则取反加1

JZ TMPC1

CLR C

MOV A,TMP1

CPL A

ADD A,#1

MOV TMP1,A

MOV A,TMPH

CPL A

ADDC A,#0

MOV TMPH,A

MOV 73H,#0BH

SJMP TMPC11

TMPC1: MOV 73H,#0AH

TMPC11: MOV A,TMP1

ANL A,#0FH

MOV DPTR,#TMPTAB

MOVC A,@A+DPTR

MOV 70H,A

MOV A,TMP1

ANL A,#0FH

SWAP A

ORL A,TMPL

B2BCD: MOV B,#100

DIV AB

JZ B2BCD1

MOV 73H,A

B2BCD: MOV A,#10

XCH A,B

DIV AB

MOV 72H,A

MOV 71H,B

TMPC12: NOP

DISBCD: MOV A,73H

ANL A,#0FH

CJNE A,#1,DISBCD0

SJMP DISBCD1

DISBCD0: MOV A,72H

ANL A,#0FH

JNZ DISBCD1

MOV A,73H

MOV 72H,A

MOV 73H,#0AH

DISBCD1: RET

TMPTAB: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9

DISP1: MOV R1,#70H

MOV R0,#74H

MOV R5,#0FEH ;显示实际温度

PLAY: MOV P1,#0FFH

MOV A,R5

MOV P2,A

MOV A,@R1

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P1,A

MOV P1,A

MOV A,@R0

MOVC A,@A+DPTR

MOV P0,A

MOV A,R5

JB ACC1,LOOP1

JB P17

CLR P17

CLR P07 ;显示小数点

LOOP1: LCALL DL1MS

INC R1

INC R0

MOV A,R5

JNB ACC3,ENDOUT

RL A

MOV R5,A

MOV A,73H

CJNE A,#1,DD2

SJMP LEDH

DD2: MOV A,72H

CJNE A,72H,DDH

SJMP DD1

DDH: JNE PLAY1

LEDH: CLR P36

SJMP PLAY

PLAY1: SETB P36

SJMP PLAY

ENDOUT: MOV P1,#0FFH

MOV P2,#0FFH

RET

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H

DB 92H,82H,0F8H,80H,90H,0FFH,0BFH

DL1MS: MOV R6,#14H

DL1: MOV R7,#100

DJNZ R7,$

DJNZ R6,DL1

RET

ZINT0: PUSH A

INC 75H

MOV A,,75H

CJNE A,#10,ZINT01

MOV 75H,#0

ZINT01: POP A

RETI

ZINTT1: PUSH A

INC 76H

MOV A,76H

CJNE A,#10,ZINT11

MOV 76H,#0

ZINT11: POP A

RETI

以上就是关于51单片机 温度控制 1602显示 DS18B20读取温度全部的内容,包括:51单片机 温度控制 1602显示 DS18B20读取温度、用单片机做的恒温控制系统,仿真通过了,程序是没问题的。。可是在实物制作时,通电后就是没有反应。、基于单片机恒温水箱制作都需要什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9336781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存