找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2183|回复: 3
收起左侧

51单片机1602液晶模块DS18B20温度显示,带序列号4位分辨率 汇编程序

[复制链接]
ID:126173 发表于 2020-6-12 09:42 | 显示全部楼层 |阅读模式
;1602液晶模块高精度4位小数显示,温度分辨率0.0625℃      
;液晶模块第一行显示的是DS18B20的64位激光序列号        
;液晶模块第二行显示的是实际温度               



        ORG        0000H
        AJMP        START
               
        ORG        0033H
START:        
        DQ        BIT        P3.3    ;此接DS18B20信号脚
        RS         BIT         P2.0
        RW         BIT         P2.1
        E          BIT         P2.2
        LED8P        BIT        P2.6
        BLA        BIT        P2.7
        LCD         EQU         P0
        
        DS18B20                BIT        01H
        TEMPERRB        BIT        02H
        TEMPSBIT        BIT        03H
        TEMPFH        EQU        30H        ;温度符号位
        TEMPBW        EQU        31H        ;温度"百"位
        TEMPSW        EQU        32H        ;温度"十"位
        TEMPGW        EQU        33H        ;温度"个"位
        TEMPXS1        EQU        34H        ;温度小数位第"1"位
        TEMPXS2        EQU        35H        ;温度小数位第"2"位
        TEMPXS3        EQU        36H        ;温度小数位第"3"位
        TEMPXS4        EQU        37H        ;温度小数位第"4"位        
        TEMPXSD        EQU        38H
        TEMPZS        EQU        39H
        TEMPXS        EQU        3AH
        TEMPL        EQU        3BH
        TEMPH        EQU        3CH
        ID1        EQU        3DH
        ID2        EQU        3EH
        ID3        EQU        3FH
        ID4        EQU        40H
        ID5        EQU        41H
        ID6        EQU        42H
        ID7        EQU        43H
        ID8        EQU        44H
        DLCD1        EQU        46H
        DLCD2        EQU        47H
        DLCD3        EQU        48H
        DLCD4        EQU        49H
        DLCD5        EQU        4AH
        DLCD6        EQU        4BH
        DLCD7        EQU        4CH
        DLCD8        EQU        4DH
        DLCD9        EQU        4EH
        DLCD10        EQU        4FH
        DLCD11        EQU        50H
        DLCD12        EQU        51H
        DLCD13        EQU        52H
        DLCD14        EQU        53H
        DLCD15        EQU        54H
        DLCD16        EQU        55H
               
;---------------------------------------------------------

MAIN:        ACALL        GETTEMP
        JB         DS18B20,MAIN1
        AJMP        MAIN
MAIN1:        
         
        CLR        BLA                ;开启液晶背光
;        SETB        BLA                ;关闭液晶背光
        LCALL        GETROM
        LCALL        DISPLCD
        AJMP        MAIN
                                                
DISPLCD:                        ;向1602液晶模块写入显示信息
        MOV        P2,#0FFH
        MOV         LCD,#01H        ;写指令01H,清屏
        LCALL         ENABLE
        MOV         LCD,#38H        ;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口
        LCALL         ENABLE
        MOV         LCD,#0FH        ;写指令0FH,显示ON,光标ON,闪烁ON
        LCALL         ENABLE
        MOV         LCD,#06H        ;写指令06H,光标输入方式增量移位
        LCALL         ENABLE
        
        MOV        A,ID1
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD1,A
        MOV        A,ID1
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD2,A
        MOV        A,ID2
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD3,A
        MOV        A,ID2
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD4,A
        MOV        A,ID3
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD5,A
        MOV        A,ID3
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD6,A
        MOV        A,ID4
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD7,A
        MOV        A,ID4
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD8,A
        MOV        A,ID5
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD9,A
        MOV        A,ID5
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD10,A
        MOV        A,ID6
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD11,A
        MOV        A,ID6
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD12,A
        MOV        A,ID7
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD13,A
        MOV        A,ID7
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD14,A
               
        MOV        A,ID8
        SWAP        A
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD15,A
        MOV        A,ID8
        ANL        A,#0FH
        MOV        DPTR,#TABHEX
        MOVC        A,@A+DPTR
        MOV        DLCD16,A

;------- 液晶模块显示程序---------
        MOV         LCD,#80H        ;第一行显示第1个字符的位置            
        ACALL         ENABLE
        MOV         R0,#DLCD1
        CALL         WRITE1
        MOV         LCD,#0C0h        ;第二行位置                           
        CALL         ENABLE
        MOV        DLCD1,#20H
        MOV        DLCD2,#54H
        MOV        DLCD3,#45H
        MOV        DLCD4,#4DH
        MOV        DLCD5,#50H
        MOV        DLCD6,#3AH
               
        MOV        A,TEMPSW
        ORL        A,#00110000B
        MOV        DLCD7,A
        MOV        A,TEMPGW
        ORL        A,#00110000B
        MOV        DLCD8,A
        MOV        DLCD9,#2EH
        MOV        A,TEMPXS1
        ORL        A,#00110000B
        MOV        DLCD10,A
        MOV        A,TEMPXS2
        ORL        A,#00110000B
        MOV        DLCD11,A
        MOV        A,TEMPXS3
        ORL        A,#00110000B
        MOV        DLCD12,A
        MOV        A,TEMPXS4
        ORL        A,#00110000B
        MOV        DLCD13,A
        MOV        DLCD14,#0DFH
        MOV        DLCD15,#43H
        MOV        DLCD16,#20H
        MOV         R0,#DLCD1
        CALL         WRITE1
        RET

ENABLE:                                ;写命令时序
        CLR         RS
        CLR         RW
        CLR         E
;        ACALL        YS806U
        MOV        R7,#188
        DJNZ        R7,$
        SETB         E
        RET

WRITE1:                                        ;写字符串                                                   
        MOV         R1,#16
A1:        MOV         A,@R0
        CALL         WRITE2
        INC         R0
        DJNZ         R1,A1
        RET

WRITE2:              ;写单个字符                                                                             
        MOV         LCD,A
        SETB         RS
        CLR         RW                          
        CLR         E
        CALL         DELAY1
        SETB         E
        RET

DELAY1:
        MOV         R7,#1
D11:        MOV         R6,#18
D12:        DJNZ         R6,D12
        DJNZ         R7,D11
        RET

;|------------------------------------------------|
;| 读出DS18B20序列号应用程序
;|------------------------------------------------|
GETROM:        CLR         EA
        LCALL         INIT18B20
        JB         DS18B20,GETROM1
        SETB        EA
        RET
GETROM1:MOV         A,#33H
        LCALL         WRITE18B20        ;送入读DS18B20的ROM命令
        MOV         R4,#8                 ;从DS18B20中读出8字节ROM数据
        MOV         R1,#ID1
        LCALL         READ18B20
        SETB         EA
        RET

GETTEMP:CLR        EA
        LCALL         INIT18B20        ;先复位DS18B20
        JB         DS18B20,TSS2
        SETB        EA
        RET
TSS2:        MOV         A,#0CCH         ; 跳过ROM匹配
        LCALL         WRITE18B20
        MOV         A,#44H                 ; 发出温度转换命令
        LCALL         WRITE18B20
        LCALL        YS800M                ;延时0.8S,延时>750MS
        LCALL         INIT18B20
        MOV         A,#0CCH         ;跳过ROM匹配
        LCALL         WRITE18B20
        MOV         A,#0BEH         ;发出读温度命令
        LCALL         WRITE18B20
        MOV         R4,#2                 ;从DS18B20中读出2字节温度数据
        MOV         R1,#TEMPL
        LCALL         READ18B20        ;读温度
        SETB        EA


DOTEMP:        MOV        TEMPXSD,#2EH
TESTS1:        MOV        A,TEMPH
        ANL        A,#11111000B
        CJNE        A,#0F8H,TESTS0
        MOV        TEMPFH,#0FFH
        SETB        TEMPSBIT
        CLR        TEMPERRB
        LJMP        DOTEMP1
TESTS0:        CJNE        A,#00H,TEMPERR
        MOV        TEMPFH,#00H
        CLR        TEMPSBIT
        CLR        TEMPERRB
        LJMP        DOTEMP1
TEMPERR:
        SETB        TEMPERRB
        LJMP        TEMPRET
DOTEMP1:
        JNB        TEMPSBIT,DOTEMP2
        MOV        A,TEMPH
        CPL        A
        MOV        TEMPH,A
        MOV        A,TEMPL
        CPL        A
        CLR        C
        ADD        A,#1
        MOV        TEMPL,A
        MOV        A,TEMPH
        ADDC        A,#00H
        ANL        A,#00000111B
        MOV        TEMPH,A
DOTEMP2:
        MOV        A,TEMPH
        SWAP        A
        MOV        TEMPH,A
        MOV        A,TEMPL
        ANL        A,#00001111B
        MOV        TEMPXS,A
        MOV        A,TEMPL
        ANL        A,#11110000B
        SWAP        A
        MOV        R1,TEMPH
        ORL        A,R1
        MOV        TEMPZS,A
HBCD:
        MOV        A,TEMPZS
        MOV         B,#100
        DIV         AB
        MOV         TEMPBW,A
        MOV         A,#10
        XCH         A,B
        DIV         AB
        MOV         TEMPSW,A
        MOV        A,B
        MOV         TEMPGW,A
FLXS:        MOV        R2,#4
        MOV        A,TEMPXS
        ANL        A,#00001111B
        MOV        B,#4
        MUL        AB
        MOV        R1,A
        MOV        R0,#TEMPXS1
FLXS1:        MOV        DPTR,#DISPXS
        MOV        A,R1
        MOVC        A,@A+DPTR
        MOV        @R0,A
        INC        R0
        INC        R1
        DJNZ        R2,FLXS1
                        
TEMPRET:
        SETB        EA
        RET

;-----------------------------------------------------
INIT18B20:
        SETB        DQ
        NOP
        CLR        DQ
        MOV        R0,#107                ;主机发出延时537微秒的复位低脉冲[2]
        MOV         R1,#3
TSR1:        DJNZ         R0,TSR1
        MOV         R0,#107
        DJNZ         R1,TSR1
        SETB         DQ
        NOP
        NOP
        NOP
        MOV         R0,#25H
TSR2:        JNB         DQ,TSR3
        DJNZ         R0,TSR2
        AJMP         TSR4
TSR3:        SETB         DS18B20
        AJMP         TSR5
TSR4:        CLR         DS18B20
        AJMP         TSR7
TSR5:        MOV         R0,#107
TSR6:        DJNZ         R0,TSR6
TSR7:        SETB         DQ
        JNB        DQ,$
        RET


READ18B20:
        MOV         R2,#8
RE01:        CLR         C
        SETB         DQ
        NOP
        NOP
        CLR         DQ
        NOP
        NOP
        NOP
        SETB         DQ
        MOV         R3,#09
RE10:        DJNZ         R3,RE10
        MOV         C,DQ
        MOV         R3,#23
RE20:        DJNZ         R3,RE20
        RRC         A
        DJNZ         R2,RE01
        MOV         @R1,A
        INC         R1
        DJNZ         R4,READ18B20
        RET

;写DS18B20的子程序
WRITE18B20:
        MOV         R2,#8
        CLR         C
WR18:        CLR         DQ
        MOV         R3,#6
        DJNZ         R3,$
        RRC         A
        MOV         DQ,C
        MOV         R3,#23
        DJNZ         R3,$
        SETB         DQ
        NOP
        DJNZ         R2,WR18
        SETB         DQ
        RET

DISPXS:
        DB        00H,00H,00H,00H,00H,06H,02H,05H,01H,02H,05H,00H,01H,08H,07H,05H
        DB        02H,05H,00H,00H,03H,01H,02H,05H,03H,07H,05H,00H,04H,03H,07H,05H
        DB        05H,00H,00H,00H,05H,06H,02H,05H,06H,02H,05H,00H,06H,08H,07H,05H
        DB        07H,05H,00H,00H,08H,01H,02H,05H,08H,07H,05H,00H,09H,03H,07H,05H
TABHEX:        DB        30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
               


;********  延时程序  ********
YS806U:        MOV        R4,#19                 ;延时806微秒
Y1:         MOV        R5,#18                ;[1]
        DJNZ        R5,$                ;[2]
        DJNZ        R4,Y1                 ;[2]
        RET                        ;[1]

YS4722U:MOV        R4,#10                 ;延时4722微秒
Y3:        MOV        R5,#216                ;[1]
        DJNZ        R5,$                ;[2]
        DJNZ        R4,Y3                 ;[2]
        RET                        ;[1]
        
;********** 10ms延时程序 ***********
YS10MS:        MOV        R7,#128
DL1:        MOV        R6,#0FFH
DL0:        DJNZ        R6,DL0
        DJNZ        R7,DL1
        RET

YS118M:        MOV          R1,#25                ;延时118MS
Y5:        ACALL  YS4722U
        DJNZ   R1,Y5
        RET

YS500M:        MOV        R3,#40                ;延时1000MS
Y5_1:        MOV        R4,#10                 ;[1]延时5MS
Y5_2:        MOV        R5,#228                ;[1]
        DJNZ        R5,$                ;[2]
        DJNZ        R4,Y5_2                ;[2]
        DJNZ        R3,Y5_1                ;[2]
        RET                        ;[1]

YS800M:        MOV        R3,#45
YYSS1:        
;        LCALL        DISP
        DJNZ        R3,YYSS1
        RET

YS1000M:MOV        R3,#200                ;延时1000MS
Y4_1:        MOV        R4,#10                 ;[1]延时5MS
Y4_2:        MOV        R5,#228                ;[1]
        DJNZ        R5,$                ;[2]
        DJNZ        R4,Y4_2                ;[2]
        DJNZ        R3,Y4_1                ;[2]
        RET                        ;[1]


;******* 按键音效延时(50ms)子程序 *******
SOUND:        MOV        R7,#228
SDL1:        CPL        p3.7
        MOV        R6,#0FFH
SDL0:        DJNZ        R6,SDL0
        DJNZ        R7,SDL1
        RET

        END

回复

使用道具 举报

ID:328014 发表于 2020-6-12 15:19 | 显示全部楼层
有原理图吗?
回复

使用道具 举报

ID:99987 发表于 2020-6-12 16:14 | 显示全部楼层
不错很牛!
回复

使用道具 举报

ID:126173 发表于 2020-6-13 17:39 | 显示全部楼层
51单片机驱动 DS18B20 就不需要原理图了吧,单片机最小系统,然后我是用P3.3接的DS18B20数据脚,你也可以跟据你的需要去接。很简单的。
我这里到是有自己用示波器 测的 DS18B20在11.0592MHZ晶振的51单片机系统里的时序波形图,不过整个CSV文件有160M多,不方便上传,而且你看的话也会觉得枯燥无趣的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表