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

📄 7279a_p1.a51

📁 一个流量控制仪器的源码
💻 A51
字号:

;********************************************************
; RAM 定义
;********************************************************
VAR1		SEGMENT	DATA


RSEG		VAR1
BIT_COUNT:	DS	1
TIMER:		DS	1
TIMER1:		DS	1
TEN:		DS	1
DATA_IN:	DS	1
DATA_OUT:	DS	1

;********************************************************
; I/O 口定义
;********************************************************

DAT		BIT	P1.0
KEY		BIT	P1.1
CS		BIT	P1.2
CLK		BIT	P1.3


; FUNCTION HD7279_init (BEGIN)

PUBLIC	HD7279_init
HD7279_initP	SEGMENT	CODE
RSEG	HD7279_initP
HD7279_init:	MOV	P1,#10111111B
		MOV	TIMER,#50

START_DELAY:	MOV 	TIMER1,#255
START_DELAY1:	DJNZ	TIMER1,START_DELAY1
		DJNZ	TIMER,START_DELAY
		MOV	DATA_OUT,#10100100B
		CALL	SEND
		SETB	CS
		
		SETB	KEY		;!!!!!*****P1,P2,P3口读前先置1
		
		RET

; FUNCTION HD7279_init (END)

; FUNCTION _HD7279_disp (BEGIN)

PUBLIC	_HD7279_disp
HD7279_dispP	SEGMENT	CODE
RSEG	HD7279_dispP
_HD7279_disp:	SETB	CS

		MOV     ACC,#8
		MOV	B,#10000111B	;!!!!!下载数据且按方式0译码
		
HD7279_D_LOOP:	PUSH	ACC
		MOV	DATA_OUT,B
		CALL 	SEND

		MOV	DATA_OUT,@R1
		CALL	SEND
		
		DEC	B
		INC	R1
		POP	ACC
		DJNZ	ACC,HD7279_D_LOOP 
                
                SETB	CS                          
		RET 
    
; FUNCTION _HD7279_disp (END)


; FUNCTION _HD7279_DK (BEGIN)

PUBLIC	_HD7279_DK
HD7279_DKP	SEGMENT	CODE
RSEG	HD7279_DKP
_HD7279_DK:	SETB	CS

		MOV	DATA_OUT,#10001000B
		CALL 	SEND

		MOV	DATA_OUT,R7
		CALL	SEND
                
                SETB	CS                          
		RET 
    
; FUNCTION _HD7279_DK (END)


; FUNCTION HD7279_GETKEY (BEGIN)

PUBLIC	HD7279_GETKEY
HD7279_GETKEYP	SEGMENT	CODE
RSEG	HD7279_GETKEYP
HD7279_GETKEY:	SETB	CS
		MOV	DATA_OUT,#00010101B
		CALL	SEND
		CALL	RECEIVE
		SETB	CS                                           
                                           
		MOV     R7,DATA_IN

		RET     
; FUNCTION HD7279_getkey (END)



HD7279_FUNCTIONP	SEGMENT	CODE
RSEG		HD7279_FUNCTIONP
;*****************************************************
;	发送一个字节到HD7279,高位在前
;*****************************************************

SEND:		MOV	BIT_COUNT,#8
		CLR	CS
		CALL	LONG_DELAY
SEND_LOOP:	MOV	ACC,DATA_OUT
		MOV	C,ACC.7
		;MOV	C,DATA_OUT.7
		
		MOV	DAT,C
		SETB	CLK
		MOV	A,DATA_OUT
		RL	A
		MOV	DATA_OUT,A
		CALL 	SHORT_DELAY
		CLR	CLK
		CALL	SHORT_DELAY
		DJNZ	BIT_COUNT,SEND_LOOP
		CLR	DAT
		RET

;******************************************************
;	从HD7279接收一个字节,高位在前
;******************************************************

RECEIVE:	MOV	BIT_COUNT,#8
		SETB 	DAT

		CALL	LONG_DELAY
RECEIVE_LOOP:	SETB	CLK
		CALL	SHORT_DELAY
		MOV	A,DATA_IN
		RL	A
		MOV	DATA_IN,A
		MOV	C,DAT
		
		MOV	ACC.0,C
		MOV	DATA_IN,ACC
		;MOV	DATA_IN.0,C
		CLR	CLK
		CALL	SHORT_DELAY
		DJNZ	BIT_COUNT,RECEIVE_LOOP
		CLR	DAT
		RET

;*******************************************************
;	延时子程序
;*******************************************************

LONG_DELAY:	MOV	TIMER,#25
DELAY_LOOP:	DJNZ	TIMER,DELAY_LOOP
		RET

SHORT_DELAY:	MOV	TIMER,#4
SHORT_LOOP:	DJNZ	TIMER,SHORT_LOOP
		RET


		END



		

⌨️ 快捷键说明

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