📄 温度控制系统 备分2.asm
字号:
SDATA EQU P1.0 ;数据输出线
SLCK EQU P1.1 ;数据锁存信号线
SCLK EQU P1.2 ;时钟脉冲输出线
HH EQU 3DH ;高两位LED显示数存储区
MID EQU 3EH ;中间两位LED显示数存储区
LL EQU 3FH ;低两位LED显示数存储区
LEDBUF1 EQU 40H ;LED1显示缓冲区
LEDBUF2 EQU 41H ;LED2显示缓冲区
LEDBUF3 EQU 42H ;LED3显示缓冲区
LEDBUF4 EQU 43H ;LED4显示缓冲区
LEDBUF5 EQU 44H ;LED5显示缓冲区
LEDBUF6 EQU 45H ;LED6显示缓冲区
TT1 EQU 32H ;温度上限
TT2 EQU 33H ;温度下限
TT0 EQU 31H ;实际所测温度
WEI EQU 21H ;按键标志位
;WEI.0 设置键标志位
;WEI.1 + 或-键按下标志位
;WEI.2 移位键标志位
;WEI.3 确定键标志位
ORG 0000H
LJMP MAIN
;**********************************************************
;程序开始
ORG 0030H
MAIN:
MOV SP,#60H
MOV A,#0FFH
MOV P0,A ;P0、P1、P3端口置1
MOV P1,A ;
MOV P3,A ;
LCALL CLEAR
CLR P2.6 ;关闭指示灯
CLR P2.7
MOV WEI,#00H
MOV TT1,#25H ;温度显示初值
MOV TT2,#45H
LP2: MOV HH,#0ABH ;开机显示HELLO!,等待按键按下
MOV MID,#0CDH
MOV LL,#00EH
LCALL DISPLAY
JNB P1.7,LP
JMP LP2
;****************************************************
;**********************************************
;显示温度
LP: JB WEI.0,LP1
LCALL DELAY100MS ;调延时
LCALL DELAY100MS
LCALL DELAY100MS ;调延时
LCALL AD_CONVERT
MOV LL,TT0
MOV MID,TT2 ;上限TT1,下限TT2,所测温度为TT0
MOV HH,TT1
LCALL DISPLAY
LCALL TESTKEY
LCALL Signal
LJMP LP
;显示设定闪烁
LP1: MOV MID,TT2
MOV HH,TT1
LCALL AD_CONVERT
LCALL DISPLAY
LCALL TESTKEY
JNB P1.7,LP
LCALL SHANSHUO
;LCALL Signal
LJMP LP
;*********************************************
;*********************************************
;显示子程序
DISPLAY: LCALL BCD2LED
LCALL WRITE5950
RET
;BCD码转化为LED显示码子程序
BCD2LED: MOV A,LL
ANL A,#0FH ;屏蔽高4位
LCALL TABLE
MOV LEDBUF6,A
MOV A,LL
SWAP A
ANL A,#0FH ;屏蔽原来的低4位
LCALL TABLE
MOV LEDBUF5,A
MOV A,MID
ANL A,#0FH ;屏蔽高4位
LCALL TABLE
MOV LEDBUF4,A
MOV A,MID
SWAP A
ANL A,#0FH ;屏蔽原来的低4位
LCALL TABLE
MOV LEDBUF3,A
MOV A,HH
ANL A,#0FH ;屏蔽高4位
LCALL TABLE
MOV LEDBUF2,A
MOV A,HH
SWAP A
ANL A,#0FH ;屏蔽原来的低4位
LCALL TABLE
MOV LEDBUF1,A
RET
;共阳LED字型码查表子程序
TABLE: INC A
MOVC A, @A+PC
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,82H,0F8H
; 0 1 2 3 4 5 6 7
DB 80H,90H,89H,86H,0C7H,0C7H,079H,0FFH
; 8 9 H E L L !
;**********************************************************
CLEAR: CLR A ;
MOV P2,A ;P2口置0
MOV R0,#31H ;内存循环清零(31H-45H)
MOV R6,#15H
LOOP0:
MOV @R0,A
INC R0
DJNZ R6,LOOP0
MOV A,#0FFH ;
RET ;子程序返回
;**********************************************************
;**********************************************************
WRITE5950: LCALL WRITE595
SETB SLCK
NOP
CLR SLCK
NOP
RET
;用到的寄存器: R5
WRITE595: MOV R5,#08H
MOV A,LEDBUF6
LCALL LOOP
MOV R5,#08H
MOV A,LEDBUF5
LCALL LOOP
MOV R5,#08H
MOV A,LEDBUF4
LCALL LOOP
MOV R5,#08H
MOV A,LEDBUF3
LCALL LOOP
MOV R5,#08H
MOV A,LEDBUF2
LCALL LOOP
MOV R5,#08H
MOV A,LEDBUF1
LCALL LOOP
RET
LOOP: RLC A
MOV SDATA,C
SETB SCLK
NOP
CLR SCLK
DJNZ R5,LOOP
RET
;*************************************************
;**************************************************
;闪烁子程序 用到的寄存器:R1
SHANSHUO: MOV 50H,HH
MOV 51H,MID
MOV A,#HH
ADD A,R2
MOV R1,A
MOV A,@R1
MOV @R1,0FFH
LCALL DISPLAY ;调显示
LCALL DELAY100MS ;调延时
LCALL DELAY100MS
JNB P1.4,SH
JNB P1.5,SH
JNB P1.7,SH
LCALL DELAY100MS
MOV HH,50H
MOV MID,51H
LCALL DISPLAY
LCALL DELAY100MS
JNB P1.4,SH
JNB P1.5,SH
JNB P1.7,SH
DJNZ 52H,SH
SH: RET
;*************************************************************
;*************************************************************
;报警指示子程序
Signal:
MOV A,TT0
CLR C
SUBB A,TT2
JNC L1 ;CY=0,(LL)>(MID),跳转到L1
SETB P2.6 ;CY=1,(LL)<(MID),点亮P2.6口LED,绿灯
RET
L1: CLR C
SUBB A,TT1
JNC L2 ;CY=0, (LL)>(HH),跳转到L2
RET ;CY=1, (MID)<(LL)<(HH) ,返回
L2:
SETB P2.7 ; 点亮P2.7口LED,红灯
RET
;**************************************************************
;**************************************************************
;按键扫描子程序
TESTKEY: JB P1.3,JJ1 ;扫描设定键
LCALL DELAY10 ;消抖
JB P1.3,JJ1
JJJ1: LCALL DELAY10
JNB P1.3,JJJ1 ;
SETB WEI.0
LCALL SETT1
RET
JJ1: JB P1.4,JJ2 ;扫描移位键
LCALL DELAY10 ;消抖
JB P1.4,JJ2
JJJ2: LCALL DELAY10
JNB P1.4,JJJ2
SETB WEI.2
LCALL MOV1
RET
JJ2: JB P1.5,JJ3 ;扫描+键
LCALL DELAY10 ;消抖
JB P1.5,JJ3
SETB WEI.1 ;+标志位置1
LCALL DISPLAY
LCALL JIA
RET
JJ3: JB P1.7,JJ4 ;扫描确认键
LCALL DELAY10 ;消抖
JB P1.7,JJ4
JJJ4: LCALL DELAY10
JNB P1.7,JJJ4
SETB WEI.3
LCALL OK
JJ4: RET
;***********************************************
;***********************************************
;加键功能子程序
JIA: JNB WEI.0,J2
MOV A,R2
CJNE A,#00H,J1
MOV R1,#TT1 ;将TT1首地址放入R1
ADD A,R1
MOV R1,A
INC @R1
MOV A,@R1
ADD A,#00H
DA A
MOV R4,A
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DISPLAY
MOV A,#90H
CLR C
SUBB A,@R1
JNC CC
MOV R4,#00H
CC: MOV A,R4
MOV @R1,A
MOV HH,A
;CLR P0.0
LCALL DISPLAY
JNB P1.5,JIA
LJMP J2
J1: CJNE R2,#01H,J2
MOV R1,#TT1
MOV A,R2
ADD A,R1
MOV R1,A
INC @R1
MOV A,@R1
ADD A,#00H
DA A
MOV R4,A
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DELAY100MS
LCALL DISPLAY
MOV A,#90H
CLR C
SUBB A,@R1
JNC DD
MOV R4,#00H
DD: MOV A,R4
MOV @R1,A
MOV MID,A
LCALL DISPLAY
JNB P1.5,JIA
J2: MOV 50H,HH
MOV 51H,MID
RET
;******************************************************
;******************************************************
;设定键功能
SETT1: JNB P1.7,SE1
MOV R2,#00H
MOV 52H,#90H
SE: LCALL SHANSHUO
MOV LL,#0FFH
LCALL DISPLAY
SE1: RET
;***********************************************
;移位键功能
MOV1: JNB WEI.0,KK
INC R2
MOV A,R2
CJNE A,#02H,KK
MOV R2,#00H
KK: RET
;************************************************
;确认键功能
OK: JNB WEI.0,OK1
CLR WEI.0 ;确认键按下,清所有其它键标志位
CLR WEI.1
CLR WEI.2
; MOV TT1,MID
; MOV TT2,HH
MOV R1,#0FFH
INC R1
MOV A,#TT1
ADD A,R1
MOV R1,A
MOV @R1,HH
INC R1
MOV @R1,MID
; MOV TT0,#00H
LCALL DISPLAY
LCALL DELAY100MS
OK1: RET
;*************************************************************************
;模数转换测量子程序
AD_CONVERT: CLR A ;清累加器A
MOV P2,A ;清P2口
; MOV P3,A
;转换值存放首址
SETB P2.3 ;锁存测试通道地址
NOP ; 延时2微秒
CLR P2.3 ;测试通道地址锁存完毕
NOP
SETB P2.4 ; 启动测试,发开始脉冲
NOP ; 延时2微秒
NOP
CLR P2.4 ; 发启动脉冲完毕
NOP ;延时4微秒
NOP
NOP
NOP
WAIT: JB P3.7,ADS ;等A/D转换结束信号后转MOVD
SJMP WAIT ;P3.7为0等待
ADS: LCALL MOVD
RET
;-------------------------------------------------------------------
; 取A/D转换数据至3FH内存单元
MOVD:
SETB P2.5 ;0890输出允许
NOP
MOV A,P0 ;将A/D转换值移入A
MOV B,#02D
DIV AB
ADD A,#13D
MOV 53H,A
LCALL HEX2BCD ;调用十六进制转化为BCD码子程序
CLR P2.5 ;关闭0890输出
NOP
CLR A ;A/D转换结束,恢复端口
MOV P2,A ; P2口置0
MOV A,#0FFH ;
MOV P0,A ; P0口置1
MOV P1,A ; P1口置1
MOV P3,A ; P3口置1
RET
;********************************************************
;十六进制转化为BCD码子程序
HEX2BCD:
MOV A,53H
MOV B,#10D
DIV AB
SWAP A
ADD A,B
DA A
MOV TT0,A
RET
;**********************************************************
;**********************************************************
;延时子程序
DELAY100MS: MOV 53H,#04H
FF3: MOV 46H,#58H
FF1: MOV 47H,#8CH
FF2: DJNZ 47H,FF2
DJNZ 46H,FF1
DJNZ 53H,FF3
RET
;延时10毫秒
DELAY10:
MOV 48H,#55H
GG1: MOV 49H,#39H
GG2: DJNZ 49H,GG2
DJNZ 48H,GG1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -