找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1602显示温度程序时为什么数值一直不变 求教

[复制链接]
跳转到指定楼层
楼主
ID:103999 发表于 2016-1-25 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                DQ bit p3.3
                  
                  tmph data 28h
                  tmpl data 29h
                  temp_now data 30h
                 now data 40h;存放当前时间,日期首地址
                 
                  RS  BIT  P2.0 ;
                  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_now+3, A
                    ORL  temp_now+2, A
                    ORL  temp_now+1, A
                    ORL     temp_now,   A
      DISP2:  MOV  A,temp_now+3
                 LCALL WRITE_LCDDATA
                    MOV  A,temp_now+2
                    LCALL  WRITE_LCDDATA
                    MOV  A,temp_now+1
                    LCALL  WRITE_LCDDATA
                    MOV  A,#2EH                ;'.'字符
              LCALL  WRITE_LCDDATA
                    MOV  A,temp_now
                    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_now+3,#2DH;在百位数位置放负号
                   sjmp Tmpc11
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          Tmpc1:mov temp_now+3,#20H    ;温度为正值
          Tmpc11:mov a,tmpl
                 anl a,#0fH
                 mov dptr,#Tmptab
                 movc a,@a+dptr
                 mov temp_now,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_now+3,a
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
         B2bcd1:mov a,#10
                xch a,b
                div ab
                mov temp_now+2,a
                mov temp_now+1,b
         Tmpc12:nop
         Disbcd:mov a,temp_now+3
          anl a,#0fh
                cjne a,#01,Disbcd0
          ret
         Disbcd0:mov a,temp_now+2
            anl a,#0fh
                 jnz Disbcd1
                 mov a,temp_now+3
                 mov temp_now+2,a
                 mov temp_now+3,#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     




仿真的时候一直显示096.4℃
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:103999 发表于 2016-1-25 22:33 | 只看该作者
来个高手看瞎 帮帮忙谢谢啦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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