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

📄 lcd_putc.s

📁 一个基于单片机的小型操作系统
💻 S
字号:
;/*
;*********************************************************************************************************************
;*                 东软培训中心教学项目:基于ARM和uc/os-II的PDA系统
;*
;*                      (c) Copyright 2005, 东软培训中心
;*                             All Rights Reserved
;*
;* 模块名称:LCD驱动程序模块
;* 文件名:LCD_PUTC.S
;* 作者:朱成果
;* 时间:2005年9月20日
;* 版本:V0.01
;**********************************************************************************************************************
;*/

	AREA LCDPutc,CODE,READONLY
	
	EXPORT 		LCD_PUTC
	EXPORT		LCD_DDB
	IMPORT 		ASCIIFNT
	IMPORT 		pLCDBuffer16
	IMPORT		NEUTIG
	IMPORT		MAINPAGE
	IMPORT		SYSTIME
	IMPORT		SYSDATE
	IMPORT		B_RETURN
	IMPORT		VERSION
	IMPORT		SETRTCDDP
	IMPORT		SETRECDDP
	IMPORT		DISRECDDP
	IMPORT		DELETE
	IMPORT		NORECORD
	
DISPBUFF  equ  0x0c000000
DISPLAST  equ  0x11e38
DISPEND   equ  DISPBUFF + DISPLAST
	
	ENTRY		;调用前r0:要打印的字符;r1:所要显示的颜色;r2:显示缓存区指针;r3:背景颜色
	
LCD_PUTC
	   stmfd    r13!,{r4-r8,r14}
	   cmp      r0,#0x80
	   bhs	    %F10
	   cmp      r2,#DISPBUFF
	   blo      %F10
	   ldr		r4,=DISPEND
	   cmp	    r2,r4
	   bhi	    %F10
	   bic	    r2,r2,#7    ;字符地址8字节对齐
	   mov      r5,r0
	   mov      r4,r2
	   mov	    r6,r1
	   mov	    r1,#0x0		; r1是字模行坐标
	   add      r0,r5,r5,lsl #1
	   ldr      r2,=ASCIIFNT	; 字模指针
	   add      r0,r2,r0,lsl #2	; r0指向该字符的字模
0	   ldrb     r5,[r0,r1]
	   mov	    r7,r3
	   tst	    r5,#0x10		; 取字模行d4位
	   beq      %F1
	   mov	    r7,r6			;当象素值不为0时显示前景色
	   b		%F1
1	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x20		; 取字模行d5位
	   beq      %F2
	   mov	    r7,r6
2	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x40		; 取字模行d6位
	   beq      %F3
	   mov	    r7,r6
3	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x80		; 取字模行d7位
	   beq      %F4
	   mov	    r7,r6
4	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x1		; 取字模行d0位
	   beq      %F5
	   mov	    r7,r6
5	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x2		; 取字模行d1位
	   beq      %F6
	   mov	    r7,r6
6	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x4		; 取字模行d3位
	   beq      %F7
	   mov	    r7,r6
7	   strb     r7,[r4,#0]
	   mov	    r7,r3
	   add      r4,r4,#1
	   tst	    r5,#0x8		; 取字模行d4位
	   beq      %F8
	   mov	    r7,r6
8	   strb     r7,[r4,#0]
	   add      r4,r4,#0x140
	   bic		r4,r4,#0x7
	   add      r1,r1,#0x01
	   cmp	    r1,#0xc
	   blo	    %B0
	   mov      r0,#0x1
9	   ldmfd    r13!,{r4-r8,r14}	;返回
	   bx	    r14
10	   mov      r0,#0x0
	   b        %B9
	   LTORG
	   
LCD_DDB
	stmfd   r13!,{r1-r6,r14}
	adr		r1,DDBTAB			;像素数据首地址在r0中
	ldr		r0,[r1,r0,lsl #2]
	ldr		r4,[r0],#0x4		;每行像素数
	ldr		r5,[r0],#0x4		;行数
	ldr		r6,[r0],#0x4		;显示开始地址
10	mov		r2,r4
	mov		r1,r6
11	ldr		r3,[r0],#0x4
	str		r3,[r1],#0x4
	subs	r2,r2,#0x4
	bne		%B11
	add		r6,r6,#0x140
	subs	r5,r5,#0x1
	bne		%B10
	ldmfd   r13!,{r1-r6,r14}
	bx		r14
DDBTAB
	dcd		NEUTIG
	dcd		MAINPAGE
	dcd		SYSTIME
	dcd		SYSDATE
	dcd		B_RETURN
	dcd		VERSION
	dcd		DISRECDDP
	dcd		SETRTCDDP
	dcd		SETRECDDP
	dcd		DELETE
	dcd		NORECORD
	END

⌨️ 快捷键说明

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