51单片机DS18B20温度控制报警程序(可设置温控范围)

发布者:小悟空111最新更新时间:2015-07-03 来源: 51hei关键字:51单片机  DS18B20  温度控制  报警程序 手机看文章 扫描二维码
随时随地手机看文章
DS18B20的管脚定义:

1、GND
2、DQ
3、VCC

 DQ   →  P1.7
 
 K1   →  P3.2
 K2   →  P3.4
 K3   →  P3.6
 K4   →  P3.7

温度显示用四位数码管,当温度>=100度时,第四位才显示。
第五位数码管显示状态符号。

开机检测 DS18B20 状态:

DS18B20正常显示:
 
   O  18.8  ← 显示实时温度和加热标记“O”

DS18B20不正常显示:
黑屏、蜂鸣器一直响。

这时你要检查DS18B20是否连接好、接对,否则要更换一个新的 DS18B20 芯片。

程序在整个运行过程中,始终对 DS18B20 进行检测。
你可以将 DS18B20 从 51hei-5 拔掉,检测一下此功能。

一、查看温度报警值:

K1 → 进入查看温度报警值 TL 状态:

  L--20
 TL: 20   低位报警值

K1 → 进入查看温度报警值 TH 状态:
 
  H--28
 TH: 28  高位报警值

K1 → 退出查看温度报警值状态。


二、设定温度报警值:

1、K3 → 进入设定温度报警值 TL 状态:

   L--20

2、K3 → 进入设定温度报警值 TH 状态:

   H--28

3、K3 → 返回

4、设定过程: K1 →加键 (UP), K2 →减键 (DOWN),可快速调。

将设定的温度报警值自动存入 DS18B20 的 EEROM 中,可永久保存。
每次开机时自动从 DS18B20 的 EEROM 读出温度报警值。

三、报警状态的显示:

1、当实际温度大于 TH 的设定值时,
 
   H  38.8       H → 闪动

关闭继电器,表示超温。

2、当实际温度小于 TL 的设定值时,
  
   L  18.8       L → 闪动

表示加热部分出现故障。

3、当实际温度小于 TH 的设定值时,继电器吸合,开始加热。
  
加热标记为“O”

四、其它功能

1、以闪动方式显示标记符 “ H”、“ L”、“O”。

2、实时温度百位数为 “0”时,不显示。

3、报警温度值百位数为 “0”时,显示“-”。
 
完整的程序代码下载地址:http://www.51hei.com/f/DS18B20温度控制LED显示_asm.rar

;*****************************************************************
;*  标题:  51Hei单片机开发系统演示程序 - DS18B20温度控制数码管显示              *
;*  晶振:  12M                                                                  *
;*  跳线设置:J5的12脚用跳线帽短接,J5的第3脚用杜邦线连接到顶部P1.0扩展,其他默认                                                                  *                                                 *
;*  网站: http://www.51HEI.com                                                  *
;******************************************************************
;*  描述:                                                                       *
;*          DS18B20温度控制数码管显示                                           *
;*        1、K3 → 进入设定温度报警值 TL 状态:                                   *
;*           L--20                                                            *
;*        2、K3 → 进入设定温度报警值 TH 状态:                                   *
;*           H--28                                                            *
;*        3、K3 → 返回                                                          *
;*        4、设定过程: K1 →加键 (UP), K2 →减键 (DOWN),可快速调。         *
;*                                                                              *
;********************************************************************************


          TIMER_L     DATA  23H
          TIMER_H     DATA  24H
          TIMER_COUN  DATA  25H

          TEMPL       DATA  26H
          TEMPH       DATA  27H
          TEMP_TH     DATA  28H
          TEMP_TL     DATA  29H

          TEMPHC      DATA  2AH
          TEMPLC      DATA  2BH
          TEMP_ZH     DATA  2CH

          BEEP        EQU   P1.0
          DATA_LINE   EQU   P1.7
          RELAY       EQU   P2.2

          FLAG1       EQU   20H.0
          FLAG2       EQU   20H.1

;-------------------------------------------------
          K1   EQU  P3.2
          K2   EQU  P3.4
          K3   EQU  P3.6
          K4   EQU  P3.7
;=================================================
          ORG 0000H
          JMP  MAIN

          ORG  000BH
          AJMP  INT_T0
;--------------------------------------------------
MAIN:     MOV SP,#30H
      ;以下5行的功能是关闭8*8点阵的输出,也就是把所有的行置0,这样不管列为任何电平点阵都不会亮了.
         MOV     R2,#8    ;输出数据8位 
hei:     CLR     P2.4     ;拉低SCL,以便下次拉高便可产生上升沿
         CLR     P2.5  ;数据先送入74hc164,等待clk上升沿的到来
         SETB    P2.4     ;低电平到高电平边沿触发到来,并行数据输出至164的Q0-Q7
         DJNZ    R2,hei   ;判断输出完毕了没有
          MOV  TMOD,#01H        ;T0,方式1
          MOV  TIMER_L,#00H     ;50ms定时值
          MOV  TIMER_H,#4CH
          MOV  TIMER_COUN,#00H  ;中断计数
          MOV  IE,#82H          ;EA=1,ET0=1
          LCALL  READ_E2
          ;LCALL  RE_18B20
          MOV  20H,#00H
          SETB   BEEP
          SETB   RELAY
          MOV  7FH,#0AH         ;熄灭符

          CALL RESET            ;复位与检测DS18B20
          JNB FLAG1,MAIN1       ;FLAG1=0,DS18B20不存在
          JMP  START

MAIN1:    CALL RESET
          JB FLAG1,START
          LCALL  BEEP_BL        ;DS18B20错误,报警
          JMP  MAIN1
START:
          MOV A,#0CCH         ; 跳过ROM匹配
          CALL WRITE
          MOV A,#044H         ; 发出温度转换命令
          CALL WRITE

          CALL RESET
          MOV A,#0CCH         ; 跳过ROM匹配
          CALL WRITE
          MOV A,#0BEH         ; 发出读温度命令
          CALL WRITE

          CALL  READ           ;读温度数据
          CALL  CONVTEMP
          CALL  DISPBCD
          CALL  DISP1
          CALL  SCANKEY
          LCALL  TEMP_COMP
          JMP   MAIN1

;=====================================================
;DS18B20 复位与检测子程序
;FLAG1=1 OK, FLAG1=0 ERROR
;======================================================
RESET:
          SETB DATA_LINE
          NOP
          CLR DATA_LINE
          MOV R0,#64H            ;主机发出延时600微秒的复位低脉冲
          MOV R1,#03H
RESET1:   DJNZ R0,$
          MOV R0,#64H
          DJNZ R1,RESET1
          SETB DATA_LINE        ;然后拉高数据线
          NOP
          MOV R0,#25H
RESET2:   JNB DATA_LINE,RESET3  ;等待DS18B20回应
          DJNZ R0,RESET2
          JMP RESET4            ; 延时
RESET3:   SETB FLAG1            ; 置标志位,表示DS1820存在
          JMP RESET5
RESET4:   CLR FLAG1             ; 清标志位,表示DS1820不存在
          JMP RESET6
RESET5:   MOV R0,#064H
          DJNZ R0,$             ; 时序要求延时一段时间
RESET6:   SETB DATA_LINE
          RET
;===========================================================
;
;===========================================================
WRITE:  MOV R2,#8            ;一共8位数据
        CLR CY
WR1:
        CLR DATA_LINE        ;开始写入DS18B20总线要处于复位(低)状态
        MOV R3,#09
        DJNZ R3,$            ;总线复位保持18微妙以上
        RRC A                ;把一个字节DATA 分成8个BIT环移给C
        MOV DATA_LINE,C      ;写入一个BIT
        MOV R3,#23
        DJNZ R3,$            ;等待46微妙
        SETB DATA_LINE       ;重新释放总线
        NOP
        DJNZ R2,WR1          ;写入下一个BIT
        SETB DATA_LINE
        RET
;============================================================
;从DS18B20中读出温度低位、高位和报警值TH、TL
;存入26H、27H、28H、29H
;============================================================
READ:    MOV R4,#4            ; 将温度高位和低位从DS18B20中读出
         MOV R1,#26H          ; 存入26H、27H、28H、29H
RE00:    MOV R2,#8
RE01:    CLR C
         SETB DATA_LINE
         NOP
         NOP
         CLR DATA_LINE        ;读前总线保持为低
         NOP
         NOP
         NOP
         SETB DATA_LINE       ;开始读总线释放
         MOV R3,#09           ;延时18微妙
         DJNZ R3,$
         MOV C,DATA_LINE      ;从DS18B20总线读得一个BIT
         MOV R3,#23
         DJNZ R3,$            ;等待46微妙
         RRC A                ;把读得的位值环移给A
         DJNZ R2,RE01         ;读下一个BIT
         MOV @R1,A
         INC R1
         DJNZ R4,RE00
         RET        [page]
;--------------------------------------------
;200ms对闪动标记取反一次
;--------------------------------------------
INT_T0:
          PUSH  ACC
          PUSH  PSW
          MOV  TL0,TIMER_L
          MOV  TH0,TIMER_H
          INC  TIMER_COUN
          MOV  A,TIMER_COUN
          CJNE  A,#04H,INT_END
          MOV  TIMER_COUN,#00H
          CPL  FLAG2
INT_END:
          POP  PSW
          POP  ACC
          RETI
;==========================================================
;重新对 DS18B20 初始化
;将设定的温度报警值写入 DS18B20
;==========================================================
RE_18B20:
        JB  FLAG1,RE_18B20A
        RET
RE_18B20A:
        CALL  RESET
        MOV  A,#0CCH       ;跳过ROM匹配
        LCALL  WRITE
        MOV  A,#4EH        ;写暂存寄存器
        LCALL  WRITE
        MOV  A,TEMP_TH     ;TH(报警上限)
        LCALL  WRITE
        MOV  A,TEMP_TL     ;TL(报警下限)
        LCALL  WRITE
        MOV  A,#7FH        ;12位精确度
        LCALL  WRITE
        RET

;====================================================
;功能键扫描子程序
;====================================================
SCANKEY:
              ;MOV  P1,#0F0H
              JB  K1,SCAN_K2
              CALL  BEEP_BL
SCAN_K1:      CALL  ALERT_TL
              CALL  ALERT_PLAY
              JB   K1,SCAN_K1
              CALL  BEEP_BL
SCAN_K11:     CALL  ALERT_TH
              CALL  ALERT_PLAY
              JB    K1,SCAN_K11
              CALL  BEEP_BL
SCAN_K2:      JB  K2,SCAN_K3
              CALL  BEEP_BL
SCAN_K3:      JB  K3,SCAN_K4
              CALL  BEEP_BL
              LCALL  RESET_ALERT
              LCALL  RE_18B20
              LCALL  WRITE_E2
SCAN_K4:      JB  K4,SCAN_END
              CALL  BEEP_BL
SCAN_END:     RET

;================================================
;设置温度报警值
;================================================
RESET_ALERT:
          CALL  ALERT_TL
          CALL  ALERT_PLAY
          JNB K3,$              ;K3为位移键
          SETB  TR0
RESET_TL:
          CALL  ALERT_PLAY
          JNB  FLAG2,R_TL01
          mov  75H,7fh          ;送入熄灭符
          mov  76H,7fh
          CALL  ALERT_PLAY
          JMP   R_TL02
R_TL01:   CALL  ALERT_TL
          mov  75h,7Eh          ;送设定值
          mov  76h,7Dh
          CALL  ALERT_PLAY      ;显示设定值
R_TL02:   JNB  K1,K011A
          JNB  K2,K011B
          JNB  K3,RESET_TH
          JMP  RESET_TL
K011A:
          INC  TEMP_TL
          MOV  A,TEMP_TL
          CJNE  A,#120,K012A    ;没有到设定上限值,转
          MOV  TEMP_TL,#0
K012A:    CALL  TL_DEL
          JMP   RESET_TL
K011B:
          DEC  TEMP_TL
          MOV  A,TEMP_TL
          CJNE  A,#00H,K012B   ;没有到设定下限值,转
          MOV  TEMP_TL,#119
K012B:    CALL  TL_DEL
          JMP   RESET_TL
;-------------------------------------------------------
RESET_TH:
           CALL  BEEP_BL
           JNB  K3,$
RESET_TH1:
          CALL  ALERT_PLAY
          JNB  FLAG2,R_TH01
          mov  75H,7fh          ;送入熄灭符
          mov  76H,7fh
          CALL  ALERT_PLAY
          JMP   R_TH02
R_TH01:   CALL  ALERT_TH
          mov  75h,7Eh          ;
          mov  76h,7Dh
          CALL  ALERT_PLAY
R_TH02:   JNB  K1,K021A
          JNB  K2,K021B
          JNB  K3,K002
          JMP  RESET_TH1
K021A:
          INC  TEMP_TH
          MOV  A,TEMP_TH
          CJNE  A,#120,K022A   ;没有到设定上限值,转
          MOV  TEMP_TH,#0
K022A:     CALL  TH_DEL
          JMP   RESET_TH1

K021B:
          DEC  TEMP_TH         ;减1
          MOV  A,TEMP_TH
          CJNE  A,#00H,K022B   ;没有到设定下限值,转
          MOV  TEMP_TH,#119
K022B:    CALL  TH_DEL
          JMP   RESET_TH1

K002:     CALL  BEEP_BL
          CLR  TR0             ;关闭中断
          RET
;-----------------------------------------------------
;键延时子程序
;多次调用报警值显示程序来延时
;-----------------------------------------------------
TL_DEL:                        ;报警低值延时
          MOV  R2,#0AH
TL_DEL1:  CALL  ALERT_TL
          CALL  ALERT_PLAY
          DJNZ  R2,TL_DEL1
          RET
TH_DEL:                        ;报警高值延时
          MOV  R2,#0AH
TH_DEL1:  CALL  ALERT_TH
          CALL  ALERT_PLAY
          DJNZ  R2,TH_DEL1
          RET
;====================================================
;实时温度值与设定报警温度值 TH、TL 比较子程序
;当实际温度大于 TH 的设定值时,显示“H”,继电器关闭。
;当实际温度小于 TH 的设定值时,显示“O”,继电器吸合。
;当实际温度小于 TL 的设定值时,显示“L”。
;闪动显示标记符 H、L、O
;====================================================
TEMP_COMP:
          SETB  TR0             ;启动中断
          MOV  A,TEMP_TH
          SUBB  A,TEMP_ZH       ;减数>被减数,则
          JC  CHULI1            ;借位标志位C=1,转
          MOV  A,TEMP_ZH
          SUBB  A,TEMP_TL       ;减数>被减数,则
          JC  CHULI2            ;借位标志位C=1,转
          JNB  FLAG2,T_COMP1    ;FLAG2=0,显示标记字符
          MOV  74H,#0AH         ;熄灭符
          LCALL  DISP1
          JMP  T_COMP2
T_COMP1:  MOV  74H,#00H
          LCALL  DISP1          ;显示"O"
T_COMP2:  CLR   RELAY           ;继电器吸合
          CLR  TR0              ;关闭中断
          RET
;---------------------------------------------
;超温处理
;---------------------------------------------
CHULI1:
          SETB  RELAY           ;继电器关闭
          JNB  FLAG2,CHULI10
          MOV  74H,#0AH         ;熄灭符
          LCALL  DISP1
          JMP  CHULI11
CHULI10:  MOV  74H,#0DH         
          LCALL  DISP1          ;显示"H"
          ;CALL  BEEP_BL        ;蜂鸣器响
CHULI11:
          CLR  TR0              ;关闭中断
          RET
;---------------------------------------------
;欠温处理
;---------------------------------------------
CHULI2:                         ;欠温处理
          JNB  FLAG2,CHULI20
          MOV  74H,#0AH         ;熄灭符
          LCALL  DISP1
          JMP  CHULI21
CHULI20:  MOV  74H,#0CH         
          LCALL  DISP1          ;显示"L"
          ;CALL  BEEP_BL        ;蜂鸣器响
CHULI21:  CLR  TR0              ;关闭中断
          RET
;------------------------------------------------------------
;把 DS18B20 暂存器里的温度报警值拷贝到EEROM
;------------------------------------------------------------
WRITE_E2:
        CALL  RESET
        MOV  A,#0CCH        ;跳过ROM匹配
        LCALL  WRITE
        MOV  A,#48H         ;温度报警值拷贝到EEROM
        LCALL  WRITE
        RET
;--------------------------------------------------------------
;把 DS18B20 EEROM 里的温度报警值拷贝回暂存器
;-------------------------------------------------------------
READ_E2:
        CALL  RESET
        MOV  A,#0CCH        ;跳过ROM匹配
        LCALL  WRITE
        MOV  A,#0B8H        ;温度报警值拷贝回暂存器
        CALL  WRITE
        RET
[page]
;*****************************************************
;  处理温度 BCD 码子程序
;****************************************************
CONVTEMP:      MOV  A,TEMPH       ;判温度是否零下
               ANL  A,#80H
               JZ  TEMPC1         ;温度零上转
               CLR  C
               MOV  A,TEMPL       ;二进制数求补(双字节)
               CPL  A             ;取反加1
               ADD  A,#01H
               MOV  TEMPL,A
               MOV  A,TEMPH       ;-
               CPL  A
               ADDC  A,#00H
               MOV  TEMPH,A          ;TEMPHC HI =符号位
               MOV  TEMPHC,#0BH
               SJMP  TEMPC11

TEMPC1:        MOV  TEMPHC,#0AH     ;
TEMPC11:       MOV  A,TEMPHC
               SWAP  A
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH             ;乘0.0625
               MOV  DPTR,#TEMPDOTTAB
               MOVC  A,@A+DPTR
               MOV  TEMPLC,A            ;TEMPLC  LOW=小数部分 BCD

               MOV  A,TEMPL             ;整数部分
               ANL  A,#0F0H
               SWAP  A
               MOV  TEMPL,A
               MOV  A,TEMPH
               ANL  A,#0FH
               SWAP  A
               ORL  A,TEMPL
               MOV  TEMP_ZH,A           ;组合后的值存入TEMP_ZH
               LCALL  HEX2BCD1
               MOV  TEMPL,A
               ANL  A,#0F0H
               SWAP  A
               ORL  A,TEMPHC            ;TEMPHC LOW = 十位数 BCD
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH
               SWAP  A                  ;TEMPLC HI = 个位数 BCD
               ORL  A,TEMPLC
               MOV  TEMPLC,A
               MOV  A,R7
               JZ  TEMPC12
               ANL  A,#0FH
               SWAP  A
               MOV  R7,A
               MOV  A,TEMPHC            ;TEMPHC HI = 百位数 BCD
               ANL  A,#0FH
               ORL  A,R7
               MOV  TEMPHC,A
TEMPC12:       RET
;-----------------------------------------------------------
;  小数部分码表
;-----------------------------------------------------------
TEMPDOTTAB:  DB   00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
             DB   06H,07H,08H,08H,09H,09H

;===========================================================

;显示区 BCD 码温度值刷新子程序

;===========================================================

DISPBCD:      MOV  A,TEMPLC
              ANL  A,#0FH
              MOV  70H,A                 ;小数位
              MOV  A,TEMPLC
              SWAP  A
              ANL  A,#0FH
              MOV  71H,A                 ;个位
              MOV  A,TEMPHC
              ANL  A,#0FH
              MOV  72H,A                 ;十位
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,A                 ;百位
              MOV  A,TEMPHC
              ANL  A,#0F0H
              CJNE  A,#010H,DISPBCD0
              SJMP  DISPBCD2

DISPBCD0:     MOV  A,TEMPHC
              ANL  A,#0FH
              JNZ  DISPBCD2               ;十位数是0
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,#0AH               ;符号位不显示
              MOV  72H,A                  ;十位数显示符号
DISPBCD2:     RET

;***************************************************************

;     温度显示子程序

;***************************************************************
;显示数据在70H - 73H 单元内,用4位共阳数码管显示,P0口输出段码数据,
;P0 口作扫描控制,每个 LED 数码管亮 2MS 时间再逐位循环。

DISP1:       MOV  R1,#70H             ;指向显示数据首址
             MOV  R5,#7FH            ;扫描控制字初值
PLAY:     ;  MOV  P0,#0FFH
             MOV  A,R5                ;扫描字放入A
             MOV  P0,A
	     SETB P2.7
	     CLR  P2.7
             MOV  A,@R1               ;取显示数据到A
             MOV  DPTR,#TAB           ;取段码表地址
             MOVC  A,@A+DPTR          ;查显示数据对应段码
             MOV  P0,A                ;段码放入P0口
	     SETB P2.6
	     CLR  P2.6
             MOV  A,R5
             JB   ACC.6,LOOP5         ;小数点处理
             SETB  P0.7
	     SETB P2.6
	     CLR  P2.6
LOOP5:       LCALL  DL_MS              ;显示2MS
             INC  R1                   ;指向下一个地址
             MOV  A,R5                 ;放回 R5 内
             JNB  ACC.3,ENDOUT        ;ACC.3=0时一次显示结束
             RR  A                    ;A 中数据循环左移
             MOV  R5,A                ;放入 R5 中
             AJMP  PLAY               ;跳回 PLAY 循环
ENDOUT:     ; MOV  P0,#0FFH            ;一次显示结束,P0口复位
            ; MOV  P2,#0FFH            ;P2口复位
             RET
 
TAB:
;定义段码对应  0   1   2   3   4   5   6   7   8   9       -   L   H   
           DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,40H,38H,76H


DL_MS:      MOV  R6,#0AH         ;2MS延时程序,LED 显示程序用
DL1:        MOV  R7,#64H
DL2:        DJNZ  R7,DL2
            DJNZ  R6,DL1
             MOV  P0,#00H         ;消隐
	     SETB P2.6
	     CLR  P2.6
            RET

;******************************************************
;单字节十六进制转 BCD
;******************************************************
HEX2BCD1:   MOV  B,#064H          
            DIV  AB               
            MOV  R7,A             
            MOV  A,#0AH
            XCH  A,B
            DIV  AB               
            SWAP  A
            ORL  A,B
            RET
;===============================================
;报警值 TH、TL 数据转换
;===============================================
ALERT_TL:
             MOV  79H,#0CH
             MOV  78H,#0BH
             MOV  A,TEMP_TL
             MOV  R0,#77H
             MOV  B,#064H
             DIV  AB
             CJNE  A,#01H,ALERT_TL1
             MOV  @R0,A
             JMP  ALERT_TL2
ALERT_TL1:   MOV  A,#0BH           ;显示“-”
             MOV  @R0,A
ALERT_TL2:   MOV  A,#0AH
             XCH  A,B
             DIV  AB
             DEC  R0
             MOV  @R0,A
             MOV  7DH,A
             DEC  R0
             MOV  @R0,B
             MOV  7EH,B
             RET
;-----------------------------------------------
ALERT_TH:
             MOV  79H,#0DH
             MOV  78H,#0BH
             MOV  A,TEMP_TH
             MOV  R0,#77H
             MOV  B,#064H
             DIV  AB
             CJNE  A,#01H,ALERT_TH1
             MOV  @R0,A
             JMP  ALERT_TH2
ALERT_TH1:   MOV  A,#0BH             ;显示“-”
             MOV  @R0,A
ALERT_TH2:   MOV  A,#0AH
             XCH  A,B
             DIV  AB
             DEC  R0
             MOV  @R0,A
             MOV  7DH,A
             DEC  R0
             MOV  @R0,B
             MOV  7EH,B
             RET
;===============================================
;报警值显示子程序
;===============================================
ALERT_PLAY:
             MOV  R1,#75H             ;指向显示数据首址
             MOV  R5,#7FH            ;扫描控制字初值
A_PLAY:    ; MOV  P0,#0FFH
             MOV  A,R5                ;扫描字放入A
             MOV  P0,A
	     SETB P2.7
	     CLR  P2.7
             MOV  A,@R1               ;取显示数据到A
             MOV  DPTR,#ALERT_TAB     ;取段码表地址
             MOVC  A,@A+DPTR          ;查显示数据对应段码
             MOV  P0,A                ;段码放入P0口
	     SETB P2.6
	     CLR  P2.6
             LCALL  DL_MS1            ;显示2MS
	     
             INC  R1                  ;指向下一个地址
             MOV  A,R5
             JNB  ACC.3,ENDOUT1
             RR  A                    ;A 中数据循环左移
             MOV  R5,A                ;放入 R5 中
             AJMP  A_PLAY             ;跳回 PLAY 循环
ENDOUT1:   ;  MOV  P0,#0FFH            ;一次显示结束,P0口复位
           ;  MOV  P2,#0FFH            ;P2口复位
             RET

ALERT_TAB:
;定义段码对应   0   1   2   3   4   5   6   7   8   9       -   L   H   
          DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,40H,38H,76H

DL_MS1:      MOV  R6,#0AH         ;2MS延时程序,LED 显示程序用
ADL1:        MOV  R7,#64H
ADL2:        DJNZ  R7,ADL2
             DJNZ  R6,ADL1
	     MOV  P0,#00H         ;消隐
	     SETB P2.6
	     CLR  P2.6
             RET
;===============================================
;蜂鸣器响一声子程序
;P3.7=0,蜂鸣器响
;===============================================
BEEP_BL:
         MOV  R6,#100
 BL2:    CALL  DEX1
         CPL  BEEP        ;对 beep 取反
         DJNZ  R6,BL2
         MOV  R5,#10
         CALL  DELAY
         RET
 DEX1:   MOV  R7,#180
 DE2:    NOP
         DJNZ  R7,DE2
         RET
DELAY:                    ;(R5)*延时10MS
         MOV  R6,#50
 DEL1:   MOV  R7,#100
         DJNZ  R7,$
         DJNZ  R6,DEL1
         DJNZ  R5,DELAY
         RET
;==================================================
         END
 
关键字:51单片机  DS18B20  温度控制  报警程序 引用地址:51单片机DS18B20温度控制报警程序(可设置温控范围)

上一篇:STC89C52单片机驱动CC1101无线模块的接收C语言程序
下一篇:51单片机编程让新手最容易出错的几点总结

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

51单片机DIY做PLC编程
有朋友想定制一个净水机控制器,有一些独特的功能要增加,但是商品控制板没有这样的功能,问我能否做一个,我觉得单片机完全能满足这种简单的控制需要,上手开始编程序时候突然感到,用PLC逻辑编这种功能是非常简单轻松的,而如果用汇编或C编却感觉有点棘手,编程效率不高,所以想为何不在单片机上实现PLC的逻辑呢?上网搜索尝试看能否找到合适的程序下载来稍微改改就能用的呢?方案几年前就有了,实际上是利用三菱的低档PLC编程软件编辑好梯形图,存盘后用专用的格式转换工具转换成HEX单片机烧写文件烧进去,尝试下载三菱PLC工具软件,但是在我的WIN7-64位系统上不能正常工作,好容易换了系统装好开发工具,但是初次上手这款开发工具,界面挺复杂的,懒得研究各个
[单片机]
<font color='red'>51单片机</font>DIY做PLC编程
篮球比赛计时器的51单片机proteus仿真
51单片机仿真计时器的原理图: 部分源程序预览: #include main.h #include delay.h #include keypad.h #include display.h void main() { INT0_Initial(); Time0_Initial(); delay_ms(10); LED = 0; while(1) { switch(key_value) { case 12: { num1 ++;key_value = 0;
[单片机]
篮球比赛计时器的<font color='red'>51单片机</font>proteus仿真
基于51单片机的IEEE-488接口设计
1 概 述   智能仪器程控接口电路的设计,首先是根据仪器的功能确定该仪器的接口功能。文中所涉及的仪器是以MCS-51系列单片机作为内部控制器的高速数据采集装置,由于A/D转换器既要向计算机输送采集结果,又要接受计算机对其工作条件的控制,因此,在程控接口电路设计时,设置了六种接口功能:源挂钩功能(选用SH1功能子集)、受者挂钩功能(选用AH1功能子集)、讲功能(选用T5功能子集)、听功能(选用L4功能子集)、远地/本地功能(选用RL功能子集)和器件触发功能(选用DT1功能子集)。 600)this.style.width='600px';" border=0> 2 接 口 功 能 (IF) 设 计   如
[单片机]
基于<font color='red'>51单片机</font>的IEEE-488接口设计
MCS51单片机调用指令LCALL addr16 ,ACALL addr11的使用介绍
LCALL addr16 ;长调用 ACALL addr11 ;绝对调用 1.LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程: (PC) (PC) + 3 (SP) (SP)+ 1 ((SP)) (PC7 ~ 0), 保护断点地址低字节; (SP) (SP)+ 2 ((SP)) (PC15 ~ 8),保存断点地址高字节; (PC) addr16 ,目的地址送PC,转子程序。 例、设(SP)= 07H,(PC)= 2100H,子程序首地址为3456H,执行:
[单片机]
基于51单片机实现短距离无线通信
1 引言 短距离无线传输具有抗干扰性能强、可靠性高、安全性好、受地理条件限制少、安装灵活等优点,在许多领域有着广泛的应用前景。低功耗、微型化是用户对当前无线通信产品尤其是便携产品的实际需求,短距离无线通信逐渐引起广泛关注。常见的短距离无线通信有基于802.11的无线局域网WLAN、蓝牙 (blueTooth)、HomeRF及欧洲的HiperLAN(高性能无线局域网),但其硬件设计、接口方式、通信协议及软件堆栈复杂,需专门的开发系统,开发成本高、周期长,最终产品成本也高。因此这些技术在嵌入式系统中并未得到广泛应用。普通RF产品不存在这些问题,且短距离无线数据传输技术成熟,功能简单、携带方便,使其在嵌入式短程无线产品中得到了
[单片机]
基于<font color='red'>51单片机</font>实现短距离无线通信
53-基于51单片机的温度检测调节系统设计
具体实现功能 系统由STC89C51单片机+液晶1602显示+DS18B20温度传感器+继电器+报警模块构成。 具体功能: 1、采用DS18B20温度传感器测温并用LCD1602显示; 2、按键为设置按键、加键和减键。可设置上下限温度控制范围; 3、当温度超过设定的上或下限时,相应的指示灯亮,同时相应的继电器吸合,继电器可以驱动负载工作; 4、温度测量范围0到99.9摄氏度,精度为0.1摄氏度。 设计背景 目前温度检测及控制系统多种多样,如智能室内调温系统、地下水室内调温系统、可编程室内自动调温系统等。恒温室内环境不但给人类提供了良好的生活空间,同时也给很多动植物提供了最佳的生活环境。随着温度检测和控制技术
[单片机]
53-基于<font color='red'>51单片机</font>的温度检测调节系统设计
在MCS51单片机中对特殊功能寄存器的C51定义
在开始讲对C51单片机中特殊寄存器(SPR)的定义前,先简单介绍下我们在进行51单片机开发时经常看到的两个关键字 sbit 和 sfr : sfr用于将一个单片机的特殊功能寄存器(specialfunctionregister)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(referto)该寄存器 sbit与sfr用法类似,只是sbit是位操作,用于将某个sfr中具体位赋值给一个变量,这样后面程序就可用通过该变量为该位清0或置1。 接着我们以STC系列的51单片机为例简单的了解下单片机的特殊功能寄存器布局,如下: MCS-51单片机中,除了程序计数器PC和4组工作寄存器组外,其它所有的寄存器均为特殊功能寄存器(S
[单片机]
在MCS<font color='red'>51单片机</font>中对特殊功能寄存器的C51定义
基于89C51单片机的环境噪声测量仪
   1 引 言      环境噪声监测,是人类提高生活质量,加强环境保护的一个重要环节,在各大城市的繁华街区和居民区,已有大型环境噪声显示器竖立街头。但目前国内的便携式噪声测试仪,多为价格昂贵的进口专用设备,除卫生、计量等环保专业部门拥有外,无法作为民用品推广普及。本文介绍一种以89C51单片机为核心,采用V/F转换技术构成的低成本、便携式数字显示环境噪声测量仪。该仪器工作稳定、性能良好,经校验定标后能满足一般民用需要,可广泛应用于工矿企业、机关、学校等需要对环境噪声进行测量和控制的场合。 2 声压级的测量机理   人耳的听阈一般是20μPa,痛阈一般是200 Pa,其间相差107倍,这样宽广的声压范围很不易测量,
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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