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

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

📁 基于国旗升降控制系统的设计与实现
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	INC	R7
	INC	R7
	INC	R7
	MOV	A,R2
	JNB	ACC.3,KND
	RL	A
	MOV	R2,A
	AJMP	LK4
KND:    AJMP    KEY1			;无键按下一直扫描
;---------------------------------------
;---------------------------------------
KS1:    MOV     DPTR,#A8255		;键盘全扫描
	MOV	A,#00H
	MOVX	@DPTR,A
	INC	DPTR
	INC	DPTR
	MOVX	A,@DPTR
	CPL	A
	ANL	A,#0FFH
	NOP
	NOP
	RET


;----------------------------------
DIS8SHAN:   ;开机自检 8闪现3次

	MOV     R0,#03
LP2:    MOV	78H,#08H
	MOV	79H,#08H
	MOV	7AH,#08H
        MOV	7bH,#08H
	MOV	7CH,#08H
	MOV	7DH,#08H
        MOV	7EH,#08H
	MOV	7FH,#08H
        LCALL    DIS
	LCALL    DIS
        LCALL    DIS
	LCALL    DIS
        LCALL    DISLED
        DJNZ     R0,LP2
	RET

;-------------------------------------------------------------
DIS:	SETB	RS1				;显示子程序				
		CLR	RS0
		MOV	R0,#78H
DS0:    MOV     R3,     #0FEH
		MOV	A,R3
DS1:    
		MOV     DPTR,#0FF7CH
		MOVX	@DPTR,A
		INC	DPTR
		MOV	A,@R0
		ADD	A,#1FH
		MOVC	A,@A+PC
		MOVX	@DPTR,A
		NOP
		NOP
		ACALL	DL1
		;NOP
		;NOP
		INC	R0
		MOV	A,R3	
		NOP
		JNB      ACC.7,LD1	
		NOP
		RL	A
		MOV	R3,A
		;NOP
		;NOP
		AJMP	DS1
		;NOP
  		;NOP
  		AJMP	MAIN	       
  LD1:	CLR		RS1

 	 MOV		MTD,#10H
	LCALL		WRE2PROM	
	RET
  		NOP
  		NOP
  		AJMP	MAIN
        DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH   		 ;0,1,2,3,4,5,6,7,8
        DB      6FH,77H,7CH,39H,5EH,79H,71H,1EH,31H,00H,3EH	 ;9,A,B,C,D,E,F,J,R,灭,U
DL1:    MOV     R7,#04H
DL:     MOV     R6,#0FFH
DL0:	DJNZ	R6,DL0
		DJNZ	R7,DL
		NOP
		NOP        	
        RET
        NOP
	NOP
        LJMP    MAIN

DISLED:MOV		78H,#12H          ;8位灭显
	MOV		79H,#12H
	MOV		7AH,#12H
        MOV		7bH,#12H
	MOV		7CH,#12H
	MOV		7DH,#12H
        MOV		7EH,#12H
	MOV		7FH,#12H
	LCALL           DIS
	LCALL		DELAY
	RET

DELAY:  MOV   R1,#03H                      ;延时子程序
DELAY2:                     
        PUSH  0            ;保存现场
        PUSH  1
        MOV   0,#0H
DELAY1:
        MOV   1,#0H
        DJNZ  1,$
        DJNZ  0,DELAY1
        POP   1            ;恢复现场
        POP   0
	DJNZ	R1,DELAY2
        RET
        
;---------------------------------------
;I2C总线使用软件包
;---------------------------------------
WRE2PROM:
	PUSH  	DPH        	
        PUSH  	DPL
        PUSH  	ACC   
	MOV 	SLA,#SLAW
	MOV 	NUMBYT,#04H
	LCALL 	WRNBYT
	POP	ACC
	POP	DPL
	POP	DPH
	RET;---------------------------------------
RDE2PROM:
	PUSH  	DPH        	
        PUSH  	DPL
        PUSH  	ACC	
	MOV 	SLA,#SLAW
	MOV 	NUMBYT,#1
	LCALL 	WRNBYT
	MOV 	SLA,#SLAR
	MOV 	NUMBYT,#3
	LCALL 	RDNBYT
	POP	ACC
	POP	DPL
	POP	DPH
	RET

STA:	SETB 	VSDA			;启动
	SETB 	VSCL
	NOP
	NOP
	CLR 	VSDA
	NOP
	NOP
	CLR 	VSCL
	RET
;----------------------------------------
STOP:	CLR 	VSDA			;停止
	SETB 	VSCL
	NOP
	NOP
	SETB 	VSDA
	NOP
	NOP
	CLR 	VSDA
	CLR 	VSCL
	RET
;----------------------------------------
MACK:	CLR 	VSDA			;发送应答位
	SETB 	VSCL
	NOP
	NOP
	CLR 	VSCL
	SETB 	VSDA
	RET
;----------------------------------------
MNACK:	SETB 	VSDA			;发送非应答位
	SETB 	VSCL
	NOP
	NOP
	CLR 	VSCL
	CLR 	VSDA
	RET
;-----------------------------------------
CACK:					;应答位检查	正确F0为0 否则为1
	SETB 	VSDA			;置VSDA为输入方式			
	SETB 	VSCL			;置VSDA为数据有效
	CLR 	F0			;预设F0=0
	MOV 	C,VSDA			;输入VSDA引脚状态
	JNC 	CEND			;检查VSDA引脚状态,正常应答转CEND,且F0为0
	SETB 	F0			;无正常应答,F0为1
CEND:	CLR 	VSCL			;子程序结束使VSCL为0
	RET

;----------------------------------------
WRBYT:					;写一个字节
	MOV 	R0,#08H			;8位数据长度送R0
WLP:	RLC 	A			;发送数据左移 发送位进C
	JC 	WR1			;判断发送1 0 发送1进WR1
	AJMP 	WRO			;发送0进WR0
WLP1: 	DJNZ 	R0,WLP			;8位发送完?未完转WLP
	RET				;8位发送结束
WR1:	SETB 	VSDA			;发送1程序段
	SETB 	VSCL
	NOP
	NOP
	CLR 	VSCL
	CLR 	VSDA
	AJMP 	WLP1
WRO:	CLR 	VSDA			;发送0程序段
	SETB 	VSCL
	NOP
	NOP
	CLR 	VSCL
	AJMP 	WLP1
;----------------------------------------
RDBYT:					;读一个字节
	MOV 	R0,#08H			;8位数据长度送R0
RLP:	SETB 	VSDA			;置VSDA为输入方式
	SETB 	VSCL			;置VSDA为数据有效
	MOV 	C,VSDA			;读入VSDA状态
	MOV 	A,R2			;读入0程序段 由C拼装入R2中
	RLC 	A			
	MOV 	R2,A			
	CLR 	VSCL			;使VSCL为零 可继续接收数据位
	DJNZ 	R0,RLP			;8位读完否 未读完转RLP
	RET
;-----------------------------------------
;写N个字节数据 MTD:发送数据缓冲区首址 SLA:写入24C02的缓冲区首址 NUMBYT:发送数据个数
;-----------------------------------------
WRNBYT: 				
	MOV 	R3,NUMBYT		
	LCALL 	STA			;启动I2C总线
	MOV 	A,SLA			;发送SLA字节
	LCALL 	WRBYT
	LCALL 	CACK			;检查应答位
	JB 	F0,WRNBYT		;若非应答位,则重发		
	MOV 	R1,#MTD
WRDA:	MOV 	A,@R1
	LCALL 	WRBYT
	LCALL 	CACK
	JB 	F0,WRNBYT
	INC	R1
	DJNZ 	R3,WRDA
	LCALL 	STOP
	RET
;---------------------------------------
;读N个字节子程序 MRD:接受数据缓冲区首址 SLA:读入24C02的缓冲区首址 NUMBYT:发送数据个数
;---------------------------------------
RDNBYT:					;读N个字节子程序
	MOV 	R3,NUMBYT
	LCALL 	STA			;启动I2C总线
	MOV 	A,SLA			;发送寻址字节
	LCALL 	WRBYT
	LCALL 	CACK			;检查应答位
	JB 	F0,RDNBYT		;非正常应答时重新开始
RDN:	MOV 	R1,#MRD			;接受数据缓冲区首址入R1
RDN1:	LCALL 	RDBYT			;读入一个字节进接受数据缓冲区
	MOV 	@R1,A
	DJNZ 	R3,ACK			;N个字节读完否 未完转ACK
	LCALL 	MNACK			;N个字节读完 发送非应答位/A
	LCALL 	STOP			;发送停止信号
	RET				;子程序结束
ACK:	LCALL 	MACK			;发送应答位
	INC 	R1			;指向下一个接受数据缓冲区单元
	SJMP 	RDN1			;转向下一个字节数据
;----------------------------------------
;I2C总线程序包结束
;----------------------------------------

MUSIC: 
PUSH	ACC
PUSH	B 
SETB	RS0
CLR	RS1
MUSIC0:
NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 25H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A
INC DPTR
MOV A,B
MOVC A,@A+DPTR ;取节拍代码送R7
CJNE A,#00h,con
LJMP ED1
CON:MOV R7,A
SETB TR0 ;启动计数
MUSIC2:
NOP
CPL P3.2
MOV A,R6
MOV R3,A
LCALL DEL
MOV A,R7
CJNE A,25H,MUSIC2 ;中断计数器(20H)=R7否?
;不等,则继续循环
MOV 25H,#00H ;等于,则取下一代码
INC DPTR
; INC B
LJMP MUSIC1
MUSIC3:
NOP
CLR TR0 ;休止100毫秒
MOV R2,#0DH
MUSIC4:
NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
NOP
DAT:
db 40h,22h,30h,42h,30h,22h,30h,22h,30h,12h,40h,22h,39h,12h,37h,12h
db 30h,42h,30h,62h,26h,22h,30h,22h,2bh,12h,26h,12h,20h,42h,20h,42h
db 26h,22h,26h,12h,30h,22h,26h,12h,20h,22h,26h,12h,2bh,42h,2bh,82h
db 1ch,42h,20h,42h,2bh,42h,26h,42h,20h,22h,26h,42h,20h,22h,26h,22h
db 2bh,12h,26h,12h,30h,42h,26h,82h,40h,22h,39h,12h,30h,22h,30h,22h
db 26h,22h,26h,12h,20h,22h,20h,22h,2bh,22h,2bh,12h,2bh,12h,39h,42h
db 2bh,42h,40h,22h,30h,42h,30h,22h,26h,42h,26h,22h,20h,82h,30h,22h
db 26h,12h,20h,22h,20h,22h,1ch,40h,20h,40h,26h,22h,30h,12h,20h,22h
db 20h,22h,20h,22h,26h,42h,30h,42h,40h,42h,30h,42h,26h,22h,30h,12h
db 20h,22h,20h,22h,20h,22h,26h,42h,30h,42h,40h,42h,30h,42h,40h,42h
db 30h,42h,40h,42h,30h,42h,30h,82h,00h

ED1:
POP	B
POP	ACC
CLR	RS0
RET

DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
;------------------------------------
;正转调速程序   
ZTIAO:  
	MOV	SPEEDH,#2FH
	MOV	SPEEDL,#35H
XHUAN0:  CLR	P1.1
	SETB	P1.0
	LCALL	DIS
	MOV    A,SPEEDH
	DEC	A
	MOV	60H,A
	CJNE    A,#00H,XHUAN0
XHUAN1:	SETB    P1.1
	SETB    P1.0
	LCALL   DIS
	MOV	A,SPEEDL
	DEC	A
	MOV 	61H,A
	CJNE	61H,#00H,XHUAN1
	RET

;反转调速程序
FTIAO:
	MOV	SPEEDH,#2FH
	MOV	SPEEDL,#35H
XHAN3:  CLR	P1.0
	SETB	P1.1
	LCALL	DIS
	MOV	A,SPEEDH
	DEC	A
	MOV	60H,A
	CJNE    A,#00H,XHUN3
XHUAN4:	SETB    P1.1
	SETB    P1.0
	LCALL   DIS
	MOV	A,SPEEDL
	DEC	A
	MOV 	61H,A
	CJNE	61H,#00H,XHUAN4
	RET
		END

⌨️ 快捷键说明

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