凑一个热闹,多年前给一家公司做的推杆控制器,有遥控,正反转,暂停,到位停止,过载保护等等功能
窗户自动开启,电机正反转,升降控制,折叠控制都可以用上。
汇编写的!!
单片机源程序如下:
; 输入端口 输出端口
; 2.4 对码输出(确认对码)
; 2.0 LED输出
; 3.2 手动折叠 ; 2.3 蜂鸣器输出
; 3.3 手动打开 ; 2.1 继电器折叠
; 3.4 座位传感器 ; 2.2 继电器打开
; 3.5 备用(轮椅车程序用)
; 3.6 备用
; 1.0 推杆过载
; 1.1 推杆确认
; 1.2 对码按键
; 1.7 遥控按键折叠
; 1.6 遥控按键打开
ORG 00H
L1 : MOV 61H , #0
MOV 60H , #0
MOV 65H , #50
;==========================================================================================
MOV P3 , #0FFH
MOV P1 , #0FFH
W : MOV R7 , #2 ;程序入口
W1 :
ACALL DKQ
DJNZ R7 , W1
CLR P2.3
ACALL K21
SETB P2.3
;========================================================================对码入口
LOOP : ACALL FM
JNB P1.2 , LOOP1
JMP B2
LOOP1 : MOV 66H , #15
LOOP2 : CLR P2.0
CLR P2.4
ACALL FM
SETB P2.0
ACALL FM
DJNZ 66H , LOOP2
SETB P2.0
SETB P2.4
JMP LOOP4
;========================================================================对码入口
LOOP3 : ACALL FM
CLR P2.3
JB P1.7 , LOOP3
JB P1.6 , LOOP3
SETB P2.3
ACALL FM
JMP B2
LOOP4 : MOV 67H , #40
LOOP5 : ACALL FM
JB P1.7 , LOOP3
JB P1.6 , LOOP3
DJNZ 67H , LOOP5
JMP B2
;=======================================================待机操作
B2 : CLR P2.0
ACALL FM
JNB P3.2 , ZHANG1 ;到折叠程序
JNB P3.3 , ZHANG2 ;到打开程序
JB P1.7 , ZHANG1 ;到折叠程序
JB P1.6 , ZHANG2 ;到打开程序
JNB P1.2 , LOOP ;对码学习
JMP B2 ;停止返回
;=======================================================折叠按键防抖和干扰
ZHANG1 : MOV R4 , #255 ;防抖时间设置
Z10 : MOV R5 , #255
Z12 : MOV R6 , #3
DJNZ R6 , $
DJNZ R5 , Z12
DJNZ R4 , Z10
JNB P3.2 , Z11 ;比较按键是否按下 ,按下跳转
JB P1.7 , Z11 ;比较按键是否按下 ,按下跳转
JMP B2 ;停止返回
;=======================================================折叠部分
Z11 : JMP C1 ;跳转折叠主程序
JMP B2
;=======================================================打开按键防抖和干扰
ZHANG2 : MOV R4 , #255 ;防抖时间设置
Z20 : MOV R5 , #255
Z22 : MOV R6 , #3
DJNZ R6 , $
DJNZ R5 , Z22
DJNZ R4 , Z20
JNB P3.3 , Z21 ;比较按键是否按下 ,按下跳转
JB P1.6 , Z21 ;比较按键是否按下 ,按下跳转
JMP B2
;=======================================================打开部分
Z21 : JMP D1
JMP B2 ;跳转打开主程序
;============================================================================================================以上是按键操作和遥控部分
;===========================================================================================================
C1 : ACALL DAKAI11
SETB P2.0 ;蜂鸣器开始响
MOV R7 , #10 ;折叠延时设置
JNB P3.2 , C1 ;按键确认
JB P1.7 , C1 ;按键确认
C2 :
JNB P3.4 , SS ;座位传感器
CLR P2.2 ;折叠马达启动
ACALL FM
ACALL ZHEDIE ;折叠延时程序
JNB P1.0 , C3 ;检测马达运行
ACALL DWFZ ;行程到位反转
JMP C4 ;跳到报警子程序
SS : JMP E3
JMP B2
C3 : DJNZ R7 , C2 ;折叠延时
ACALL ZDFZ ;折叠完成反转
JMP B2 ;停止返回
C4 : MOV 61H , #3 ;折叠到位 (三声)
ACALL DKQ ;蜂鸣器报警
ACALL BJ2 ;蜂鸣器报警
DJNZ 65H , C5
JMP L1
C5 : CLR P2.0
ACALL FM
JNB P3.2 , C4
JNB P3.3 , ZHANG2
JB P1.7 , C4
JB P1.6 , ZHANG2
JMP C5
;-------------------------------------------------------------------------------------------------------------
D1 : ACALL DAKAI11
SETB P2.0 ;蜂鸣器开始响
MOV R7 , #10 ;打开延时设置
JNB P3.3 , D1
JB P1.6 , D1
D2 : CLR P2.1 ;打开马达启动
ACALL FM
ACALL DAKAI ;打开延时程序
JNB P1.0 , D3
ACALL DKFZ
JMP D4
JMP B2
D3 : DJNZ R7 , D2
ACALL DKFZ
JMP B2 ;停止返回
D4 : MOV 61H , #3 ;打开到位 (三声)
ACALL DKQ
ACALL BJ2
DJNZ 65H , D5
JMP L1
D5 : CLR P2.0
ACALL FM
JNB P3.2 , D6
JNB P3.3 , D4
JB P1.7 , D6
JB P1.6 , D4
JMP D5
D6 : JMP ZHANG1
;============================================================================================================以上是马达的驱动部分
;===========================================================================================================
ZDGZ : SETB P2.2 ;=!!!!折叠过载保护
SETB P2.3
ACALL DWFZ
GZ : MOV 61H , #4 ;=!!!!报警设置和子程序 (四声)
ACALL DKQ
ACALL BJ2
GZ2 : ACALL FM
JNB P3.2 , GZ
JNB P3.3 , H2
JB P1.7 , GZ
JB P1.6 , H2
JMP GZ2
H2 : JMP ZHANG2
JMP B2
DKGZ : SETB P2.1 ;=!!!!打开过载保护
SETB P2.3
ACALL DKFZ
GZ3 : MOV 61H , #4 ;=!!!!报警设置和子程序 (四声)
ACALL DKQ
ACALL BJ2
GZ4 : ACALL FM
JNB P3.2 , H1
JNB P3.3 , GZ3
JB P1.7 , H1
JB P1.6 , GZ3
JMP GZ4
H1 : JMP ZHANG1
JMP B2
;============================================================================================================以上是过流保护部分
;===========================================================================================================
;=======================================================折叠延时
ZHEDIE : CLR P2.3 ;改成SETB,取消蜂鸣器
ACALL ZD
SETB P2.3
ACALL ZD
RET
ZD : MOV R0 , #255
ZD1 : MOV R1 , #255
ZD2 : MOV R2 , #15
DJNZ R2 , $
DJNZ R1 , ZD2
JNB P3.2 , E1
JNB P3.3 , E1
JB P1.7 , E1
JB P1.6 , E1
JNB P3.4 , E3 ;座位传感器
JNB P1.1 , ZDGZ ;检测电流
DJNZ R0 , ZD1
RET
;=======================================================打开延时
DAKAI : CLR P2.3 ;改成SETB,取消蜂鸣器
ACALL DK
SETB P2.3
ACALL DK
RET
DK : MOV R0 , #255
DK1 : MOV R1 , #255
DK2 : MOV R2 , #15
DJNZ R2 , $
DJNZ R1 , DK2
JNB P3.2 , E2
JNB P3.3 , E2
JB P1.7 , E2
JB P1.6 , E2
JNB P1.1 , DKGZ ;检测电流
DJNZ R0 , DK1
RET
;=========================================================================================================以上是马达运行延时程序
;===========================================================================================================
DAKAI11 : CLR P2.3
ACALL DKQ
SETB P2.3
ACALL DKQ
RET
DKQ : MOV R0 , #255
DKQ1 : MOV R1 , #255
DKQ2 : MOV R2 , #15
DJNZ R2 , $
DJNZ R1 , DKQ2
DJNZ R0 , DKQ1
RET
;============================================================================================================以上是允许开始的空程序
;===========================================================================================================
;============ 折叠暂停程序
E1 : SETB P2.2
SETB P2.3
JNB P3.2 , E1
JNB P3.3 , E1
JB P1.7 , E1
JB P1.6 , E1
MOV 61H , #1 ;=!!!!报警设置和子程序 (一声)
ACALL ZDFZ
ACALL DKQ
ACALL BJ2
JMP B2
;============ 打开暂停程序
E2 : SETB P2.1
SETB P2.3
JNB P3.2 , E2
JNB P3.3 , E2
JB P1.7 , E2
JB P1.6 , E2
MOV 61H , #1 ;=!!!!报警设置和子程序
ACALL DKFZ
ACALL DKQ
ACALL BJ2
JMP B2
;============================================================================================================以上是暂停处理部分
;===========================================================================================================
;============ 座位传感器
E3 : SETB P2.2 ;=!!!!座位传感器保护
SETB P2.3
;ACALL ZDFZ
E31 : MOV 61H , #2 ;=!!!!报警设置和子程序 (二声)
ACALL DKQ
ACALL BJ2
E32 : MOV R7 , #15
E34 : ACALL FM
JNB P3.2 , E31
JNB P3.3 , E33
JB P1.7 , E31
JB P1.6 , E33
DJNZ R7 , E34
E33 : JMP ZHANG2
JMP B2
;============================================================================================================以上是座位传感器部分
;===========================================================================================================
;============ 折叠反转
ZDFZ : SETB P2.2
ACALL K01
CLR P2.1
ACALL K11
SETB P2.1
RET
;============ 打开反转
DKFZ : SETB P2.1
ACALL K01
CLR P2.2
ACALL K11
SETB P2.2
RET
;============ 打开反转
DWFZ : SETB P2.2
ACALL K01
CLR P2.1
ACALL K21
SETB P2.1
RET
;=======================================================蜂鸣器程序
FMQ : MOV R3 , 60H
FMQ1 : CLR P3.3
CLR P2.0
ACALL FM
SETB P3.3
SETB P2.0
ACALL FM
DJNZ 60H , FMQ1
RET
FM : MOV R0 , #255
FM1 : MOV R1 , #255
FM2 : MOV R2 , #5
DJNZ R2 , $
DJNZ R1 , FM2
DJNZ R0 , FM1
RET
;=======================================================暂停反转延时设置
K1 : MOV R0 , #255
K2 : MOV R1 , #255
K3 : MOV R2 , #5
DJNZ R2 , $
DJNZ R1 , K3
DJNZ R0 , K2
RET
K11 : MOV R0 , #255
K12 : MOV R1 , #255
K13 : MOV R2 , #5 ;=========折叠反转延时设置
DJNZ R2 , $
DJNZ R1 , K13
DJNZ R0 , K12
RET
K21 : MOV R0 , #255
K22 : MOV R1 , #255
K23 : MOV R2 , #15 ;=========打开反转延时设置3022,3041---10 3051----35 (????????????????)
DJNZ R2 , $
DJNZ R1 , K23
DJNZ R0 , K22
RET
;===========================================================================================================蜂鸣器的报警设置
;===========================================================================================================
;=======================================================蜂鸣器报警处理程序
BJ : MOV R3 , #6
BJ1 : CLR P3.3
ACALL G1
SETB P3.3
ACALL G1
DJNZ R3 , BJ1
RET
G1 : MOV R0 , #200
G11 : MOV R1 , #180
G12 : MOV R2 , #2 ;==蜂鸣器短声
DJNZ R2 , $
DJNZ R1 , G12
DJNZ R0 , G11
RET
BJ2 : ;==61H放置报警参数
BJ21 : CLR P2.3
CLR P2.0
ACALL G2
SETB P2.3
SETB P2.0
ACALL G2
DJNZ 61H , BJ21
RET
G2 : MOV R0 , #255
G21 : MOV R1 , #255
G22 : MOV R2 , #4 ;==蜂鸣器长声
DJNZ R2 , $
DJNZ R1 , G22
DJNZ R0 , G21
RET
K01 : MOV R0 , #255
K02 : MOV R1 , #255
K03 : MOV R2 , #25
DJNZ R2 , $
DJNZ R1 , K03
DJNZ R0 , K02
RET
END
|