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

📄 yibupstc9.asm

📁 LED显示屏驱动程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
nbsjclx:	nop	                                    ;(下排)   从内部字库调数据
	clr	78h	                                    ;RS485  0--JIESHOU
	SETB	79h	                                    ;ROM-CE'
	clr	7ah	                                    ;RAM-CE2'
	clr	7bh	                                    ;RAM-CE1'
	CLR	7ch	                                    ;A19
	CLR	7dh	                                    ;A18
	CLR	7eh	                                    ;A17
	CLR	7fh	                                    ;A16
        ;mov   2fh,#0fh                 ;位选控制字
	mov	a, 2fh
	lcall	send_kz	                                    ;位选RAM
	;***************************************
        ;第1行
	mov	r1, #00h	                            ;第1行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第2行
	mov	r1, #01h	                            ;第2行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第3行
	mov	r1, #02h	                            ;第3行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第4行
	mov	r1, #03h	                            ;第4行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第5行
	mov	r1, #04h	                            ;第1行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第6行
	mov	r1, #05h	                            ;第2行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第7行
	mov	r1, #06h	                            ;第3行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第8行
	mov	r1, #07h	                            ;第4行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第9行
	mov	r1, #08h	                            ;第1行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第10行
	mov	r1, #09h	                            ;第2行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第11行
	mov	r1, #0ah	                            ;第3行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第12行
	mov	r1, #0bh	                            ;第4行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第13行
	mov	r1, #0ch	                            ;第1行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第14行
	mov	r1, #0dh	                            ;第2行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第15行
	mov	r1, #0eh	                            ;第3行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;第16行
	mov	r1, #0fh	                            ;第4行
	lcall	hzzb_x	                                    ;数据从内部字库移入内存
	lcall	xszb_x	                                    ;显示缓冲数据准备
        ;
        
	ret
;****************************************************************************
;数据从内到外,按照8字标准,为显示程序直接读取数据(下排)
xszb_x:	nop
	mov	r0, #30h	                            ;数据读取指针
	mov	a, r1	                                    ; 行数
	clr	cy
	rlc	a
	rlc	a
	rlc	a
	rlc	a
	mov	dpl, a	                                    ;数据存储指针
	mov	dph, #31h	                            ;数据存储指针  /显示缓冲3000-30ffh
        ;
xzloopx:	mov	a, @r0
	movx	@dptr, a
	inc	r0
	inc	dptr
	cjne	r0, #40h, xzloopx
        ;
	mov	r0, #30h
	mov	a, r1	                                    ; 行数
	clr	cy
	rlc	a
	rlc	a
	rlc	a
	rlc	a
	mov	dpl, a	                                    ;数据存储指针
	mov	dph, #31h	                            ;数据存储指针  /显示缓冲3000-30ffh
dcloopx:	movx	a, @dptr
	mov	@r0, a
	inc	r0
	inc	dptr
	cjne	r0, #40h, dcloopx
        ;校验!!
	mov	r0, #30h
	nop
	nop
        ;
	ret
        ;******
;数据从外存移入内存,按照8个字标准,30-3fh为临时数据存储
hzzb_x:	nop
	clr	cy
	mov	a, r1
	rlc	a
	mov	b, a	                                    ;指针处理
	;********
	mov	dptr, #2100h	                            ;第1个字
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	30h, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	31h, a
	;
	mov	dptr, #2120h	                            ;第2个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	32h, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	33h, a
	;
	mov	dptr, #2140h	                            ;第3个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	34h, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	35h, a
	;
	mov	dptr, #2160h	                            ;第4个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	36h, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	37h, a
	;
	mov	dptr, #2180h	                            ;第5个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	38h, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	39h, a
	;
	mov	dptr, #21a0h	                            ;第6个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	3ah, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	3bh, a
	;
	mov	dptr, #21c0h	                            ;第7个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	3ch, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	3dh, a
	;
	mov	dptr, #21e0h	                            ;第8个字
	mov	a, b
	mov	a, dpl
	add	a, b
	mov	dpl, a
	movx	a, @dptr
	lcall	fazhang
	mov	3eh, a
	inc	dptr
	mov	a, b
	add	a, dpl
	movx	a, @dptr
	lcall	fazhang
	mov	3fh, a
	ret
	;
;**************  串口初始化   *****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为   2400  ;

comm:	mov	tmod, #20h	                            ;设置定时器T1工作方式2
	mov	tl1, #0f5h	                            ;#0fdh   f5	                            ;定时器计数初值,波特率 9600 
	mov	th1, #0f5h	                            ;#0fdh	                            ;定时器重装值
	setb	ea	                                    ;允许总的中断
	setb	es	                                    ;允许串行中断
	mov	pcon, #00h	                            ;波特率不倍增
	mov	scon, #50h	                            ;设置串口工作方式1,REN = 1 允许接收
	setb	tr1	                                    ;定时器开始工作
	ret	                                            ;返回
;***************  串口中断服务程序   ***********
;  如果接收  0FF  表示上位机需要联机信号,单片机发送 0FFH作为
;  应答信号,如果接收到 数字 1~ n,表示相应的功能;
;  这里,如果收到 1 ,则单片机向计算机发送字符  'H';
;            如果收到 2 ,则单片机向计算机发送字符  'e';
;            如果收到其他的数据,则发送    'J';
com_int:	PUSH	ACC
	PUSH	PSW
	clr	es	                                    ;禁止串行中断
	clr	ri	                                    ;清除接收标志位
	;***
	clr	01h	                                    ;清清屏标志
	mov	40h, #00h
	mov	41h, #00h
        ;***
	mov	a, sbuf	                                    ;从缓冲区取出数据
	mov	2bh, a	                                    ;临时存储
	mov	r0, 2ah	                                    ;调指针  0cdh
	mov	a, 2bh
	mov	@r0, a
	inc	2ah	                                    ;存指针 
	mov	a, 2ah
	cjne	a, #0f3h, zc1	                            ;判断数据超长?
	;没有超长直接退出!
	mov	2ah, #0cdh	                            ;数据超长,清指针
        ;************
	mov	r0, #0f2h
	mov	a, @r0
	cjne	a, #55h, zc1	                            ;判断结束位是否正确
	mov	r0, #0cdh
	mov	a, @r0
	cjne	a, #0cch, zc1
	setb	00h	                                    ;设置数据接收结束标志
	clr	led4
zc1:	nop
        setb	es	                                    ;允许串行中断
	POP	PSW
	POP	ACC
	reti
;****************串口数据处理************
;串口接收数据缓冲在40h---4fh
com_cl:	nop
	jnb	00h, exitcl
	;
	clr     es                          ;关闭串口
	mov	r0, #0cdh
	mov	a, @r0
	cjne	a, #0cch, exitcly	                    ;启示字
	inc	r0
	mov	a, @r0
	cjne	a, #24h, exitcly	                    ;字节数
	inc	r0
	mov	a, @r0
	cjne	a, #01h, exitcly	                    ;显示屏地址
	;以下是汉字
	mov	r0, #0f0h
	mov	a, @r0
	cjne	a, #2ah, exitcly	                    ;备用字/暂时不用
	mov	r0, #0f2h
	mov	a, @r0
	cjne	a, #55h, exitcly	                    ;结束字
	;若数据包对则继续
        ;判断地址程序,暂时不要
        ;数据和校验
	mov	r0, #0ceh
	mov	a, @r0	                                    ;字节数
jxjia:	inc	r0
	add	a, @r0
	cjne	r0, #0f0h, jxjia
	mov	r0, #0f1h
	xrl	a, @r0
	jnz	exitcly
        ;
	cpl	led2	                                    ;喂狗
	clr	00h	                                    ;清除接收到标志
        ;数据包正确保存数据,到存储器
	lcall	zhuanyi	                                    ;根据串口读到的内码,从汉字库中读出字模数据,
                                     ;并依次存储在ram中 .
	lcall	nbsjcl	                                    ;上屏内部数据处理,把字库转换成直接显示的数据,
                                     ;加快扫描的速度。
	lcall	nbsjclx	                                    ;下屏内部数据处理,把字库转换成直接显示的数据,
                                     ;加快扫描的速度。
	setb	led4
	lcall	com_send	                            ;串口数据发送
        ;
exitcly:nop
	setb	es	                                    ;打开串口中断
	clr	00h	                                    ;清除接收到标志
exitcl:	nop
	ret	                                            ;中断返回
;****************串口数据发送************
;****************************************6.405*0.305*0.03*0.1/58249048
com_send:	nop
	nop	                                            ;发送准备
	setb	78h	                                    ;RS485  0--JIESHOU
	SETB	79h	                                    ;ROM-CE'
	clr	7ah	                                    ;RAM-CE2'
	clr	7bh	                                    ;RAM-CE1'
	CLR	7ch	                                    ;A19
	CLR	7dh	                                    ;A18
	CLR	7eh	                                    ;A17
	CLR	7fh	                                    ;A16
        ;mov   2fh,#0fh                 ;位选控制字
	mov	a, 2fh
	lcall	send_kz	                                    ;位选RAM
	lcall	DELEY20MS
	;***************************************
        ;***********计算和
	mov	a, #06h
	add	a, #01h
	add	a, #4fh
	add	a, #4bh
	add	a, #5ah
	mov	5fh, a
        ;***********
	clr	es
	//setb	p3.4	                                    ;rs485 fa song
	nop
	mov	sbuf, #0cch	                            ;0---起始字	  
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti	                                    ;清除发送标志
	;字节数
	mov	sbuf, #06h	                            ;1---除起始字结束字以外字节数	  
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti
	;地址
	mov	sbuf, #01h	                            ;2---显示屏地址	
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti
	;OK
	mov	sbuf, #4Fh	                            ;3---O
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti	                                    ;清除发送标志
	mov	sbuf, #4Bh	                            ;4	  K         
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti	                                    ;清除发送标志
        ;备用
	mov	sbuf, #5ah	                            ;5---备用字	
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti	                                    ;清除发送标志
	;校验和
	mov	sbuf, 5fh	                            ;6	      
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti	                                    ;清除发送标志
	 ;结束符
	mov	sbuf, #55h	                            ;f	            
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti	                                    ;清除发送标志
	setb	es	                                    ;打开串口中断
	//clr	p3.4	                                    //CLR 485接收状态	                        
	nop	                                            ;发送准备
	clr	78h	                                    ;RS485  0--JIESHOU
	SETB	79h	                                    ;ROM-CE'
	clr	7ah	                                    ;RAM-CE2'
	clr	7bh	                                    ;RAM-CE1'
	CLR	7ch	                                    ;A19
	CLR	7dh	                                    ;A18
	CLR	7eh	                                    ;A17
	CLR	7fh	                                    ;A16
        ;mov   2fh,#0fh                 ;位选控制字
	mov	a, 2fh
	lcall	send_kz	                                    ;位选RAM
	ret
;*************************************************************

⌨️ 快捷键说明

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