找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2482|回复: 4
打印 上一主题 下一主题
收起左侧

求教 为什么用1602显示温度不变化仿真的时候 一直显示094.6℃

[复制链接]
跳转到指定楼层
楼主
ID:103999 发表于 2016-1-25 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      DQ bit p3.3
                  
                  tmph data 28h
                  tmpl data 29h
                  temp_xiao equ 30h
      temp_ge   equ 31h
      temp_shi  equ 32h
      temp_bai  equ 33h
      now data 40h;存放当前时间,日期首地址
      IO bit p1.1
      sclk bit p1.0
      rst bit p1.2
                  RS  BIT  P2.0 ;这3位是液晶屏的控制信号,连接方式由具体硬件而定
                  RW  BIT  P2.1
               E   BIT  P2.2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      org 0000h
      jmp reset
      org 0030h
      reset:mov sp,#60h            
            main:
                  call DS18B20_Reset
                  mov a,#0cch
                  call DS18B20_Write
                  mov a,#44h
               call DS18B20_Write
           led_1:
               call DS18B20_Reset
                  mov a,#0cch
                  call DS18B20_Write
               mov a,#0beh
               call DS18B20_Write
               call DS18B20_Read
               mov tmpl,a
                  call DS18B20_Read
                  mov tmph,a
                  lcall Cvttmp
      lcall disp
                  lcall delay_1
                  lcall delay_1
         ajmp main
      
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      disp:   LCALL  INITIAL         
           DISP1: MOV  A,#30H
                    ORL  temp_bai, A
                    ORL  temp_shi, A
                    ORL  temp_ge, A
                    ORL     temp_xiao,   A
      DISP2:  MOV  A,temp_bai
                 LCALL WRITE_LCDDATA
                    MOV  A,temp_shi
                    LCALL  WRITE_LCDDATA
                    MOV  A,temp_ge
                    LCALL  WRITE_LCDDATA
                    MOV  A,#2EH                ;'.'字符
              LCALL  WRITE_LCDDATA
                    MOV  A,temp_xiao
                    LCALL  WRITE_LCDDATA
                    MOV  A,#0DFH               ;下面两个是摄氏度的数字符号
                    LCALL  WRITE_LCDDATA
                    MOV  A,#43H
                    LCALL  WRITE_LCDDATA
                 RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
   Cvttmp:mov a,tmph
                   anl a,#08h
             jz Tmpc1
                   clr c
                   mov a,tmpl
                   cpl a
                   add a,#1
                   mov tmpl,a
                   mov a,tmph
                   cpl a
                addc a,#0
                   mov tmph,a
                   mov temp_bai,#2DH;在百位数位置放负号
                   sjmp Tmpc11
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          Tmpc1:mov temp_bai,#20H    ;温度为正值
          Tmpc11:mov a,tmpl
                 anl a,#0fH
                 mov dptr,#Tmptab
                 movc a,@a+dptr
                 mov temp_xiao,a
                 mov a,tmpl
                 anl a,#0f0h
                 swap a
                 mov tmpl,a
                 mov a,tmph
                 anl a,#0fh
                 swap a
                 orl a,tmpl
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
         H2bcd:mov b,#100
               div ab
               jz B2bcd1
               mov temp_bai,a
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
         B2bcd1:mov a,#10
                xch a,b
                div ab
                mov temp_shi,a
                mov temp_ge,b
         Tmpc12:nop
         Disbcd:mov a,temp_bai
          anl a,#0fh
                cjne a,#01,Disbcd0
          ret
         Disbcd0:mov a,temp_ge
            anl a,#0fh
                 jnz Disbcd1
                 mov a,temp_bai
                 mov temp_ge,a
                 mov temp_bai,#20H
         Disbcd1:ret
         tmptab:db 0,1,2,3,3,4,4,5,6,6,7,8,8,9,9
     
  
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   DS18B20_Reset:
                 clr DQ
              mov r7,#48
                 call delay_0
                 setb DQ
              mov r7,#6
                 call delay_0
                 mov c,DQ
                 mov r7,#42
              call delay_0
                 jc DS18B20_Reset
               ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        delay_0:
               nop
               nop
               nop
               nop
               nop
               nop
               nop
               nop
               djnz r7,delay_0
               ret
        delay_1:mov r6,#50
        dl1:    mov r7,#50
                djnz r7,$
                djnz r6,dl1
                ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       DS18B20_Write:
            push b
               mov b,#08
       write_0:   
               clr DQ
               nop
               nop
               rrc a
               mov DQ,c
               mov r7,#6
               call delay_0
            setb DQ
               djnz b,write_0
               pop b
               ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      DS18B20_Read:
              clr a
              push b
              mov b,#08
      read_0:
             clr DQ
             nop
             nop
             setb DQ
             nop
             nop
             mov c,DQ
             rrc a
             mov r7,#6
             call delay_0;延迟时间
             djnz b,read_0
             pop b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;---液晶屏初始化,具体请参考资料-------------------------------------------------
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
  lcall DELAY1MS
        clr  E
  lcall DELAY1MS
        LCALL  DELAY
        setb  E
        RET
;----写液晶数据的子程序---------------------------------------------
WRITE_LCDDATA:
  MOV  P0,A
        SETB  RS ;写入数据
        CLR  RW
  lcall DELAY1MS
        clr  E
  lcall DELAY1MS
        LCALL  DELAY ;判断液晶模块是否忙?
     setb  E
        RET
;----查看液晶忙碌信号的子程序---------------------------------------------------------
DELAY:  MOV  P0,#0FFH ;判断液晶显示器是否忙的子程序
        CLR  RS
        SETB  RW
        CLR  E
        NOP
        SETB  E
        JB   P0.7,DELAY ;如果P0.7为高电平表示忙就循环等待
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY1MS:
  MOV R6,#66H
DL10:
    MOV R5,#03H
    DJNZ R5,$    ;延时1ms
    DJNZ R6,DL10
    RET
end     
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2016-1-25 23:04 | 只看该作者
软硬件都没问题的话,点击1820红色那两个按键温度才会改变的。
回复

使用道具 举报

板凳
ID:103999 发表于 2016-1-26 12:57 | 只看该作者
wc86110 发表于 2016-1-25 23:04
软硬件都没问题的话,点击1820红色那两个按键温度才会改变的。

一开始温度就不对啊 然后点了改不了 硬件不会有问题 软件在上面我看着没问题能不能帮我看看 急用
回复

使用道具 举报

地板
ID:99525 发表于 2016-1-28 12:45 | 只看该作者
18B20用VCC脚接电源,信号脚不要加上拉,直接连单片机~
回复

使用道具 举报

5#
ID:104559 发表于 2016-2-18 17:25 | 只看该作者
用vcc接电源,不要用上拉电阻
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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