⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 国旗升降控制系统的设计与实现.txt

📁 基于国旗升降控制系统的设计与实现
💻 TXT
📖 第 1 页 / 共 2 页
字号:
3.系统程序清单
A8255	EQU	0FF7CH  		;A口位选码  0/1/2/3键盘扫描
B8255   EQU	0FF7DH	 		;B口段位码
C8255   EQU	0FF7EH	 		;C口输入    0/1/2/3键盘扫描
D8255   EQU	0FF7FH  		;控制口
JIANZHI	EQU	21H			;GETKEY获得的键值存储空间
SAOM1	EQU	22H			;扫描1
SAOM2	EQU	23H			;扫描2
BIJIAO  EQU	24H                     ;判断当前位置与设定值得大小
TOP	BIT	00H                     ;是否上升到顶端
BOTTOM	BIT	01H                     ;是否下降到底端
UPING   BIT	02H                     ;上升状态
DOWNING	BIT	03H                     ;下降状态

MTD	EQU     77H			;C51中发往24C02数据存储单元首址(用于存储24C02内存储单元首址)
			                ;不论往24C02写数据还是读数据都应该先向24C02写入一个24C02内存储单元首址的字节
MRD	EQU	78H			;C51中接收24C02数据存储单元首址
NUMBYT	EQU	70H			;读写24C02字节个数
SLA	EQU	10H			;24C02中读写存储单元首址
CUNZUS	EQU	33H			;存储组数
SLAW    EQU     0A0H			;24C02写地址
SLAR    EQU     0A1H			;24C02读地址
VSDA    EQU 	P1.6			;串行传输数据线
VSCL    EQU 	P1.7 			;串行传输时钟线
                                        ;78h,79h,7ah实时显示国旗位置
					;7dh,7eh,7fh显示输入的要到达的位置

    ORG     0000H
    AJMP    MAIN
	ORG 	000BH
	LJMP	INTT0
	ORG	0013H
	LJMP	INTEX1       ;外部中断1,负脉冲时计圈数
        
        

MAIN:   MOV     SP,#60H  
	MOV	A,#89H
    MOV     DPTR,#D8255
	MOVX	@DPTR,A
	;LCALL	DIS8SHAN
	LCALL	CLEARMEN
	MOV     MTD,#10H        
	LCALL   RDE2PROM

	MOV	43H,78H
	MOV	42H,79H
	MOV	41H,7AH

WAIT:   LCALL	GETKEY
	MOV	A,JIANZHI
        CJNE	A,#0AH,KEYB
	JB      TOP,WAIT
	LCALL	UP                               ; 调上升子程序
	SJMP	WAIT
KEYB:   CJNE	A,#0BH,KEYC
	JB	BOTTOM,WAIT
	LCALL   DOWN                             ;调下降子程序 
	SJMP	WAIT
KEYC:   CJNE	A,#0CH,KEYD
	LCALL   BANQI                             ;调半旗程序 
	SJMP	WAIT
KEYD:   CJNE    A,#0DH,KEYF
   	LCALL	AUTO				;调自动程序
        SJMP	WAIT                       
KEYF:	CJNE	A,#0FH,WAIT                       ;F键复位
	AJMP	MAIN	
        
CLEARMEN:MOV	A,#00H
	MOV	20H,A
	MOV	21H,A
	MOV	22H,A
	MOV	23H,A
	MOV	24H,A
	MOV	25H,A
	MOV	26H,A
	MOV	27H,A
	MOV	28H,A
	MOV     40H,#00H
	MOV	41H,#00H
	MOV	42H,#00H
	MOV	43H,#00H
	MOV	60H,#00H
	MOV	61H,#00H
	MOV	62H,#00H

	MOV	7BH,#12H
	MOV	7CH,#12H
	MOV	7DH,#12H
	MOV	7EH,#12H	
	MOV	7FH,#12H

	MOV TH0,#0D8H
	MOV TL0,#0EFH
	MOV TMOD,#01H
	SETB	ET0

        SETB	EX1
        SETB	IT1
     	SETB	EA	
        RET
;-----------------------------
;     上升子程序
;-----------------------------
UP:		
	SETB	UPING		;上升过程
ULOP:   LCALL	ZTIAO
;	CLR	P1.1
;	LCALL	DIS
	LCALL	MUSIC
	MOV	A,78H
	CJNE	A,#00H,ULOP
	MOV	A,79H
	CJNE	A,#07H,ULOP
	MOV	A,7AH
	CJNE	A,#05H,ULOP
	SETB	TOP;上升到最高点,置标志位
        CLR	BOTTOM
	CLR	UPING
	CLR     DOWNING
	SETB	P1.1		;反向制动
	CLR	P1.0		
	LCALL	DL1	
	;SETB	P1.1
	SETB    P1.0
	RET
;------------------------
; 下降子程序
;------------------------
DOWN:	
	
	SETB	DOWNING		;下降过程
	MOV	P1,#0FFH
DLOP:	CLR	P1.0
	LCALL	DIS
	MOV	A,78H
	CJNE	A,#00H,DLOP
	MOV	A,79H
	CJNE	A,#00H,DLOP
	MOV	A,7AH
	CJNE	A,#00H,DLOP
	SETB	BOTTOM		;到最低点,置标志位
	CLR	TOP
	CLR	DOWNING	
	CLR	UPING
	SETB	P1.0		;反向制动
	CLR	P1.1
	LCALL	DL1
	MOV	P1,#0FFH	;停止
	RET
;----------------------
;       半旗子程序
;----------------------
BANQI:	CLR	P1.3
	LCALL	GETKEY
	MOV	A,JIANZHI
	CJNE	A,#0AH,BQLOPD	
	LCALL	UP
	SETB	DOWNING		;下降过程	
BDLOP:	CLR	P1.0
	LCALL	DIS
	MOV	A,78H
	CJNE	A,#00H,BDLOP
	MOV	A,79H
	CJNE	A,#00H,BDLOP
	MOV	A,7AH
	CJNE	A,#06H,BDLOP
	SETB	BOTTOM		;到最低点,置标志位
	CLR	DOWNING
	CLR	UPING
	SETB	P1.0		;反向制动
	CLR	P1.1
	LCALL	DL1
	MOV	P1,#0FFH
	SJMP	BANQI

BQLOPD:	CJNE	A,#0BH,BANQI
	SETB	UPING		;上升过程
BULOP:	CLR	P1.1
	LCALL	DIS
	MOV	A,78H
	CJNE	A,#00H,BULOP
	MOV	A,79H
	CJNE	A,#01H,BULOP
	MOV	A,7AH
	CJNE	A,#00H,BULOP	
	SETB	TOP		;上升到最高点,置标志位
	CLR	BOTTOM
	CLR	UPING
	CLR     DOWNING
	SETB	P1.1		;反向制动
	CLR	P1.0		
	LCALL	DL1	
	MOV	P1,#0FFH	;停止
	LCALL	DOWN
	RET
;--------------------------------
;自动子程序
;--------------------------------
AUTO:	LCALL	GETKEY
	MOV	7DH,JIANZHI
	LCALL	GETKEY
	MOV	7EH,JIANZHI
	LCALL	GETKEY
	MOV	7FH,JIANZHI
	LCALL	GETKEY
	MOV	A,JIANZHI
	CJNE	A,#0EH,BACK
        LCALL	CMP
	LCALL   DIS
	MOV	A,26H
	CJNE    A,#01H,EXT0
	LCALL   ZHENG
        JMP     EXT2
EXT0:	CJNE	A,#02H,EXT2
	LCALL   FAN
	JMP     EXT2
EXT2:	MOV     P1,#0FFH
        RET

BACK:	MOV	7DH,#00H
	MOV	7EH,#00H
	MOV	7FH,#00H
	JMP	AUTO
	RET

CMP:	MOV	A,78H
	SUBB	A,7DH
	JC	QEXT
	MOV	A,78H
	CJNE	A,7DH,NEXT1

	MOV	A,79H
	SUBB	A,7EH
	JC	QEXT
	MOV	A,79H
	CJNE	A,7EH,NEXT1

	MOV	A,7AH
	SUBB	A,7FH
	JC	QEXT
	MOV	A,7AH
	CJNE	A,7FH,NEXT1

	MOV	26H,#00H
	SJMP	QE
QEXT:	MOV	26H,#01H
	SJMP	QE
NEXT1:	MOV	26H,#02H
QE:	RET	

ZHENG:	SETB	UPING		;上升过程
UOP:	CLR	P1.1
	LCALL	DIS
	MOV	A,78H
	CJNE	A,7DH,UOP
	MOV	A,79H
	CJNE	A,7EH,UOP
	MOV	A,7AH
	CJNE	A,7FH,UOP
	SETB	TOP;上升到最高点,置标志位
        CLR	BOTTOM
	CLR	UPING
	CLR     DOWNING
	SETB	P1.1		;反向制动
	CLR	P1.0		
	LCALL	DL1	
	MOV	P1,#0FFH	;停止	
	RET

FAN:	SETB	DOWNING		;下降过程
	MOV	P1,#0FFH
DOP:	CLR	P1.0
	LCALL	DIS
	MOV	A,78H
	CJNE	A,7DH,DOP
	MOV	A,79H
	CJNE	A,7EH,DOP
	MOV	A,7AH
	CJNE	A,7FH,DOP
	SETB	BOTTOM		;到最低点,置标志位
	CLR	TOP
	CLR	DOWNING	
	CLR	UPING
	SETB	P1.0		;反向制动
	CLR	P1.1
	LCALL	DL1
	MOV	P1,#0FFH	;停止
	RET	
	

TINGZHI:SETB	P1.1
	SETB	P1.0
	LCALL	DELAY
	RET


;------------------------------
;外部中断1,将高度存在78-7AH中
;------------------------------
INTEX1:	PUSH	ACC
	PUSH	PSW
	CLR	EX1
	INC	40H
LLLU:	MOV	A,40H
	CJNE	A,#01H,LLL      ;数脉冲,满1厘米
	MOV	40H,#00H
	
	JNB	UPING,LLLD
	INC	41H
	MOV	A,41H
	CJNE	A,#0AH,LLL
	MOV	41H,#00H
	INC	42H
	MOV	A,42H
	CJNE	A,#0AH,LLL
	MOV	42H,#00H
	INC	43H
	MOV	A,43H
	CJNE	A,#0AH,LLL
	MOV	43H,#00H

LLLD:	JNB 	DOWNING,LLL
	DEC	41H
	MOV	A,41H
	CJNE	A,#0FFH,LLL
	MOV	41H,#09H
	DEC	42H
	MOV	A,42H
	CJNE	A,#0FFH,LLL
	MOV	42H,#09H
	DEC	43H
	MOV	A,43H
	CJNE	A,#0FFH,LLL
	MOV	41H,#00H	;减至负数,赋0
	MOV	42H,#00H
	MOV	43H,#00H
LLL:	MOV	7AH,41H
	MOV	79H,42H
	MOV	78H,43H
	SETB	EX1
	POP	PSW
	POP	ACC
	RETI
	NOP
	NOP
	NOP


INTT0:	INC 	25H ;中断服务,中断计数器加1
        MOV 	TH0,#0D8H
        MOV 	TL0,#0EFH ;12M晶振,形成10毫秒中断
        RETI
;-------------------------------------------------------------------------
GETKEY:					;最终键值存在21H(JIANZHI)中(0---F)  			
	MOV	A,#89H
        MOV     DPTR,#D8255
	MOVX	@DPTR,A
        MOV     SAOM1,#016H
YX1:    MOV     SAOM2,#04FH
KEY1:   ACALL   KS1			;扫描有无键按下
        JNZ     LK2			;有转LK2
;---------------------------------------
	ACALL   DIS			;调显示程序
;---------------------------------------
        DJNZ    SAOM2,KEY1		;SM2(23H)为控制扫描次数
        DJNZ    SAOM1,YX1			;SM1(22H)为控制扫描次数
        SJMP    KEY1			;无键始终扫描
;---------------------------------------        
LK2:	MOV	R2,#0FEH		;有键行扫描
	MOV	R7,#00H
LK4:    MOV     DPTR,#A8255		;A口地址
	MOV	A,R2
	MOVX	@DPTR,A
	MOV     DPTR,#C8255		;C口地址
	MOVX	A,@DPTR			;读C口
    	JB	ACC.0,LONE		;不是A.0转移
	MOV	A,#00H
 	AJMP	LKP
LONE:	JB	ACC.1,LTWO		;不是A.1转移
	MOV	A,#01H
	AJMP	LKP
LTWO:	JB	ACC.2,LTHR		;不是A.2转移
	MOV	A,#02H
       	AJMP	LKP
LTHR:	JB	ACC.3,NEXT		;不是A.3转移
	MOV	A,#03H
LKP:	ADD	A,R7
	PUSH	ACC
;---------------------------------------
LK3:	ACALL	DIS			;是否还按键/是一直调显示程序
        ACALL   KS1
	JNZ	LK3
;---------------------------------------
	POP	ACC
	MOV	R0,#JIANZHI		;键值存在JIANZHI(21H)中
        MOV     @R0,A
        RET

NEXT:	INC	R7

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -