单片机源程序
FJKG BIT P1.2 ;风机开关控制
FJZD BIT P1.1 ;风机最大控制
SBKG BIT P1.0 ;手柄开关控制
LTKG BIT P1.3 ;烙铁开关控制
SO BIT P3.5 ; MAX6675 SO
SCK BIT P3.7 ;MAX6675 SCK
SBCS BIT P3.4 ;手柄温度片选
LTCS BIT P3.6 ;烙铁温度片选
SBKGZT BIT P3.3 ;手柄开关状态
LTKGZT BIT P3.2 ;烙铁开关状态
SBWDGW EQU 30H ;手柄温度个位BCD码
SBWDSW EQU 31H ;手柄温度十位BCD
SBWDBW EQU 32H ;手柄温度百位BCD
LTWDGW EQU 33H ;烙铁温度个位BCD码
LTWDSW EQU 34H ;烙铁温度十位BCD
LTWDBW EQU 35H ;烙铁温度百位B
SBH EQU 21H ;16位手柄数据高位
SBL EQU 20H ;16位手柄数据低位
LTH EQU 23H ;16位烙铁数据高位
LTL EQU 22H ;16位烙铁数据低位
SBSJH EQU 45H ;10位手柄温度高位
SBSJL EQU 44H ;10位手柄温度低位
LTSJH EQU 47H ;10位烙铁温度高位
LTSJL EQU 46H ;10位烙铁温度低位
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV P1, #1DH ;风机关,风机最大关,手柄关,烙铁关
MOV P3, #0FFH
CLR 20H ;手柄开关状态初始化
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
START: MOV C, LTKGZT;根据烙铁开关状态控制烙铁开或关
MOV LTKG,C
MOV C, SBKGZT
JNC D2 ;c=0转移
JB 20H, D2 ;BIT=1转移
MOV 20H,C ;保存本次手柄开关状态
SETB SBKG ;发热丝关风机最大
CLR FJKG
SETB FJZD
MOV 2AH,#64H
READ: MOV 2BH, #32H ;显示次数计数
DIS: ACALL DISPLAY ;循环显示50次
DJNZ 2BH, DIS
MOV C, LTKGZT;根据烙铁开关状态控制烙铁开或关
MOV LTKG,C
ACALL READWD ;读取温度数据
MOV C, LTKGZT;根据烙铁开关状态控制烙铁开或关
MOV LTKG,C
DJNZ 2AH, READ
CLR FJZD
SETB FJKG
SETB SBKG
AJMP START
D2: MOV C,SBKGZT
MOV 20H, C
MOV SBKG,C
MOV FJKG,C
CLR FJZD
MOV 64H,#32H
MOV C, LTKGZT;根据烙铁开关状态控制烙铁开或关
MOV LTKG,C
DD2: ACALL DISPLAY
DJNZ 64H,DD2
ACALL READWD
AJMP START
DISPLAY: MOV DPTR ,#TAB ;字码表格首地址送DPTR
MOV A, SBWDGW ;手柄温度个位BCD码送A
MOVC A, @A+DPTR ;取得手柄温度个位字码
MOV P0, A
CLR P2.5
ACALL DELAY
SETB P2.5
MOV A, SBWDSW ;手柄温度十位BCD码送A
MOVC A, @A+DPTR ;取得手柄温度十位字码
MOV P0, A
CLR P2.6
ACALL DELAY
SETB P2.6
MOV A, SBWDBW ;手柄温度百位BCD码送A
JNZ XX1
MOV A,#0AH
XX1: MOVC A, @A+DPTR ;取得手柄温度百位字码
MOV P0, A
CLR P2.7
ACALL DELAY
SETB P2.7
MOV A, LTWDGW ;烙铁温度个位BCD码送A
MOVC A, @A+DPTR ;取得手柄温度个位字码
MOV P0, A
CLR P2.2
ACALL DELAY
SETB P2.2
MOV A, LTWDSW ;烙铁温度十位BCD码送A
MOVC A, @A+DPTR ;取得手柄温度十位字码
MOV P0, A
CLR P2.3
ACALL DELAY
SETB P2.3
MOV A, LTWDBW ;烙铁温度百位BCD码送A
JNZ XX2
MOV A,#0AH
XX2: MOVC A, @A+DPTR ;取得手柄温度百位字码
MOV P0, A
CLR P2.4
ACALL DELAY
SETB P2.4
RET
READWD: MOV A,#00H
CLR SBCS
NOP
MOV R0,#08H
CLR SCK
NOP
SBREADH: MOV C,SO
RLC A ;读D15~D8高8位数据
SETB SCK
NOP
NOP
NOP
CLR SCK
DJNZ R0,SBREADH
MOV SBH,A
MOV R0,#08H
MOV A,#00H
SBREADL: MOV C,SO ;读D7~D0低8位数据
RLC A
SETB SCK
NOP
NOP
NOP
CLR SCK
DJNZ R0,SBREADL
MOV SBL,A
SETB SBCS
SETB SCK
CLR LTCS
MOV A,#00H
MOV R0,#08H
CLR SCK
NOP
LTREADH: MOV C,SO
RLC A ;读D15~D8高8位数据
SETB SCK
NOP
NOP
NOP
CLR SCK
DJNZ R0,LTREADH
MOV LTH,A
MOV R0,#08H
MOV A,#00H
LTREADL: MOV C,SO ;读D7~D0低8位数据
RLC A
SETB SCK
NOP
NOP
NOP
CLR SCK
DJNZ R0, LTREADL
MOV LTL, A
SETB LTCS
;将16位温度读取数据转换为10位二进制表示
MOV A,SBL
MOV C,08H ;21H最低位送C
RRC A
MOV C,09H
RRC A
MOV C,0AH
RRC A
MOV C,0BH
RRC A
MOV C,0CH
RRC A
MOV SBSJL, A
MOV A,SBH
SWAP A
RRC A
ANL A, #03H
MOV SBSJH, A
MOV A,LTL
MOV C,18H ;21H最低位送C
RRC A
MOV C,19H
RRC A
MOV C,1AH
RRC A
MOV C,1BH
RRC A
MOV C,1CH
RRC A
MOV LTSJL, A
MOV A,LTH
SWAP A
RRC A
ANL A, #03H
MOV LTSJH, A
;将10二进制温度值转换为用于显誓
MOV R7,SBSJL
MOV R6,SBSJH
HB2: CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
MOV A,R4
ANL A,#0FH
MOV SBWDBW,A
MOV A,R5
SWAP A
ANL A,#0FH
MOV SBWDSW, A
MOV A, R5
ANL A, #0FH
MOV SBWDGW, A
;烙铁温度转换
MOV R7,LTSJL
MOV R6,LTSJH
HB4: CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB5: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB5 ;处理完16bit
MOV A,R4
ANL A, #0FH
MOV LTWDBW,A
MOV A,R5
SWAP A
ANL A,#0FH
MOV LTWDSW, A
MOV A, R5
ANL A, #0FH
MOV LTWDGW, A
RET
DELAY: MOV 60H, #0FFH
DD1: DJNZ 60H, DD1
RET
TAB: DB 01H,4FH,12H,06H,4CH,24H,20H,0FH,00H,04H,0FFH
END