📄 2增强版.txt
字号:
;*****************************
;*函数功能:烘手机 *
;热释电 RSD
;红外 HONGW
;灯泡 DENGPAO
;PWM信号的高电平长度 PWMH
;PWM信号的周期长度 PWMT
;*****************************
RSD BIT P3.6
HONGW BIT P3.7
DENGPAO BIT P3.5
PWM BIT P3.3
PWMH EQU 60H
PWMT EQU 61H
COUNT EQU 62H
K1 BIT P1.0
K2 BIT P1.1
K3 BIT P1.2
K4 BIT P1.3
K5 BIT P1.4
K6 BIT P1.5
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP TIME0
ORG 0030H
MAIN: MOV COUNT,#1
MOV PWMT,#100 ;设PWM信号一个周期的总长度为100
MOV TMOD,#01H
SETB EA
SETB ET0
MOV TH0,#0FFH
MOV TL0,#50H
MOV P3,#00H
MOV DPTR,#TABLE
;*****************************
;* 主函数 *
;*****************************
PANDUAN:JB RSD,YHWM ;热释电为1,则判断是否有红外
MOV A,#0
LCALL DISPLAY
AJMP PANDUAN
YHWM:JNB HONGW,PANDUAN
SETB DENGPAO
MOV PWMH,#50
SETB TR0
MOV R0,#5
MOV R1,#2
JIANCE:JNB K1,D1 ;检测冷.热风,判断K1\K2是否有一个被按下
JNB K2,D2
LCALL DISPLAY_L
AJMP YHWM
D1:LCALL DL ;按键延时
JB K1,JIANCE ;K1是否真按下,否,则重新判断
MOV R0,#4
CLR DENGPAO
LCALL FENGSU ;K1按下,继续判断风速
RE1:LCALL DISPLAY_L
JNB K1,D1
JNB K2,D2
JNB RSD,RE1 ;热释电为1,则判断是否有红外
CLR PWM ;若人走开,则停止吹风
CLR TR0
AJMP PANDUAN
D2:LCALL DL
JB K2,JIANCE
SETB DENGPAO
LCALL FENGSU
MOV R0,#5
RE2:LCALL DISPLAY_L
JNB K1,D1
JNB K2,D2
JNB RSD,RE2 ;热释电为1,则判断是否有红外
CLR DENGPAO
CLR PWM
CLR TR0
AJMP PANDUAN
TIME0:INC COUNT
MOV A,COUNT
CJNE A,PWMH,RETIME ;维持PWM信号的高电平到高电平的设定值
CPL PWM ;到设定植后,PWM电平取反
RETIME:CJNE A,PWMT,EXIT ;保持取反后的电平,直到PWM信号周期的总长度后再取反
CPL PWM
MOV COUNT,#1
EXIT:MOV TH0,#0FFH ;定时10MS
MOV TL0,#50H
RETI
;*****************************
;* 判断风速子程序 *
;*****************************
FENGSU: JNB K3,DISU ;判断采用哪种风速
JNB K4,ZHONGSU
JNB K5,GAOSU
AJMP FENGSU
DISU: LCALL DL
JB K3,FENGSU ;低速键是否按下
MOV R1,#1 ;低速键按下,则显示L001
LCALL QUEDING ;确定键是否按下
MOV PWMH,#10
SETB TR0
RET
ZHONGSU:LCALL DL
JB K4,FENGSU ;中速键是否按下
MOV R1,#2 ;中速键按下,则显示L002
LCALL QUEDING ;确定键是否按下
MOV PWMH,#50
SETB TR0
RET
GAOSU: LCALL DL
JB K5,FENGSU
MOV R1,#3 ;高速键按下,则显示L003
LCALL QUEDING ;确定键是否按下
RET
QUEDING:JB K6,QUEDING ;确定键判断程序
LCALL DL
JB K6,QUEDING
MOV PWMH,#90
SETB TR0
RET
;*****************************
;* 显示子程序 *
;*****************************
DISPLAY:MOVC A,@A+DPTR ;显示0000和1111的程序
MOV P0,A
MOV P2,#0F0H
RET
DISPLAY_L:MOV A,R1 ;显示最后一位,即风速档1\2\3
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0FEH
LCALL DELAY
MOV P2,#0FFH
MOV A,#0 ;显示中间两位00
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0F9H
LCALL DELAY
MOV P2,#0FFH
MOV A,R0 ;显示冷.热风,L\M
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0F7H
LCALL DELAY
MOV P2,#0FFH
RET
;*****************************
;* 延时子程序 *
;*****************************
DL:MOV R6,#2 ;按键延时
D3:MOV R7,#10
DJNZ R7,$
DJNZ R6,D3
RET
DELAY:MOV R6,#20 ;显示延时
D4:MOV R7,#20
DJNZ R7,$
DJNZ R6,D4
RET
;*****************************
;* 共阴断码 *
;*****************************
TABLE: DB 3FH,06H,5BH,4FH,38H,76H ;对应0、1、2、3、L、H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -