我的仿真图也改了下,用的共阳极数码管,自己也用了别的显示程序测了,没得问题。但是我程序一仿真数码管就没得动静
程序:TEMP_ZH EQU 30H ;温度存放单元
TEMPL EQU 25H ;低字节存放
TEMPH EQU 26H ;高字节存放
TEMP_TH EQU 27H ;高温报警温度
GEW EQU 24H ;定义个位
SHI EQU 23H ;定义十位
BAI EQU 22H ;定义百位
K1 EQU P1.0
K2 EQU P1.1
K3 EQU P1.2
BUZ EQU P2.4 ;蜂鸣
FLAG EQU 21H.0 ;温度传感器标志位
DQ EQU P3.3
;******************主程序************************
ORG 0000H
SJMP START
ORG 0030H
START: MOV SP, #60H
MOV P0, #0FFH ;让p0输出高电平,熄灭数码管
MOV P2, #0F0H
MOV R7, #0
MIAN: MOV TEMP_TH, #85 ;设立高温报警温度为85
LOOP4: ACALL RESET ;18B20复位程序
LOOP1: JNB FLAG, LOOP4
LOOP: ACALL ZXD ;调用读取温度子程序
ACALL TURN ;调用数据转化程序
ACALL DISPLAY ;调用显示程序
LOOP2: ACALL KEY ;调用键盘
INC TEMP_ZH
JMP LOOP
;*******************DS18B20复位初始化程序************************
RESET: SETB DQ
NOP
NOP
CLR DQ
MOV R1, #3
DLY: MOV R0, #107
DJNZ R0, $
DJNZ R1, DLY ;延时648μs程序
SETB DQ ;拉高数据线
NOP
NOP
NOP
MOV R0, #25H
T2: JNB DQ, T3
DJNZ R0, T2
JMP T4
T3: SETB FLAG
JMP T5
T4: CLR FLAG
JMP T7
T5: MOV R0, #249
T6: DJNZ R0, T6
T7: SETB DQ
RET
;*************************温度读写指令**************************
ZXD: MOV SP, #60H
ACALL RESET
JNB FLAG, ZXD
MOV A, #0CCH ;跳过rom指令
ACALL WRITE
MOV A, #44H ;温度转换指令
ACALL WRITE
MOV R2, #6
DLY1: MOV R1, #255
DLY2: MOV R0, #255
DJNZ R0, $
DJNZ R1, DLY2
DJNZ R2, DLY1 ;延时780ms
ACALL RESET
MOV A, #0CCH
ACALL WRITE
MOV A, #0BEH ;读取寄存器指令
ACALL WRITE
ACALL READ ;读取温度
RET
;*************************写入DS18B20程序***********************
WRITE: MOV R2, #8 ;一共8位数据
CLR C
WR1: CLR DQ
MOV R3, #6
DJNZ R3, $
RRC A ;右移A将数据给C
MOV DQ, C ;写入一个位
MOV R0, #23
DJNZ R0, $
SETB DQ
NOP
DJNZ R2, WR1 ;循环8次
SETB DQ
RET
;************************读DS18B20程序****************************
READ: MOV R4, #2
MOV R1, #TEMPL ;将25H,26H写入
RE0: MOV R2, #8
RE1: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ ;拉高数据线
MOV R3, #7
DJNZ R3, $
MOV C, DQ
MOV R3, #23
DJNZ R3, $ ;等待50us
RRC A
DJNZ R2, RE1 ;读下个位
MOV @R1, A
INC R1
DJNZ R4, RE0
RET
;************************数据转化程序******************************
TURN: ANL 26H, #07H ;取后3位
ANL 25H, #0F0H ;取前4位
MOV A, 25H
ORL 26H, A
MOV A, 26H
SWAP A ;高低互换
MOV TEMP_ZH, A
RET
;*************************温度比较及报警**********************************
BJ: MOV A, TEMP_TH
SUBB A, TEMP_ZH
JC TCL
JNC TCL1
RET
TCL1: CLR BUZ
RET
TCL: SETB BUZ
RET
;************************显示程序***************************************
DISPLAY:MOV A, TEMP_ZH
MOV B, #100
DIV AB ;商送A,余送B
MOV BAI, A
MOV A, B
MOV B, #10
DIV AB
MOV SHI, A
MOV GEW, B
MOV DPTR, #TAB
MOV A, BAI
MOVC A, @A+DPTR
MOV P0, A
SETB P2.0
ACALL DELAY
CLR P2.0
MOV A, SHI
MOVC A, @A+DPTR
MOV P0, A
SETB P2.1
ACALL DELAY
CLR P2.1
MOV A, GEW
MOVC A, @A+DPTR
MOV P0, A
SETB P2.2
ACALL DELAY
CLR P2.2
MOV P0, #39H ;显示c代码
SETB P2.3
ACALL DELAY
CLR P2.3
ACALL BJ
JB K1, LOOP3
JB K2, JIAN
JB K3, JIA
SJMP DISPLAY
LOOP3: LJMP LOOP2
;**********************显示段码(共阳)*********************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;*****************************小延时程序***********************************
DELAY: MOV R0, #25
A1: MOV R1, #20
A2: DJNZ R1, A2
DJNZ R0, A1
RET
;****************************键盘程序***************************************
KEY: CJNE R7,#00H,HD
RET
JIAN: DEC TEMP_ZH ;TEMP_ZH位地址减一
INC R7
ACALL DISPLAY
JIA: INC TEMP_ZH ;TEMP_ZH位地址加一
DEC R7
ACALL DISPLAY
RET
HD: INC TEMP_ZH
DJNZ R7, HD
RET
END
求大佬指点,谢谢了
|