您的位置:首页版主原创51示例程序
内容搜索: 标题内容作者
     
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

89C51控制数显示温度计DS18B20(已调试OK)

[日期:2008-01-05 ] [来源:东哥单片机学习网www.picavr.com 作者:本站原创] [字体: (投递新闻)
89C51控制的数显示温度计DS18B20

;***************WAVE-E6000/T**********************
;*MCU:          AT89C51                          *
;*MCU-crystal:  12M                              *
;*Version:      03                               *
;*Last Updata:  2005-10-11                       *
;*Author:       www.picavr.com                   *
;*Description:                                   *
;参考一本书上做的,DS18B20的读写程序,数据脚P1.7   *
;温度传感器18B20汇编程序,采用器件默认的12位转化  *
;最大转化时间750微秒,显示温度-55到+125度,显示精度*
;为0.1度,显示采用4位LED共阳显示测温值          *
;*************************************************
;单片机内存分配申明!
;*************************************************
TEMPER_L  EQU   40H     ;用于保存读出温度的低8位
TEMPER_H  EQU   41H     ;用于保存读出温度的高8位
TMROMVH   EQU   42H     ;报警上限
TMROMVL   EQU   43H     ;报警下限
FLAG1     EQU   38H     ;是否检测到DS18B20标志位
TEMPL     EQU   30H     ;用于保存读出温度的低8位
TEMPH     EQU   31H     ;用于保存读出温度的高8位
TEMPHC    EQU   32H     ;温度转换寄存器低8位
TEMPLC    EQU   33H     ;温度转换寄存器高8位
BUF1      EQU   34H     ;显示缓冲寄存器小数位
BUF2      EQU   35H     ;显示缓冲寄存器个数位
BUF3      EQU   36H     ;显示缓冲寄存器十数位
BUF4      EQU   37H     ;显示缓冲寄存器百数位
T10MS     EQU   29H     ;
TMSETVL   EQU   28H     ;温度下限设定值
TMSETVH   EQU   27H     ;温度上限设定值
DISL_VL   EQU   26H     ;报警下限个位数存放内存位置
DISL_VH   EQU   25H     ;报警下限十位数存放内存位置
DISH_VL   EQU   24H     ;报警上限个位数存放内存位置
DISH_VH   EQU   23H     ;报警上限十位数存放内存位置
BT_VL     EQU   22H     ;比较当前显示数据与设定数据寄存器
;**********************************************
TEMPDIN   BIT   P1.7    ;数据脚定义
K6        BIT   P2.5    ;
K5        BIT   P2.6    ;
K4        BIT   P2.7    ;
K3        BIT   P1.3    ;
K2        BIT   P1.4    ;
;**********************************************
; BIT FLAG DEFINATION
;**********************************************
TEMPCONV  EQU   00H     ;
TIME1SOK  EQU   01H     ;
TEMPONEOK EQU   02H     ;
;**********************************************
         ORG     0000H             ;主程序入口地址
         AJMP    MAIN              ;转主程序
         ORG     0003H             ;外中断0中断入口
         DB      00H,00H,00H,00H,00H,00H,00H;
         RETI                      ;跳至INTEX0执行中断服务程序
         ORG     000BH             ;定时器T0中断入口地址
         AJMP    TIMER0            ;
         RETI                      ;跳至定时器T0执行中断服务程序
         ORG     0013H             ;外中断1中断入口
         DB      00H,00H,00H,00H,00H,00H,00H ;
         RETI                      ;跳至INTEX1执行中断服务程序
         ORG     001BH             ;定时器T1中断入口地址
         DB      00H,00H,00H,00H,00H,00H,00H ;
         RETI                      ;中断返回(不开中断)
         ORG     0023H             ;串行口中断入口地址
         DB      00H,00H,00H,00H,00H,00H,00H ;
         RETI                      ;中断返回(不开中断)
;**********************************************
          ORG    100H              ;
MAIN:
          MOV    SP,  #60H         ;
          MOV    P1,  #0FFH        ;
          MOV    TMOD,#01H         ;
          MOV    TH0, #0B1H        ;SET T0 VALUE 10MS
          MOV    TL0, #0E0H        ;
          MOV    DISL_VL,#00H      ;
          MOV    DISL_VH,#00H      ;
          MOV    DISH_VL,#00H      ;
          MOV    DISH_VH,#00H      ;
          MOV    TMSETVL,#30H      ;
          MOV    TMSETVH,#35H      ;
          CLR    EA                ;打开CPU总中断请求
          CLR    TR0               ;
          CLR    ET0               ;
          MOV    PSW, #00H         ;
          CLR    TEMPCONV          ;
          CLR    TEMPONEOK         ;
;**************************************
LPTEMP:   LCALL   INIT_1820        ;先复位DS18B20
          MOV     A,#0CCH          ;跳过ROM匹配
          LCALL   WRITE_1820       ;
          MOV     A,#0B8H          ;发出读温度命令
          LCALL   WRITE_1820       ;
          LCALL   GET_TM           ;调用读温度子程序
          LCALL   CONVTEMP         ;温度BCD码计算处理子程序
          LCALL   DISPBCD          ;显示区BCD码温度值刷新子程序
;**************************************
          MOV     A,TMSETVL        ;调下限设置值到调整显示寄存
          ANL     A, #0FH          ;
          MOV     DISL_VL,A        ;
          MOV     A,TMSETVL        ;
          SWAP    A                ;
          ANL     A, #0FH          ;
          MOV     DISL_VH,A        ;

          MOV     A,TMSETVH        ;调上限设置值到调整显示寄存
          ANL     A, #0FH          ;
          MOV     DISH_VL,A        ;
          MOV     A,TMSETVH        ;
          SWAP    A                ;
          ANL     A, #0FH          ;
          MOV     DISH_VH,A        ;
;*************************************
LPTEMP1:  LCALL   KEYWORK          ;
          LCALL   DISPLAY          ;调用数码管显示子程序
          LCALL   BT_WORK          ;
;*************************************         
          MOV     A,BT_VL          ; 比较当前温度与设定下限温度值
          CJNE    A,TMSETVL,TEMP_VH1;
          CLR     P1.6             ;
TEMP_VH1: JNC     TEMP_VH          ;
          CLR     P1.6             ;
         
TEMP_VH:  CJNE    A,TMSETVH,TM_WORK1;比较当前温度与设定上限温度值
          SETB    P1.6             ;
TM_WORK1: JC      TM_WORK          ;
          SETB    P1.6             ;         
;*************************************                 
TM_WORK:
          JB      TEMPONEOK,LPTEMP1;
          LCALL   GET_TEMPER       ;调用读温度子程序
          LCALL   CONVTEMP         ;温度BCD码计算处理子程序
          LCALL   DISPBCD          ;显示区BCD码温度值刷新子程序
          CPL     P3.0             ;
          AJMP    LPTEMP1          ;
;**************************************
BT_WORK:
          MOV     BT_VL,BUF2       ;当前显示保存是转换程序
          MOV     A,BUF3           ;
          SWAP    A                ;
          ORL     A,BT_VL          ;
          MOV     BT_VL,A          ;
          RET                      ;
;**************************************
KEYWORK:
          ORL     P2,#0F0H    ;置列线输入状态
          MOV     A, P2     ;读入P0口值
          ANL     A,#0F0H     ;
          MOV     B,A              ;KEYY口值暂存B中
     CJNE    A,#0F0H,KEYHIT    ;不等于#0FFH,转KEYHIT(有键按下)
KEYOUT:   RET                      ;
KEYHIT:
          LCALL   DL10MS           ;延时去抖动
;          LCALL   DL10MS           ;
          MOV     A, P2            ;再读入P0口值至A
          ANL     A,#0F0H          ;
     CJNE    A,B,KEYOUT    ;A不等于B(是干扰),子程序返回
;**************************************
          JNB     K4, K4WORK       ;
          JNB     K6, K6WORK       ;
          JNB     K5, K5WORK       ;
          AJMP    KEYOUT           ;
;*************************************
K6WORK:   JNB     TEMPCONV,KEYOUT  ; 设定上限值调整程序
          CPL     P3.4             ;
          INC     DISL_VL          ;
          MOV     A, DISL_VL       ;
          CJNE    A, #10,K6OUT     ;
          MOV     DISL_VL,#00H     ;

          INC     DISL_VH          ;
          MOV     A,DISL_VH        ;
          CJNE    A, #10,K6OUT     ;
          MOV     DISL_VH,#00H     ;

K6OUT:    MOV     BUF2,DISL_VL     ;
          MOV     BUF3,DISL_VH     ;
          AJMP    KEYOUT           ;
;************************************
K5WORK:   JNB     TEMPCONV,KEYOUT  ;设定下限值调整程序
          CPL     P3.5             ;
          INC     DISH_VL          ;
          MOV     A, DISH_VL       ;
          CJNE    A, #10,K5OUT     ;
          MOV     DISH_VL,#00H     ;

          INC     DISH_VH          ;
          MOV     A,DISH_VH        ;
          CJNE    A, #10,K5OUT     ;
          MOV     DISH_VH,#00H     ;

K5OUT:    MOV     BUF2,DISH_VL     ;
          MOV     BUF3,DISH_VH     ;
          AJMP    KEYOUT           ;
;***************************************
K4WORK:   LCALL   INIT_1820        ;先复位DS18B20
          CPL     TEMPONEOK        ;
          CPL     TEMPCONV         ;
          CPL     P3.6             ;
;**************************************
          LCALL   INIT_1820        ;先复位DS18B20
          MOV     A,#0CCH          ;跳过ROM匹配
          LCALL   WRITE_1820       ;
          MOV     A,#4EH           ;写入温度限制指令
          LCALL   WRITE_1820       ;
;***************************************
          MOV     A,DISL_VL        ; 写入设定下限值
          MOV     TMSETVL,A        ;
          MOV     A,DISL_VH        ;
          SWAP    A                ;
          ORL     A,TMSETVL        ;
          MOV     TMSETVL,A        ;
          LCALL   WRITE_1820       ;

          MOV     A,DISH_VL        ;写入设定上限值
          MOV     TMSETVH,A        ;
          MOV     A,DISH_VH        ;
          SWAP    A                ;
          ORL     A,TMSETVH        ;
          MOV     TMSETVH,A        ;
          LCALL   WRITE_1820       ;
;***************************************
          LCALL   INIT_1820        ;先复位DS18B20
          MOV     A,#0CCH          ;跳过ROM匹配
          LCALL   WRITE_1820       ;
          MOV     A,#48H           ;温度上限和下值COPY回E2PRAM
          LCALL   WRITE_1820       ;

          LCALL   WAITREL          ;
          AJMP    KEYOUT           ;
;*************************************
WAITREL:
          LCALL   DLDISP          ;调显示程度防止显示闪烁
          MOV     A,    P2         ;
          ANL     A,    #0F0H      ;
          XRL     A,    #0F0H      ;
          JNZ     WAITREL          ;
          RET                      ;
;***************************************
; 读出转换后的温度值
;***************************************
GET_TEMPER:
           SETB    TEMPDIN        ;
           LCALL   INIT_1820      ;先复位DS18B20
           JB      FLAG1,TSS2
           RET                    ;判断DS1820是否存在?若DS18B20不存在则返回
TSS2:
           CLR     P3.3           ;DS18B20已经被检测到!!
           MOV     A,#0CCH        ;跳过ROM匹配
           LCALL   WRITE_1820
           MOV     A,#44H         ;发出温度转换命令
           LCALL   WRITE_1820
;*****************************************
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
;*****************************************
           MOV     R3,#5
LPDISP:    LCALL   DISPLAY
           DJNZ    R3,LPDISP
;*****************************************
GET_TM:    LCALL   INIT_1820       ;准备读温度前先复位

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

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

           LCALL   READ_18200      ;将读出的温度数据保存到40H/41H
           RET
;*******************************************
;写DS18B20的子程序(有具体的时序要求)
;*******************************************
WRITE_1820:
           MOV     R2,#8          ;一共8位数据
           CLR     C              ;
WR1:
           CLR     TEMPDIN        ;
           MOV     R3,#6
           DJNZ    R3,$
           RRC     A
           MOV     TEMPDIN,C      ;
           MOV     R3,#23
           DJNZ    R3,$
           SETB    TEMPDIN        ;
           NOP
           DJNZ    R2,WR1         ;
           SETB    TEMPDIN        ;
           RET
;*************************************
; 这是DS18B20复位初始化子程序
;*************************************
INIT_1820:
           SETB    TEMPDIN
           NOP
           CLR     TEMPDIN        ;主机发出延时537微秒的复位低脉冲
           MOV     R1,#3
TSR1:      MOV     R0,#107
           DJNZ    R0,$
           DJNZ    R1,TSR1
           SETB    TEMPDIN        ;然后拉高数据线
           NOP
           NOP
           NOP
           MOV     R0,#25H
TSR2:
           JNB     TEMPDIN,TSR3   ;等待DS18B20回应
           DJNZ    R0,TSR2
           LJMP    TSR4           ;延时
TSR3:
           SETB    FLAG1          ;置标志位,表示DS1820存在
           CLR     P3.7           ;检查到DS18B20就点亮P3.7LED
           LJMP    TSR5
TSR4:
           CLR     FLAG1          ;清标志位,表示DS1820不存在
           CLR     P3.1
           LJMP    TSR7
TSR5:      MOV     R0,#117
TSR6:      DJNZ    R0,TSR6        ;时序要求延时一段时间
TSR7:      SETB    TEMPDIN        ;
           RET

;*************************************
;处理温度BCD码子程序
;*************************************
CONVTEMP: MOV     A,TEMPH          ;
          ANL     A,#80H           ;
          JZ      TEMPC1           ; 判断温度是否在零下?

          CLR     C                ; 温度值补码 变成原码
          MOV     A,TEMPL          ;
          CPL     A
          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         ; 计算小数位温度BCD值
          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          ; 计算整数位温度BCD值
          ANL     A,#0F0H          ;
          SWAP    A                ;
          MOV     TEMPL,A          ;
          MOV     A,TEMPH          ;
          ANL     A,#0FH           ;
          SWAP    A                ;
          ORL     A,TEMPL          ;
          MOV     TEMPER_L ,A      ;
          LCALL   HEX2BCD1         ; 调用单字节十六进制转BCD子程序
;************************************
          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      TEMPOUT          ;
          ANL     A,#0FH           ;
          SWAP    A                ;
          MOV     R7,A             ;
          MOV     A,TEMPHC         ; TEMPHC HI = 百位数 BCD
          ANL     A,#0FH           ;
          ORL     A,R7             ;
          MOV     TEMPHC,A         ;
TEMPOUT:  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      BUF1,A           ; 显示小数
         MOV      A,TEMPLC         ;
         SWAP     A                ;
         ANL      A,#0FH           ;
         MOV      BUF2,A           ; 显示个位
         MOV      A,TEMPHC         ;
         ANL      A,#0FH           ;
         MOV      BUF3,A           ; 显示十位
         MOV      A,TEMPHC         ;
         SWAP     A                ;
         ANL      A,#0FH           ;
         MOV      BUF4,A           ; 显示百位
         MOV      A,TEMPHC         ;
         ANL      A,#0F0H          ;
         CJNE     A,#10H,DISPBCD0  ; 百位数=0?
         SJMP     DISPOUT          ;
DISPBCD0:
         MOV      A, TEMPHC        ;
         ANL      A, #0FH          ;
         JNZ      DISPOUT          ; 十位数是0?
         MOV      A,TEMPHC         ;
         SWAP     A                ;
         ANL      A,#0FH           ;
         MOV      BUF4,0AH         ; 符号位不显示
         MOV      BUF3,A           ; 十位数显示符号
DISPOUT: RET                       ;                 ;
;*************************************
;单字节十六进制转BCD
;*************************************
HEX2BCD1:MOV     B,#64H            ; 十六进制 ->BCD
         DIV     AB                ; B=A%100
         MOV     R7,A              ; R7=百位数
         MOV     A,#0AH            ;
         XCH     A,B               ;
         DIV     AB                ; B=A%B
         SWAP    A                 ;
         ORL     A,B               ;
         RET                       ;
;**************************************
;DECIMAL DATA IS TRANSISTERED HEX DATA
;INPUT: A=DECIMAL DATA
;OUTPUT:A
;USED REGISTER: R1,R2,A
;**************************************
DECHEX:   MOV   R1,    A
          SWAP  A
          ANL   A,     #0FH
          RL    A
          MOV   R2,    A
          RL    A
          RL    A
          ADD   A,     R2
          MOV   R2,    A
          MOV   A,     #0FH
          ANL   A,     R1
          ADD   A,     R2
          RET
;*************************************
; Calculate CRC-8 Values, Uses The
;CCITT-8 Polynomial,Expressed As
; X^8+X^5+X^4+1
;*************************************
CRC8CAL: PUSH    ACC               ;
         MOV     R7,#08H           ; Number Bits Byte
CRC8LOOP1:
         XRL     A,B               ; Calculate CRC
         RRC     A                 ; Move T0 Carry
         MOV     A,B               ; Get The Last CRC Value
         JNC     CRC8LOOP2         ; Skip If Data==0
         XRL     A,#18H            ; Update The CRC Value
CRC8LOOP2:
         RRC     A                 ; Position The New CRC
         MOV     B,A               ; Store The New CRC
         POP     ACC               ; Get The Remaining Bits
         RR      A                 ; Possition The Next Bit
         PUSH    ACC               ; Save The Remaining Bits
         DJNZ    R7,CRC8LOOP1      ; Repeat For 9 Bits
         POP     ACC               ;
         RET                       ;
;******************************************
;读DS18B20的程序,从DS18B20中读出9个字节数据
;开始的两个字节为温度数据
;******************************************
READ_18200:
           MOV     R4,#9            ; 将温度高位和低位从DS18B20中读出
           MOV     R1,#TEMPER_L     ; 低位存入40H(TEMPER_L),高位存入41H(TEMPER_H)
           MOV     B, #00H          ;
;************************************
RE00:
           MOV     R2,#8            ; 数据一共有8位
RE01:
           CLR     C
           SETB    TEMPDIN          ;
           NOP
           NOP
           CLR     TEMPDIN          ;
           NOP
           NOP
           NOP
           SETB    TEMPDIN          ;
           MOV     R3,#9
RE10:
           DJNZ    R3,RE10          ;
           MOV     C,TEMPDIN        ;
           MOV     R3,#23
RE20:
           DJNZ    R3,RE20          ;
           RRC     A
           DJNZ    R2,RE01          ;
;************************************
           MOV     @R1,A            ;
           INC     R1               ;
           LCALL   CRC8CAL          ;
           DJNZ    R4,RE00          ;
           MOV     A,B              ;
           JNZ     READ_OUT         ;
           MOV     TEMPL,TEMPER_L   ;
           MOV     TEMPH,TEMPER_H   ;
           MOV     TMSETVL,TMROMVL  ;
           MOV     TMSETVH,TMROMVH  ;
READ_OUT:  RET                      ;
;****************************************
; TIMER0 INTERRUPT SUBROUTE
; GERANATE AN INTERRUPT PER 10ms
;****************************************
TIMER0:   PUSH   PSW                  ; PROTECT PSW,ACC REGISTER
          PUSH   ACC                  ;
          MOV    TL0,   #0B1H         ;
          MOV    TH0,   #0E0H         ;
          INC    T10MS                ;
          MOV    A,T10MS              ;
          CJNE   A,#05H,TMREND        ;
          MOV    T10MS,#00H           ;
          SETB   TIME1SOK             ;

          LCALL  GET_TEMPER           ;调用读温度子程序
          LCALL  CONVTEMP             ;温度BCD码计算处理子程序
          LCALL  DISPBCD              ;显示区BCD码温度值刷新子程序
          LCALL  DISPLAY              ;
TMREND:   POP    ACC                  ;
          POP    PSW                  ;
          RETI                        ;
;*****************************************
;显示子程序
;*****************************************
DISPLAY:
           MOV     DPTR,#NUMTAB     ;指定查表启始地址
           MOV     R0,#6
DP11:      MOV     R1,#40           ;显示1000次

DPLP:      MOV     A,BUF1           ;取小位数
           MOVC    A,@A+DPTR        ;查小位数的7段代码
           MOV     P0,A             ;送出小位的7段代码
           CLR     P2.3             ;开小位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.3             ;

           MOV     A,BUF2           ;取个位数
           MOVC    A,@A+DPTR        ;查个位数的7段代码
           MOV     P0,A             ;送出个位的7段代码
           CLR     P0.5             ;
           CLR     P2.2             ;开个位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.2             ;

           MOV     A,BUF3           ;取十位数
           MOVC    A,@A+DPTR        ;查十位数的7段代码
           MOV     P0,A             ;送出十位的7段代码
           CLR     P2.1             ;开十位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.1             ;

           MOV     A,BUF4           ;取百位数
           MOVC    A,@A+DPTR        ;查百位数的7段代码
           MOV     P0,A             ;送出百位的7段代码
           CLR     P2.0             ;开百位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.0             ;

           DJNZ    R1,DPLP          ;250次没完循环
           DJNZ    R0,DP11          ;4个100次没完循环
           RET
;*******************************************          
DLDISP:    MOV     A,BUF1           ;取小位数
           MOVC    A,@A+DPTR        ;查小位数的7段代码
           MOV     P0,A             ;送出小位的7段代码
           CLR     P2.3             ;开小位显示
           ACALL   DL1ms1           ;显示1ms
           SETB    P2.3             ;

           MOV     A,BUF2           ;取个位数
           MOVC    A,@A+DPTR        ;查个位数的7段代码
           MOV     P0,A             ;送出个位的7段代码
           CLR     P0.5             ;
           CLR     P2.2             ;开个位显示
           ACALL   DL1ms1           ;显示1ms
           SETB    P2.2             ;

           MOV     A,BUF3           ;取十位数
           MOVC    A,@A+DPTR        ;查十位数的7段代码
           MOV     P0,A             ;送出十位的7段代码
           CLR     P2.1             ;开十位显示
           ACALL   DL1ms1           ;显示1ms
           SETB    P2.1             ;

           MOV     A,BUF4           ;取百位数
           MOVC    A,@A+DPTR        ;查百位数的7段代码
           MOV     P0,A             ;送出百位的7段代码
           CLR     P2.0             ;开百位显示
           ACALL   DL1ms1           ;显示1ms
           SETB    P2.0             ;
           RET                      ;      
;**************************************
;10毫秒延时程序
;**************************************
DL10MS:   LCALL   DLDISP             ;
          RET                        ;
;****************************************
;0.2MS延时(按12MHZ算)
;****************************************
DL1MS:     MOV     R7,#200
           DJNZ    R7,$
           RET
;****************************************
;0.2MS延时(按12MHZ算)
;****************************************
DL1MS1:    MOV     R7,#100
           DJNZ    R7,$
           RET          
;****************************************
;7段数码管0~9数字的共阳显示代码
;****************************************
NUMTAB:
;         DB     0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;
          DB     22H,0FAH,31H,25H,0ACH,64H,60H,2FH,20H,24H,0FFH,0FDH ;

;               "0"  "1"  "2"  "3"  "4" "5" "6" "7"  "8" "9" "不亮" "-"
;****************************************
          END



DS1820_中文手册

 

阅读:
录入:admin

推荐 】 【 打印
本文评论
      全部评论
    苦瓜 于29日评论道: 查看全部评论  
TEMPCONV EQU 00H ; TIME1SOK EQU 01H ; TEMPONEOK EQU 02H 实在不看不懂着几个数据是做什么用的 帮忙解决下
    网友 于28日评论道: 查看全部评论  
请问你的晶振值是怎么却定的啊
    JETTA会员 于18日评论道: 查看全部评论  
怎么会有4K,你搞错了吧,你要的PROTEL图我没找到,你可画一下也很快的.
    skn700c 于18日评论道: 查看全部评论  
就是Protel原理图。我想自己做一个,把单片机好还学习一下.还有就是你的程序有24K,但是AT89C51的ROM只有4K,是否要进行存储扩展?
    skn700c 于18日评论道: 查看全部评论  
p3.4到p3.7四个引脚上为什么要接四个发光二极管?还有就是sw1,sw2,sw3设定好后怎样返回主程序?请老大指点一下。谢谢了。我的邮箱:skn700c@sina.com
    JETTA会员 于18日评论道: 查看全部评论  
可以用74LS244去驱动四个LED管,DS18B20的中文资料以放到网上了,你要什么资料.
    skn700c会员 于17日评论道: 查看全部评论  
老大,可不可以用74LS244去驱动四个LED管呢?关于《89C51控制数显示温度计DS18B20》的资料能不能发点给我,谢了!
    JETTA会员 于14日评论道: 查看全部评论  
回复以发到你邮箱了
    JETTA会员 于14日评论道: 查看全部评论  
不好意思,这段时间很忙,没开邮箱.
    宝宝 于13日评论道: 查看全部评论  
请问你是没上网还是你也不知道你程序的原理啊? 怎么这么久也不回我呢?
发表评论


点评: 字数
姓名:
赞助商广告