基于ds18b20温度带上限程序--LCD1602液晶显示

发布者:玉树琼花最新更新时间:2015-07-06 来源: 51hei关键字:ds18b20  LCD1602  液晶显示 手机看文章 扫描二维码
随时随地手机看文章
这是用1602来显示的,程序是修改前面几个实验的,当温度<40度时电风扇不转,当>=40度时电风扇转动,为参加电子比赛做的单片机系统实验。程序为汇编语言(ASM),带详细注释,值得新手朋友参考!

全部程序:

ORG 0000H

;单片机内存分配申明!

TEMPER_L EQU 29H;用于保存读出温度的低8位

TEMPER_H EQU 28H;用于保存读出温度的高8位

FLAG1       EQU 38H;是否检测到DS18B20标志位

a_bit       equ 20h ;数码管个位数存放内存位置

b_bit       equ 21h ;数码管十位数存放内存位置

RS EQU P3.7;确定具体硬件的连接方式

RW EQU P3.6 ;确定具体硬件的连接方式

E EQU P3.5 ;确定具体硬件的连接方式

;主程序

MAIN:

         LCALL GET_TEMPER;调用读温度子程序

         MOV A,29H

         MOV C,40H;将28H中的最低位移入C

         RRC A

         MOV C,41H

         RRC A

         MOV C,42H

         RRC A

         MOV C,43H

         RRC A

         MOV 29H,A

         clr c

         setb p3.0;zhelikais从这里开始是我填加的温度控制

         CJNE A,#28H,FIT

         SETB P3.0

         AJMP DISLED

     FIT:CPL C

         MOV P3.0,C;jiesu到这里结束

DISLED:LCALL DISPLAY;调用数码管显示子程序

         AJMP MAIN

;DS18B20复位初始化子程序

INIT_1820:SETB P2.2

            NOP

            CLR P2.2;主机发出延时537微秒的复位低脉冲

            MOV R1,#3

       TSR1:MOV R0,#107

            DJNZ R0,$

            DJNZ R1,TSR1

            SETB P2.2;然后拉高数据线

            NOP

            NOP

            NOP

            MOV R0,#25H

       TSR2:JNB P2.2,TSR3;等待DS18B20回应

            DJNZ R0,TSR2

            LJMP TSR4 ; 延时

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

            CLR P1.7;检查到DS18B20就点亮P1.7LED,与传感器通信成功

            LJMP TSR5

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

            CLR P1.1;未检查到DS18B20就点亮P1.1LED,与传感器通信失败

            LJMP TSR7

       TSR5:MOV R0,#117

       TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间

       TSR7:SETB P2.2

            RET

;读出转换后的温度值的子程序

GET_TEMPER:SETB P2.2

             LCALL INIT_1820;先复位DS18B20

             JB FLAG1,TSS2

             CLR P1.2

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

        TSS2:CLR P1.3;DS18B20已经被检测到!

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

             LCALL WRITE_1820

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

             LCALL WRITE_1820

             LCALL DISPLAY;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒

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

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

             LCALL WRITE_1820

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

             LCALL WRITE_1820

             LCALL READ_18200; 将读出的温度数据保存到35H/36H

             CLR P1.4

             RET[page]

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

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

             CLR C

         WR1:CLR P2.2

             MOV R3,#6

             DJNZ R3,$

             RRC A

             MOV P2.2,C

             MOV R3,#23

             DJNZ R3,$

             SETB P2.2

             NOP

             DJNZ R2,WR1

             SETB P2.2

             RET

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

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

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

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

        RE01:CLR C

             SETB P2.2

             NOP

             NOP

             CLR P2.2

             NOP

             NOP

             NOP

             SETB P2.2

             MOV R3,#9

        RE10:DJNZ R3,RE10

             MOV C,P2.2

             MOV R3,#23

        RE20:DJNZ R3,RE20

             RRC A

             DJNZ R2,RE01

             MOV @R1,A

             DEC R1

             DJNZ R4,RE00

             RET

;显示子程序

display: acall DL100MS

           acall DL100MS

           mov a,29H;将29H中的十六进制数转换成10进制

           mov b,#10 ;10进制/10=10进制

           div ab

           mov b_bit,a ;十位在a

           mov a_bit,b ;个位在b

           add a,#00110000b

           mov b_bit,a

           mov a,b

           add a,#00110000b

           mov a_bit,a

           MOV P1,#00000001B; ;清屏并光标复位

           ACALL ENABLE;调用写入命令子程序

           MOV P1,#00111000B ;;设置显示模式:8位2行5x7点阵

           ACALL ENABLE ;调用写入命令子程序

           MOV P1,#00001111B ;;显示器开、光标开、光标允许闪烁

           ACALL ENABLE ;调用写入命令子程序

           MOV P1,#00000110B ;;文字不动,光标自动右移

           ACALL ENABLE ;调用写入命令子程序

           MOV P1,#80H ;;写入显示起始地址(第二行第一个位置)

           ACALL ENABLE ;调用写入命令子程序

           MOV P1,b_bit ;;A十位送出去


           SETB RS; ;RS=1

           CLR RW; ;RW=0 ;准备写入数据

           CLR E; ;E=0 ;执行显示命令

           ACALL DELAY ;判断液晶模块是否忙?

           SETB E ;;E=1 ;显示完成,程序停车


           MOV P1,#00000110B ;;文字不动,光标自动右移

           ACALL ENABLE ;调用写入命令子程序

           MOV P1,#81H ;;写入显示起始地址(第二行第2个位置)

           ACALL ENABLE ;调用写入命令子程序

           MOV P1,a_bit;;字母A的代码


           SETB RS; ;RS=1

           CLR RW; ;RW=0 ;准备写入数据

           CLR E; ;E=0 ;执行显示命令

           ACALL DELAY ;判断液晶模块是否忙?

           SETB E ;;E=1 ;显示完成,程序停车

           ret

           ENABLE:

           CLR RS; ;写入控制命令的子程序

           CLR RW

           CLR E

           ACALL DELAY

           SETB E

           RET

     DELAY:

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

           CLR RS

           SETB RW

           CLR E

           NOP

           SETB E

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

           RET

DL100MS:      MOV R7,#02H

DL1:          MOV R6,#0C8H

DL2:          MOV R5,#0FAH

             DJNZ R5,$

             DJNZ R6,DL2

             DJNZ R7,DL1

             RET

             END
关键字:ds18b20  LCD1602  液晶显示 引用地址:基于ds18b20温度带上限程序--LCD1602液晶显示

上一篇:基于C8051F020的示波器监控程序的设计
下一篇:基于NRF24L01无线模块的STC89C52单片机发射

推荐阅读最新更新时间:2024-03-16 14:23

51单片机学习:LCD12864液晶显示实验
实验名称:LCD12864液晶显示实验(带字库) 接线说明: 实验现象:下载程序后,LCD12864上显示汉字字符信息 注意事项: ***************************************************************************************/ #include public.h #include lcd12864.h /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出
[单片机]
stc12c5A60s2用ds18b20测温
//温度显示程序==LED显示,精度0.1摄氏度 //晶振:12M //单片机:stc12c5a60s2 1T /****************************************** 跳线设置:默认 注意事项:ds18b20切勿插反,有爆炸烫伤的危险,方向是ds18b20的平面(有字的一面)朝旁边的三极管Q4 ***/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int //数据口define interface sbit dula = P2^6; //数码管段选 sbit
[单片机]
STM8L 温度传感器DS18B20
#define DS18B20_GPIO_PORT (GPIOC) #define DS18B20_GPIO_PIN (GPIO_Pin_2) #define DS18B20_PIN_SET_OUT() GPIO_Init(DS18B20_GPIO_PORT, (GPIO_Pin_TypeDef)DS18B20_GPIO_PIN, GPIO_Mode_Out_PP_High_Fast) #define DS18B20_PIN_SET_IN() GPIO_Init(DS18B20_GPIO_PORT, (GPIO_Pin_TypeDef)DS18B20_GPIO_PIN, GPIO_Mode_In_PU_No_IT) #de
[单片机]
51单片机-LCD1602
1.硬件设计 1.1.LCD1602介绍 LCD1602是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 LCD1602主要用来显示数字、字母、图形以及少量自定义字符。可以显示2行16个字符,拥有16个引脚,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK 关于LCD的工作原理,结构堆叠等的介绍,可参考如下链接:https://lishiyi.blog.csdn.net/article/details/124106767?spm=1001.2014.3001.550
[单片机]
51单片机-<font color='red'>LCD1602</font>
基于DSP和ST7920的液晶显示模块的实现
  DSP是一种适合于数字信号处理的实时高速的高性能微处理器,已广泛应用于自动控制、图像处理、通信技术、网络设备、仪器、仪表和家电领域。液晶显示屏以其显示直观、便于操作的特点被用作各种便携式系统的显示终端。传统液晶大多用单片机控制,而单片机的数字信号处理能力远低于DSP芯片,使得其应用范围受到限制。基于此,本文选用TOPWAY公司生产的、以ST7920为控制芯片的128×64点阵3.3V简体中文字库的LM3303A-B型图形液晶,介绍了一种基于DSP和ST7920的液晶显示屏的设计。   1 ST7920控制器介绍   LM3303A-B型液晶显示屏是香港TOPWAY公司采用台湾铭创电子公司生产的ST7920控制器的液晶显
[嵌入式]
基于DSP和ST7920的<font color='red'>液晶显示</font>模块的实现
TFT-LCD液晶显示器的工作原理
时至今日, 液晶显示器, 对于一般普罗大众, 已经不再是生涩的名词. 而它更是继半导体后 另一种可以再创造大量营业额的新兴科技产品, 更由于其轻薄的特性, 因此它的应用范围比起原先使用阴极射线管(CRT, cathode-ray tube)所作成的显示器更多更广. 如同我前面所提到的, 液晶显示器泛指一大堆利用液晶所制作出来的显示器. 而今日对液晶显示器这个名称, 大多是指使用于笔记型计算机, 或是桌上型计算机应用方面的显示器. 也就是薄膜晶体管液晶显示器. 其英文名称为Thin-film transistor liquid crystal display, 简称之TFT-LCD. 从它的英文名称中我们可以知道, 这一种显示器它的
[嵌入式]
Touch Panel Systems扩充产品群,满足触摸屏液晶显示器需求扩大
    带触摸面板的21.5英寸液晶显示器“2201L”(右下方为新产品)(点击放大) 带触摸面板的55英寸数字标牌用大型液晶显示器(点击放大)   日本Touch Panel Systems投产了5款带触摸面板的15~21.5英寸液晶显示器新产品,以及带触摸面板的55英寸数字标牌用大尺寸液晶显示器。   Touch Panel Systems对5款带触摸面板的15~21.5英寸液晶显示器新产品的定位是,通过提供多种画面尺寸和触摸面板方式选项,广泛满足使用POS系统及Kiosk终端的店铺及流通领域和待客服务领域的需求。此次投产了画面尺寸为15英寸的“1515L”、17英寸的“1715L”、15.6英寸宽屏的“1519L”、18
[手机便携]
实用的温度计(ds18b20)+Proteus仿真+C源程序
#include reg51.h //包含单片机寄存器的头文件 #include intrins.h //包含_nop_()函数定义的头文件 #include absacc.h #include math.h unsigned char code dispcode0 ={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; unsigned char dispcode1 ={0xbf,0x86,0xdb,0xcf,0xe6,0xed, 0xfd,0x87,0x
[单片机]
实用的温度计(<font color='red'>ds18b20</font>)+Proteus仿真+C源程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved