📄 szj.asm
字号:
;甩脂机程序
;--------------------------
BBM BIT P3.7 ;
G BIT P3.4
RCK BIT P3.5
OUTPWM BIT P1.0 ;PWM送出
WKEY BIT 20H.0 ;键盘位
WG BIT 20H.1 ;G 使能位
WPWM BIT 20H.2 ;PWM状态位
MI BIT 20H.3 ;1mS信号送出
WSTAR BIT 20H.4 ;启动标志位 0为启动
WSZ BIT 20H.5 ;设置位 0为设置过
SUO BIT 20H.6 ;闪烁控制位,0 闪烁
WMSTOP BIT 20H.7 ;PWM 关断 0 开
MODE EQU 37H ;模式
JS0 EQU 38H
PWML EQU 39H
PWMH EQU 3AH
KEY EQU 3BH
DAW EQU 3CH ;挡位
TM EQU 3DH ;时间
MJS EQU 3EH ;0.1秒计数
;--------------------------
ORG 0000H
AJMP MAIN
ORG 0003H
LJMP TIM0
ORG 0013H
LJMP PWM
ORG 0030H
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P3,#0FFH
MOV TMOD,#11H
MOV TL0,#0FEH ;显示扫描
MOV TH0,#0FEH
MOV TL1,#7EH
MOV TH1,#0FFH
MOV IE,#00001000B ;设PWM中断优先
SETB EA
SETB ET0
SETB ET1
MOV MODE,#00H
SETB WKEY
MOV 30H,#7FH ;8
MOV 31H,#7FH ;8
MOV 32H,#3FH ;0
MOV 33H,#3FH
MOV 34H,#3FH
MOV 35H,#3FH
MOV 36H,#3FH
MOV JS0,#0FFH
CLR WG
SETB MI
SETB TR0
LCALL DI
MOV JS0,#00H
MOV MJS,#100 ;0.1S计数
;----------------------------
MAIN0:
JNB P1.1,MAIN1
DJNZ JS0,MAIN2
SETB WG
MOV 30H,#70H ;显示 1- 出错
MOV 31H,#70H
LCALL GSTOP
LJMP MAIN2
MAIN1: MOV JS0,#00H
CLR WG
SETB WMSTOP
MAIN2:
MOV A,MODE
MOV B,#03H
MUL AB
MOV DPTR,#TABMODE
JMP @A+DPTR
TABMODE: LJMP M88D
LJMP MP1
LJMP MP2
LJMP MP3
LJMP M1D
;-------------------------------
M88D:
JB SUO,RSUO
RSUO:
;-------------------------------
MP1:
MP2:
MP3:
M1D:
LJMP MAIN0
;****************************
TIM0: PUSH 00H
PUSH 01H
PUSH 02H
PUSH A
PUSH B
LCALL XIANS ;显示扫描
LCALL RDKEY ;键盘扫描
MOV TL0,#0CFH
MOV TH0,#0BEH
POP B
POP A
POP 02H
POP 01H
POP 00H
RETI
;-----------------------------------
;显示
XIANS:
MOV R0,#30H
MOV R2,#02H
CLR A
CLR B
LCALL WIT595
CLR G
CLR RCK
NOP
NOP
SETB RCK
NOP
SETB G
XIANS0: MOV A,@R0
MOV B,R2
LCALL WIT595
CLR G
CLR RCK
NOP
NOP
SETB RCK
NOP
SETB G
LCALL YANS
CLR C
MOV A,R2
RLC A
MOV R2,A
INC R0
CJNE R0,#37H,XIANS0
CLR A
CLR B
LCALL WIT595
CLR G
CLR RCK
NOP
NOP
SETB RCK
NOP
SETB G
RET
;-----------------------------
;写74HC595
WIT595: MOV SBUF,A
NOP
JNB TI,$
CLR TI
MOV SBUF,B
NOP
JNB TI,$
CLR TI
RET
;-----------------------------------
;读键盘
RDKEY:
MOV P1,#0FFH
NOP
MOV A,P1
ORL A,#03H
CJNE A,#0FFH,RDKEY0 ;无键
SETB WKEY
HRDKEY: LJMP RRDKEY
RDKEY0:
MOV B,A
MOV P1,#0FFH
LCALL YANS
MOV A,P1
ORL A,#03H
CJNE A,B,HRDKEY ;无键
JNB WKEY,HRDKEY ;键没有放开,不做出来
JNB ACC.2,STOP
JNB ACC.3,STAR
JNB ACC.4,QEHN
JNB ACC.5,TIMINC
JNB ACC.6,KEYINC
JNB ACC.7,KEYDEC
AJMP HRDKEY
KEYDEC: LJMP HRDKEY
STOP: MOV KEY,#01H ;停止
CLR TR1
CLR WKEY
LJMP HRDKEY
;-------------------------
STAR:
MOV KEY,#02H ;开始
JB WG,STAR2 ;判断G是否正常
MOV A,MODE
CJNE A,#00H,STAR0 ;M1
CLR WSTAR ;启动位
JB WSZ,YSHEZ ;有无设置 1为设置过
MOV DAW,#01H ;默认状态
MOV TM,#0AH
YSHEZ: LCALL JISPWM ;调PWM计算程序
CLR OUTPWM
SETB TR1 ;启动PWM
LJMP STAR2
;-----------------------
STAR0: CJNE A,#04H,STAR1 ;"1"
LJMP STAR2
;--------------------------
STAR1: LCALL MPD ;调P模式处理程序
CLR WSTAR
CLR OUTPWM
SETB TR1
;-----------------------------------
STAR2: CLR WKEY ;键盘位
LJMP RRDKEY
;**********************************************88
QEHN: ;MOV KEY,#03H ;模式切换
JNB WSTAR,QEHN0 ;在启动状态下,无效
INC MODE
MOV A,MODE
CJNE A,#05H,QEHN0
MOV MODE,#00H
QEHN0: CLR WKEY
LJMP RRDKEY
;*************************************************
TIMINC: ; MOV KEY,#04H ;时间加
MOV A,MODE
CJNE A,#04H,TIMINC0
;----- ;计算程序
TIMINC0: CJNE A,#00H,TIMINC1
CLR WSZ
AJMP TIMC
;设置过标志位
TIMINC1: JNB WSTAR,TIMC0 ;在P模式下,启动,不能设置
TIMC: CLR SUO ;闪烁标志
INC TM
MOV A,TM
CJNE A,#0BH,TIMC0
MOV TM,#01H
TIMC0:
CLR WKEY
LJMP RRDKEY
;----------------------------
KEYINC: ;MOV KEY,#05H ;加键
MOV A,MODE
CJNE A,#00H,KEYINC0
SETB WSZ
INC DAW
MOV A,DAW
CJNE A,#21,KINC0
MOV DAW,#01H
KINC0: LCALL JISPWM
KEYINC0: CJNE A,#04H,KEYINC1
;------ ;计算程序
KEYINC1:
CLR WKEY
LJMP RRDKEY
;-----------------------------
HKEYDEC: ;MOV KEY,#06H ;减键
MOV A,MODE
CJNE A,#00H,KEYDEC0
SETB WSZ
DEC DAW
MOV A,DAW
CJNE A,#00H,KDEC0
MOV DAW,#20
KDEC0:LCALL JISPWM
KEYDEC0: CJNE A,#04H,KEYDEC1
;------ ;计算程序
KEYDEC1:
CLR WKEY
LJMP RRDKEY
;------------------------------
NRDKEY: MOV KEY,#00H
RRDKEY:
RET
;------------------------------------
YANS: PUSH A
MOV A,#0FFH
YANS0: NOP
DEC A
JZ YANS0
POP A
RET
;************************************
PWM: PUSH A
PUSH PSW
JNB WPWM,TPL
JNB WMSTOP,PWM0 ;WMSTOP="0",关PWM
CLR TR1
LJMP RRR
PWM0:
SETB OUTPWM
MOV A,PWML ;1MS - PWM
CLR C
SUBB A,#18H
MOV TL1,A
MOV A,PWMH
SUBB A,#0FCH
MOV TH1,A
CLR C
CLR A
SUBB A,TL0
MOV TL0,A
CLR A
SUBB A,TH0
MOV TH0,A
AJMP RRR
TPL: ;0输出状态
CLR OUTPWM
DJNZ MJS,TPL0
CLR MI ;0.1S
MOV MJS,#64H
TPL0:
MOV TL1,PWML
MOV TH1,PWMH
RRR: POP PSW
POP A
RETI
;-----------------------------------
JISPWM: MOV A,DAW ;挡位计算
MOV B,#42
MUL AB
CLR C
MOV R1,A
MOV A,#0A8H
SUBB A,R1
MOV PWML,A
MOV A,#0FFH
SUBB A,B
MOV PWMH,A
RET
;-----------------------------------
MPD: MOV A,MODE ;P 模式档位计算
CJNE A,#01H,MPD0
MOV DPTR,#TBP1
AJMP MPD3
MPD0: CJNE A,#02H,MPD1
MOV DPTR,#TBP2
AJMP MPD3
MPD1: CJNE A,#03H,RMPD
MOV DPTR,#TBP3
MPD3: MOV A,TM
MOVC A,@A+DPTR
MOV DAW,A ;挡位显示
LCALL JISPWM
RMPD: RET
TBP1: DB 06H,06H,0AH,10H,0EH,0CH,0AH,08H,06H,04H,02H
TBP2: DB 06H,06H,08H,0AH,0EH,06H,05H,04H,03H,02H,01H
TBP3: DB 0AH,0AH,04H,10H,04H,10H,04H,0AH,04H,0AH,04H
;-----------------------------------
GSTOP: ;出错停止程序
CLR WMSTOP
RET
;------------------------------------
DI: SETB BBM ;滴---
MOV R2,#0FH
DI0: LCALL YANS
DJNZ R2,DI0
CLR BBM
RET
;-----------------------------------
END
;------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -