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

📄 cs1694_详细注释版.asm

📁 CS1694显示驱动源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;CS1694.ASM
;-----------CS1694工作模式设置--------------------------	
	CS1694_DATA	EQU	P1.7	;CS1694 SERIAL DATA INPUT 
	CS1694_CLK	EQU	P1.6	;CS1694 SERIAL CLOLC 
	CS1694_STB	EQU	P1.5	;CS1694 CHIP SELECT 
	KEY			EQU	P3.3	
	
;-----------CS1694工作模式设置--------------------------
	MODE_DISPLAY		EQU	03H		;7GRIDS 10SEGS
	MODE_DATA_WRITE_1	EQU	40H		;正常模式,写数据到显示RAM,数据写入后地址自动加1	
	MODE_DATA_WRITE_2	EQU	44H		;正常模式,写数据到显示RAM,地址固定
	MODE_DATA_READ_1	EQU	42H		;正常模式,读KEY_RAM,地址自动加1
		
	DATA_RAM_SET		EQU	0C0H		;显示RAM地址设定为00H
	
	;DISPLAY_ON		EQU	8FH		;开显示,脉宽为14/16
	DISPLAY_ON		EQU	8BH		;开显示,脉宽为10/16
	DISPLAY_OFF		EQU	80H		;关显示
	;-----------------BIT ADDR DEFINATION-------------------
	SET_TIME_FLAG	BIT	00H	
	DELAY_FLAG		BIT	01H	
	KEY_FLAG			BIT	02H
	KEY_FLAG_1		BIT	03H
	KEY_FLAG_2		BIT	04H
;-------------------------------------------------------
;---------------REGISTER DEFINATION---------------------
	KEY_REG		EQU	2AH	;CS1694	键盘RAM
	TL0_DATA		EQU	2BH	
	TH0_DATA		EQU	2CH	

	TL1_DATA		EQU	2DH	
	TH1_DATA		EQU	2EH
	
	CS1694_REG	EQU	2FH		;CS1694串行传输数据暂存器
	
	COM1_REG		EQU	30H	;第一个数码管要显示的数字或字符
	COM2_REG		EQU	31H	;第二个数码管要显示的数字或字符
	COM3_REG		EQU	32H	;第三个数码管要显示的数字或字符
	COM4_REG		EQU	33H	;第四个数码管要显示的数字或字符
	COM5_REG		EQU	34H	;第五个数码管要显示的数字或字符
	COM6_REG		EQU	35H	;第六个数码管要显示的数字或字符
	COM7_REG		EQU	36H	;第七个数码管要显示的数字或字符
	COM8_REG		EQU	37H	;第八个数码管要显示的数字或字符
	COM9_REG		EQU	38H	;第九个数码管要显示的数字或字符
	COM10_REG	EQU	39H		;第十个数码管要显示的数字或字符

	TIME_COUNTER	EQU	3AH
	INT_COUNT	EQU	3BH	
	TEMP_1		EQU	3CH	
	TEMP_2		EQU	3DH
	TEMP_3		EQU	3EH
	TEMP_4		EQU	3FH
	

	GRID1_REG	EQU	40H	;横向填充的DIS_RAM单元,10位留出两个RAM地址	
	GRID2_REG	EQU	42H	
	GRID3_REG	EQU	44H	
	GRID4_REG	EQU	46H	
	GRID5_REG	EQU	48H	
	GRID6_REG	EQU	4AH	
	GRID7_REG	EQU	4CH	
	
	KEY_RAM_1	EQU	50H	;读入KEY_RAM第一字节
	KEY_RAM_2	EQU	51H	;读入KEY_RAM第二字节
	KEY_RAM_3	EQU	52H	;读入KEY_RAM第三字节
	KEY_RAM_4	EQU	53H	;读入KEY_RAM第四字节
	KEY_RAM_5	EQU	54H	;读入KEY_RAM第五字节

	STACK			EQU	70H	;堆栈定义(70H-7FH)

	;--------------CONSTANT DEFINATION----------------------
		
	DELAY_3MS_H		EQU	0F4H	
	DELAY_3MS_L		EQU	48H
	
	DELAY_5MS_H		EQU	0ECH	
	DELAY_5MS_L		EQU	78H
		
	DELAY_10MS_H	EQU	0D8H	
	DELAY_10MS_L	EQU	0F0H	
	
	DELAY_15MS_H	EQU	0C5H	
	DELAY_15MS_L	EQU	68H	

;--------------------------------------------------------
		ORG	0000H
		LJMP	MAIN
		NOP
		NOP
		
		ORG	0013H
		LJMP	INT1_SERV		;外部中断1服务子程序
		NOP
		NOP

		ORG	001BH		
		LJMP	TIMER1_SERV		;定时器1服务子程序
		NOP
		NOP
		
;--------------------------------------------------------	
		ORG	0030H
MAIN:	
		MOV	R7,#00H
		DJNZ	R7,$
		MOV	R7,#00H
		DJNZ	R7,$
		
		LCALL	IO_INIT	
		LCALL	RAM_CLR			
		MOV	SP,#STACK		
		
		;ORL	TCON,#84H		;TCON=1000 0100B
		;ORL	IE,#8CH			;IE=1000 1100B
START:
		LCALL	CS1694_INIT
		NOP
START_1:
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	CS1694_ALL_DISPLAY
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	CS1694_ALL_DARK
		;SJMP	START_1
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DIS_CS1694
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	CS1694_ALL_DARK
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DISPLAY_1
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	CS1694_ALL_DARK
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DISPLAY_PASS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	DELAY_500MS
		LCALL	CS1694_ALL_DARK
		SJMP	START_1
MAIN_WAIT:
		NOP
		JB		KEY,MAIN_WAIT

		JNB	KEY,KEY_1
KEY_1:
		JB		KEY,MAIN_WAIT
		LCALL	DELAY_20MS
		JB		KEY,MAIN_WAIT
KEY_2:
		LCALL	CS1694_ALL_DISPLAY
		JNB	KEY,KEY_2

		JB		KEY,NEXT
NEXT:
		NOP
		JB		KEY,NEXT

		JNB	KEY,KEY_3
KEY_3:
		JB		KEY,NEXT
		LCALL	DELAY_20MS
		JB		KEY,NEXT
KEY_4:
		LCALL	CS1694_ALL_DARK
		JNB	KEY,KEY_4

		JB		KEY,NEXT_1
NEXT_1:
		NOP
		JB		KEY,NEXT_1

		JNB	KEY,KEY_5
KEY_5:
		NOP
		JNB	KEY,KEY_5
		
		LCALL	CS1694_KEY_RAM_TEST
		NOP
MAIN_EXIT:
		NOP
		LJMP	START;$
		;LCALL	CS1694_KEY_RAM_TEST
		;LCALL	CS1694_DIS_RAM_TEST
		
;--------------------------------------------------------	
RAM_CLR:			
		NOP
		MOV		R0,#20H
		CLR		A
RAM_CLR_1:
		MOV		@R0,A
		INC		R0
		CJNE	R0,#80H,RAM_CLR_1
		RET

;--------------------------------------------------------	
IO_INIT:			
		NOP
		MOV	A,#0FFH       	
		MOV   P1,A
    	MOV   P3,A	
		RET		

;--------------------------------------------------------					
CS1694_INIT:	
	SETB	CS1694_STB			;CS1694_STB=1
	CLR	CS1694_DATA			;CS1694_DATA=0
	SETB	CS1694_CLK			;CS1694_CLK=1
	NOP
	NOP
	
	SETB	CS1694_STB
	NOP
	MOV	CS1694_REG,#DISPLAY_OFF		;CS1694关显示
	CLR	CS1694_STB
	LCALL	CS1694_8BIT_WRITE
	NOP
	RET
		
;--------------------------------------------------------
CS1694_ALL_DISPLAY:						;LED全显
	MOV	A,#7FH						;DIS_RAM全部填充为1
	LCALL	DIS_RAM_FILL					;将数据写入COM1_REG~COM10_REG
	LCALL	CS1694_RAM_CONVERT
	LCALL	CS1694_DIS_RAM_WRITE

	SETB	CS1694_STB
	NOP
	MOV	CS1694_REG,#DISPLAY_ON		;CS1694开显示
	CLR	CS1694_STB
	LCALL	CS1694_8BIT_WRITE
	NOP
	RET

;--------------------------------------------------------
CS1694_ALL_DARK:							;LED全灭
	MOV	A,#00H							;DIS_RAM全部填充为0
	LCALL	DIS_RAM_FILL
	LCALL	CS1694_RAM_CONVERT
	LCALL	CS1694_DIS_RAM_WRITE

	SETB	CS1694_STB
	NOP
	MOV	CS1694_REG,#DISPLAY_ON		;CS1694开显示
	CLR	CS1694_STB
	LCALL	CS1694_8BIT_WRITE
	NOP
	RET

;--------------------------------------------------------
DIS_CS1694:
	MOV	DPTR,#TAB_CS1694
	LCALL	DIS_SUB
	RET

;--------------------------------------------------------
DISPLAY_1:
	MOV	DPTR,#TAB_LED_COMMON_CATHODE
	LCALL	DIS_SUB
	RET

;--------------------------------------------------------
DISPLAY_PASS:
	MOV	DPTR,#TAB_PASS
	LCALL	DIS_SUB
	RET
;--------------------------------------------------------
DIS_SUB:
	MOV	R0,#COM1_REG
	MOV	R2,#00H
	MOV	TEMP_1,#0AH
DIS_SUB_1:
	MOV	A,R2
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R0
	INC	R2
	DJNZ	TEMP_1,DIS_SUB_1

	LCALL	CS1694_RAM_CONVERT
	LCALL	CS1694_DIS_RAM_WRITE

	SETB	CS1694_STB
	NOP
	MOV	CS1694_REG,#DISPLAY_ON		;CS1694开显示
	CLR	CS1694_STB
	LCALL	CS1694_8BIT_WRITE
	NOP
	RET

;--------------------------------------------------------
DIS_RAM_FILL:	
	CLR	C
	MOV	R6,#0AH
	MOV	R0,#COM1_REG
CS1694_DISPLAY_1:
	MOV	@R0,A
	INC	R0
	DJNZ	R6,CS1694_DISPLAY_1
	NOP
	RET
	
;--------------------------------------------------------
CS1694_RAM_CONVERT:		
	CLR	C
	MOV	R0,#COM1_REG
	MOV	R1,#GRID1_REG		
	MOV	TEMP_1,#07H
CS1694_RAM_CONVERT_1:
	MOV	TEMP_2,#08H					;COM1_REG~COM8_REG数据移位
CS1694_RAM_CONVERT_2:		
	MOV	A,@R0							;取COM1_REG中的内容进行移位处理
	RRC	A								;COM1_REG-B0→Cy	
	MOV	B,A							;移位后的数据暂存到B中	
	MOV	@R0,A							;移位后的数据重新送回保存	

	MOV	A,@R1							;取出GIRD1_REG的数据
	RRC	A								;Cy→GIRD1_REG-B0			
	MOV	@R1,A
	INC	R0
	DJNZ	TEMP_2,CS1694_RAM_CONVERT_2	;将COM1_REG~COM10_REG中的BO依次移到GRID1_REG中
	
	INC	R1
	MOV	TEMP_3,#03H					;COM9_REG~COM10_REG数据移位
CS1694_RAM_CONVERT_3:		
	MOV	A,@R0							;取COM1_REG中的内容进行移位处理
	RRC	A								;COM1_REG-B0→Cy	
	MOV	B,A							;移位后的数据暂存到B中	
	MOV	@R0,A							;移位后的数据重新送回保存	

	MOV	A,@R1							;取出GIRD1_REG的数据
	RRC	A								;Cy→GIRD1_REG-B0			
	MOV	@R1,A
	
	INC	R0
	DJNZ	TEMP_3,CS1694_RAM_CONVERT_3	;将COM1_REG~COM10_REG中的BO依次移到GRID1_REG中

	MOV	TEMP_4,#06H
	CLR	C
	MOV	A,@R1
CS1694_RAM_CONVERT_4:
	RRC	A
	DJNZ	TEMP_4,CS1694_RAM_CONVERT_4
	MOV	@R1,A

	INC	R1
	MOV	R0,#COM1_REG
	DJNZ	TEMP_1,CS1694_RAM_CONVERT_1
	NOP
	RET

;--------------------------------------------------------
CS1694_DIS_RAM_WRITE:
	SETB	CS1694_STB
	NOP	
	MOV	CS1694_REG,#MODE_DISPLAY	;显示模式设置:7GRIDS,10SEGMENTS	
	CLR	CS1694_STB						;选通CS1694器件
	NOP
	LCALL	CS1694_8BIT_WRITE
	
	SETB	CS1694_STB
	NOP
	MOV	CS1694_REG,#MODE_DATA_WRITE_1	
	CLR	CS1694_STB
	NOP
	LCALL	CS1694_8BIT_WRITE

⌨️ 快捷键说明

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