;这是关于单个DS18B20的测温程序,数据脚为P3.3,晶振是11.059MHZ

;温度传感器18B20采用器件默认的12位转化,最大转化时间要750毫秒

;用1602液晶屏显示,显示温度从00到99度,精确到0.0625度

;内存分配声明

TEMPER_L EQU 29H;用于保存读出温度的低字节

TEMPER_H EQU 28H;用于保存读出温度的高字节

T_DF EQU 27H ;FORMAT后的小数部分(decimal fraction),半字节的温度小数(存在低四位)

T_INTEGER EQU 26H ;FORMAT后的整数部分(integer),将两字节的温度整合成1字节

FLAG1 BIT 50H;位地址50H是字节2AH的最低位,用作是否检测到DS18B20的标志位

A_BIT EQU 20h ;液晶十位数存放内存位置

B_BIT EQU 21h ;液晶个位数存放内存位置

C_BIT EQU 22H ;个位小数

D_BIT EQU 23H ;十位小数

E_BIT EQU 24H ;百位小数

F_BIT EQU 25H ;千位小数

RS BIT P2.0 ;这3位是液晶屏的控制信号,连接方式由具体硬件而定

RW BIT P2.1

E  BIT P2.2

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN:

LCALL   INIT_RS232

CLR P1.3

LCALL T_CONVERSION;调用读温度子程序

LCALL T_FORMAT;将读出的2字节温度格式化

LCALL DISPLAY;调用液晶显示子程序

LCALL D1S;延时1秒后再测

LJMP MAIN

;--------------DS18B20的温度转换子程序,具体时序请参考资料-------------------

T_CONVERSION:        LCALL INIT_1820;先复位DS18B20

JB FLAG1,T_C0

RET ; 判断DS1820是否存在  若DS18B20不存在则返回

T_C0:                MOV A,#0CCH ; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#44H ; 发出温度转换命令

LCALL WRITE_1820

LCALL D1S   ;这里等待AD转换结束,12位的话要延时750m秒

LCALL INIT_1820;准备读温度前先复位

MOV A,#0CCH ; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH ; 发出读温度命令

LCALL WRITE_1820

LCALL READ_1820; 将读出的温度数据保存到28H(TEMPER_H)和29H(TEMPER_L)处

RET

;------DS18B20复位初始化程序-----------------------------------------

INIT_1820:   SETB P3.3

NOP

CLR P3.3

MOV R0,#2 ;主机发出延时500微秒的复位低脉冲

INIT0:         MOV R1,#250

DJNZ R1,$

DJNZ R0,INIT0

SETB P3.3;然后拉高数据线

NOP

MOV R0, #15

INIT1:         JNB P3.3, INIT3;延时60us等待DS18B20回应

DJNZ R0, INIT1

LJMP INIT4 ; 超时而没有响应

INIT3:         SETB FLAG1 ; 置标志位,表示DS1820存在

LJMP INIT5

INIT4:         CLR FLAG1 ; 清标志位,表示DS1820不存在

LJMP INIT6

INIT5:         MOV R0, #120

DJNZ R0, $ ; 延时240us

INIT6:         SETB P3.3

RET

;---------写DS18B20的子程序(有具体的时序要求)-------------------------------------

WRITE_1820:   MOV R2,#8;一共8位数据

WR0:              CLR P3.3

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3.3,C

MOV R3,#20

DJNZ R3,$

SETB P3.3

NOP

NOP

DJNZ R2,WR0

SETB P3.3

RET

;------读DS18B20的程序,从DS18B20中读出两个字节的温度数据--------------------------

READ_1820:      MOV R4,#2 ; 将温度高位和低位从DS18B20中读出

MOV R1,#TEMPER_L ; 低位存入29H(TEMPER_L)

RE0:            MOV R2,#8

RE1:            SETB P3.3

NOP

NOP

CLR P3.3

NOP

NOP

SETB P3.3

MOV R3,#5

DJNZ R3, $

MOV C,P3.3

MOV R3,#20

DJNZ R3, $

RRC A

DJNZ R2,RE1

MOV @R1,A

DEC R1            ; 高位存入28H(TEMPER_H)

DJNZ R4,RE0

RET

;-----整合读出的两字节温度(关于DS18B20读出的2字节温度格式请参考资料)----------

T_FORMAT:         MOV A, #0FH

ANL A, TEMPER_L

MOV T_DF, A           ;获得小数部分(4位)

MOV A, TEMPER_L

SWAP A

MOV TEMPER_L, A

MOV A, TEMPER_H

SWAP A

MOV R0, #TEMPER_L

XCHD A, @R0

MOV T_INTEGER, A       ;获得整数部分(1字节)

RET

;-------液晶显示的子程序(显示前先格式转换)---------------------------------------

DISPLAY:             mov a, T_INTEGER

mov b,#10

div ab

mov A_BIT,a ;十位存在A_BIT

mov B_BIT,b ;个位存在B_BIT

MOV A, T_DF

MOV R0, #C_BIT

MOV R2, #4

D0: MOV B, #10

MUL AB

MOV B, #16

DIV AB

MOV @R0, A      ;从个位小数C_BIT,到十位D_BIT,百位E_BIT,千位F_BIT

INC R0

MOV A, B

DJNZ R2, D0

;----二进制到ASCII码转换--------------

MOV A, #30H

ORL A_BIT, A

ORL B_BIT, A

ORL C_BIT, A

ORL D_BIT, A

ORL E_BIT, A

ORL F_BIT, A

;-------------------------------------

LCALL INITIAL

MOV A, #10000000B                ; LINE1: DB 'Now is:',00H

LCALL   WRITE_INSTRUCTION

MOV   DPTR, #LINE1

LCALL   PR_STRING

MOV A, A_BIT

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, B_BIT

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, #2EH

LCALL TX_CHAR;'.'字符

LCALL   WRITE_LCDDATA

MOV A, C_BIT

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, D_BIT

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, E_BIT

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, F_BIT

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, #0DFH                        ;下面两个是摄氏度的数字符号

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, #43H

LCALL TX_CHAR

LCALL   WRITE_LCDDATA

MOV A, #0AH

LCALL TX_CHAR

mov a, #11000000B                 ; LINE2: DB 'WANG XUE MIN!',00H

Lcall write_instruction

MOV   DPTR, #LINE2

LCALL   PR_STRING

RET

;---液晶屏初始化,具体请参考资料-------------------------------------------------

initial:         MOV   A, #01H

LCALL WRITE_INSTRUCTION

MOV   A, #38H

LCALL WRITE_instruction

MOV   A, #0FH

LCALL WRITE_instruction

MOV   A, #06H

LCALL WRITE_instruction

RET

;----写液晶指令的子程序------------------------------------------

WRITE_instruction: MOV P0, A

CLR RS ;写入控制命令

CLR RW

CLR E

LCALL DELAY

SETB E

RET

;----写液晶数据的子程序---------------------------------------------

write_lcddata:   MOV P0, A

SETB RS ;写入数据

CLR RW

CLR E

LCALL DELAY ;判断液晶模块是否忙

SETB E

RET

;-----写行字符的子程序---------------------------------------------------------------

PR_STRING:   CLR    A

MOVC   A, @A+DPTR

JZ      END_PR

LCALL WRITE_LCDDATA

INC    DPTR

LJMP   PR_STRING

END_PR:       RET

;----查看液晶忙碌信号的子程序---------------------------------------------------------

DELAY:   MOV P0,#0FFH ;判断液晶显示器是否忙的子程序

CLR RS

SETB RW

CLR E

NOP

SETB E

JB P0.7,DELAY ;如果P1.7为高电平表示忙就循环等待

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

lcd1602c显示温度语言编程,单片机+lcd1602显示温度汇编语言程序-精确到0.0625度相关推荐

  1. c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯

    上一节,我们利用C语言编程单片机仿制了达文西的"古怪手电筒",达成了"在有光的时候就会亮,在没有光的情况下绝对不会亮!"的目标. 其实在此基础上,C语言还能做些 ...

  2. mcs51C语言指令系统,MCS-51单片机指令系统和汇编语言程序实例

    MCS-51单片机指令系统和汇编语言程序实例 介绍MCS-51的指令系统和汇编语言编程,了解处理器的软件资源 3.1 MCS-51单片机指令系统概述

  3. c语言求三门课总成绩,C语言编程,求高手 编写程序求某班20位学生三门课(英语,数学,语文)总成绩,并按照总成绩从大到小...

    C语言编程,求高手 编写程序求某班20位学生三门课(英语,数学,语文)总成绩,并按照总成绩从大到小 关注:212  答案:3  mip版 解决时间 2021-01-17 10:35 提问者夜落花台 2 ...

  4. 按键去抖动c语言编程,单片机实现电脑键盘去抖的编程设计

    当轻触开关合闭或是断掉时都有每段电平不平稳的時期,轻触开关在合闭时不容易立刻就平稳的接入,在断掉时也不容易突然之间完全断掉,只是在合闭和断掉的一瞬间随着了一个一个的电平颤动.这类颤动通常都会10ms上 ...

  5. C语言编程单片机相关资料,单片机的C语言编程资料.ppt

    内 容 提 要 C51程序结构 C51的数据类型及运算符 C51的函 数 C51程序设计 小结 ; 应用C51编程具有以下优点:? (1)C51管理内部寄存器和存贮器的分配,编程时,无需考虑不同存储器 ...

  6. 访问外部扩展C语言编程,单片机C语言编程(系统扩展IC)8.ppt

    单片机C语言编程(系统扩展IC)8 第8章 单片机系统扩展 第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接 ...

  7. c语言编程单片机中的sbit,单片机sfr和sbit的用法

    描述 单片机sfr和sbit详解 sfr用于将一个单片机的特殊功能寄存器(special function register)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(refer to) ...

  8. 点亮第一盏灯的c语言编程,单片机点亮第一盏灯实验详细教程

    第一个实验:keil软件使用与点亮人生的第一只发光二极管 1.001.jpg (23.15 KB, 下载次数: 78) 2017-5-20 17:27 上传 本章详细介绍单片机程序常用编译软件 Kei ...

  9. dac梯形波c语言编程,单片机项目第11章单片机与AD接口.ppt-资源下载在线文库www.lddoc.cn...

    单片机项目第11章 单片机与AD接口.ppt 第11章 单片机与AD接口,11.1 项目内容数字电压表的设计 11.2 程序设计 11.3 相关知识,11.1 项目内容数字电压表的设计,11.1.1 ...

  10. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

最新文章

  1. 3分钟快速实现:9种经典排序算法的可视化
  2. 华北理工大学815c语言程序设计,2017年华北理工大学信息工程学院815C程序设计考研冲刺密押题...
  3. Boost:info hook信息挂钩的测试程序
  4. delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)
  5. python中#!/usr/bin/python与#!/usr/bin/env python的区别
  6. 操作系统(李治军) L8 CPU管理的直观想法
  7. 专访iQOO Pro产品经理:以更好的产品 更低的价格推进5G生态普及
  8. MYSQL 用户的操作
  9. 【转】C#实现SqlServer数据库的备份和还原
  10. 【雷达】一维和二维自适应波束形成(DBF))DBF附matlab代码
  11. 有哪些常用的虚拟主机管理系统
  12. XML-BEANS compiled schema: Could not locate compiled schema
  13. 数据结构-学习笔记整理
  14. 【后台技术】异步编程指北,问题和重点
  15. 集合(set) 深浅拷贝
  16. 目标检测2020-2021
  17. 线缆束的辐射与抗干扰
  18. Windows日志分析(中)
  19. Azure机器学习入门(三)创建Azure机器学习实验
  20. 教你一个图片快速取反色的方法

热门文章

  1. curviloft插件怎么用_Curviloft插件下载
  2. 【iqiqiya专版】超级网易云音乐V1.0----网易云解析下载工具
  3. 网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取
  4. 宗成庆《自然语言理解》第5章作业
  5. 上新:视频加密功能增加防录屏(随机水印)功能
  6. 尼得科与日本电产三协共同研发出一款搭载有“Zignear®”的AC伺服电机
  7. HTML 个人简历源码
  8. 蝙蝠算法的matlab程序,多目标蝙蝠算法
  9. 计算机实用知识风云初动,风云初动 第一节 养气韬光
  10. AlterID.exe解决teamview商业使用