📄 电磁铁测试3led.asm
字号:
;4*6行列扫描查键
;P3.2:__1__|__4__|__7__|__.__|打印_|__PH_|__ //P3.2~P3.5接上拉电阻
;P3.3:__2__|__5__|__8__|__0__|平值_|__PL_|__ //P2.0~P2.5为扫描输入口
;P3.4:__3__|__6__|__9__|支数_|清除_|__<__|__
;P3.5:马值_|线度_|纤维_|成熟_|确定_|__>__|__
; | | | | | |
; P2.0 P2.1 P2.2 P2.3 P2.4 P2.5
;
; ___ ___ ___
;|___| |___| |___|
;|___|.|___|.|___|.
; 高 中 低
; ____ 10_ 18_ _ _ _ _ __
; | |_| |_| |_| |_| |_| |_| |_|
;脉宽可调 小脉冲宽10MS低的部分16MS
;/////////////////////////////////////////
COUNT0 EQU 25H ;周期低位 用于脉冲周期调整的变量
COUNT1 EQU 26H ;周期高位
COUNT2 EQU 27H ;脉冲低位
COUNT3 EQU 28H ;脉冲高位
COUNT4 EQU 29H ;周期低位 用于存放脉冲周期调整变量值的暂存RAM
COUNT5 EQU 2AH ;周期高位
COUNT6 EQU 2BH ;脉冲低位
COUNT7 EQU 2CH ;脉冲高位
KEYWORD EQU 2DH ;储存键盘值
LEDZJBL EQU 2EH ;LED中间变量
JIANZHI EQU 2FH ;键值
LEDMCDW EQU 30H ;LED显示值,脉冲中低位
LEDMCGW EQU 31H ;LED显示值,脉冲高位
LEDZQDW EQU 32H ;LED显示值,周期中低位
LEDZQGW EQU 33H ;LED显示值,周期高位
BUF0 EQU 34H ;保存安键延时的值,开始为20既20MS
BUF1 EQU 35H ;
TEPBIT EQU 36H
KEYL BIT 00H ;周期调整键,为1时,周期清零,周期进入调整状态
KEYLL BIT 01H ;周期调整状态位,1,周期在调整中。0,周期调整结束
KEYR BIT 02H ;脉冲调整键,为1时,脉冲清零,脉冲进入调整状态
KEYRR BIT 03H ;脉冲调整状态位,1,脉冲在调整中。0,脉冲调整结束
ENTER BIT 04H ;确定键,周期调整好或脉冲调整好以后,只有在按下此键后才能生效
ORG 0000H
LJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI ;定时器0中断
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
ORG 0030H
MAIN:
CLR ENTER
SETB P1.0 ;7406
MOV SP,#6FH
MOV 20h,#00H
MOV R0,#20H
MOV R1,#10H
QINGLIN:
MOV @R0,#00H
INC R0
DJNZ R1,QINGLIN
MOV LEDMCDW,#20H
MOV LEDMCGW,#00H
MOV TEPBIT,#04H
;//显示LED部分调式用
; MOV LEDZQGW,#01H
; MOV LEDZQDW,#23H
; MOV LEDMCGW,#04H
; MOV LEDMCDW,#56H
;//显示LED调试结束
LOOP:
;LCALL KEYWORKON
MOV BUF0,LEDMCDW
MOV BUF1,LEDMCGW
LCALL DISPLAY
NOP
JNB P1.1,KEY0 ;读P0.0口,若为0转KEY0
JNB P1.3,KEY1 ;
JNB P1.2,$+6 ;读P0.1口,若为0转KEY1
LJMP LOOP
LJMP KEY2
;功能0键处理程?
KEY0:
LCALL DL10MS ;延时10毫秒消抖
JB P1.1,OUT0 ;P0.0为1,子程序返回(干扰)
JNB P1.1,$
; MOV BUF0,LEDMCDW
; MOV BUF1,LEDMCGW
; CLR ENTER ;按键标志位
; MOV TEPBIT,#04H ;按键恢复到第一个
MOV A,BUF0
CJNE A,#00H,$+11
MOV A,BUF1
CJNE A,#00H,$+6
LJMP LPOUT
CLR P1.0 ;7406 P1.0位置1
TEP0:
LCALL DL1MS
MOV A,BUF0 ;16进制与十进制转换
ANL A,#0FH
CJNE A,#00H,LP0 ;周期的低四位自减,当为零后,高四位减1,同时低四位加9
MOV A,BUF0
CJNE A,#00H,LP1
MOV A,BUF1
CJNE A,#00H,LP2
LJMP LPOUT
LP2:
DJNZ BUF1,$+3
MOV BUF0,#99H
LJMP TEP0
LP1:
MOV A,BUF0
CLR C
SUBB A,#10H
ADD A,#09H
MOV BUF0,A
LJMP TEP0
LP0:
DJNZ BUF0,TEP0
MOV A,BUF1
CJNE A,#00H,LP2
LPOUT:
SETB P1.0 ;7406 20H.2位清0
LCALL DL30US
; LJMP LOOP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;无延时;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#0D2H ;#0D2H
MOV R1,#0a0H ;#0A0H
TEP:
CLR P1.0 ;7406
LCALL DL20US
SETB P1.0 ;7406
LCALL DL30US
DJNZ R0,TEP
MOV R0,#0D2H
DJNZ R1,TEP
OUT0:
LJMP LOOP
;切换LED数码管
KEY1:
LCALL DL10MS ;延时10毫秒消抖
JB P1.3,OUT0 ;P0.0为1,子程序返回(干扰)
JNB P1.3,$
; JB ENTER,KEY1LP0
; SETB ENTER
;KEY1LP1:
; MOV TEPBIT,#01H
; LJMP LOOP
MOV A,TEPBIT
RL A
CJNE A,#20H,$+5
MOV A,#04H
MOV TEPBIT,A
XRL A,#1FH
MOV P2,A
LJMP LOOP
;KEY2调整数据
KEY2:
LCALL DL10MS ;延时10毫秒消抖
JB P1.2,OUT0 ;P0.0为1,子程序返回(干扰)
JNB P1.2,$
MOV R6,TEPBIT
CJNE R6,#04H,KEY2LP1
MOV A,LEDMCDW
ANL A,#0FH
ADD A,#01H
CJNE A,#0AH,KEY2LPX0
ANL LEDMCDW,#0F0H
LJMP LOOP
KEY2LPX0:
ANL LEDMCDW,#0F0H
ORL LEDMCDW,A
LJMP LOOP
KEY2LP1:
CJNE R6,#08H,KEY2LP2
MOV A,LEDMCDW
ANL A,#0F0H
ADD A,#10H
CJNE A,#0A0H,KEY2LPX1
ANL LEDMCDW,#0FH
LJMP LOOP
KEY2LPX1:
ANL LEDMCDW,#0FH
ORL LEDMCDW,A
LPX: LJMP LOOP
KEY2LP2:
CJNE R6,#10H,LPX
MOV A,LEDMCGW
ANL A,#0FH
ADD A,#01H
CJNE A,#0AH,KEY2LPX2
MOV LEDMCGW,#00H
LJMP LOOP
KEY2LPX2:
MOV LEDMCGW,A
LJMP LOOP
DISPLAY:
MOV R1,#LEDMCGW
DISLOOP:
MOV A,@R1
ANL A,#0FH
MOV DPTR,#DISTAB
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#9FH
LCALL DL1MS
DEC R1
MOV A,@R1
MOV B,A
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#5FH
LCALL DL1MS
MOV A,B
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#3FH
LCALL DL1MS
DISOUT:
MOV P0,#00H
MOV A,TEPBIT
XRL A,#1FH
MOV P2,A
RET
DISTAB: DB 0A0H,0F9H,0C4H,0D0H,99H,92H,82H,0F8H,80H,90H,00H ;5FH,06H,3BH,2FH,66H,6DH,7DH,07H,7FH,6FH,0FFH
;21:56 2006-1-1
;************;
; 延时程序 ;
;************;
;20US延时
DL20US: MOV COUNT0,#05H ;#05H
NOP
LOP0: DJNZ COUNT0,LOP0
RET
;30US延时子程序,执行一次时间为513微秒
DL30US: MOV COUNT1,#09H ;#09H
LOP1: DJNZ COUNT1,LOP1
RET
;
;1毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL1MS :MOV COUNT2,#30H ;#30H
LOP2: LCALL DL20US
DJNZ COUNT2,LOP2
RET
;5MS延时
DL5MS: MOV COUNT3,#05H ;#05H
LOP3: LCALL DL1MS
DJNZ COUNT3,LOP3
RET
;6MS延时
DL6MS: MOV COUNT4,#06H ;#06H
LOP4: LCALL DL1MS
DJNZ COUNT4,LOP4
RET
;10MS延时子程序
DL10MS: MOV COUNT5,#15H ;#0AH
LOP5: LCALL DL1MS
DJNZ COUNT5,LOP5
RET
;12MS延时
DL12MS: MOV COUNT6,#0CH ;#0CH
LOP6: LCALL DL1MS
DJNZ COUNT6,LOP6
RET
;18MS延时
DL18MS: MOV COUNT7,#12H ;#12H
LOP7: LCALL DL1MS
DJNZ COUNT7,LOP7
RET
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -