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

📄 loadbit.s

📁 ssd1325控制器液晶的驱动程序
💻 S
字号:
	.module loadbit.c
	.area text(rom, con, rel)
	.dbfile G:\IccPro\mega128_lcd\ZLG_GUI\loadbit.c
	.dbfunc e GUI_LoadLine _GUI_LoadLine fc
;        bit_dat -> R20
;           bakc -> y+1
;              i -> R22
;             no -> R10,R11
;            dat -> R12,R13
;              y -> R14,R15
;              x -> R4,R5
	.even
_GUI_LoadLine::
	xcall push_gset5
	movw R14,R18
	movw R4,R16
	sbiw R28,2
	ldd R12,y+12
	ldd R13,y+13
	ldd R10,y+14
	ldd R11,y+15
	.dbline -1
	.dbline 22
; /****************************************************************************************
; * 文件名:LOADBIT.C
; * 功能:显示单色图形及汉字显示。先将图形转换为对应的点阵数组,然后即可调用此文件的函数输出驱动。
; * 作者:黄绍斌
; * 日期:2004.02.26
; * 备注:使用GUI_SetBackColor()函数设置显示颜色及背景色。
; ****************************************************************************************/
; #include  "config.h"
; 
; #if  (GUI_LoadPic_EN==1)|(GUI_MenuIco_EN==1)|(GUI_PutHZ_EN==1)
; /****************************************************************************
; * 名称:GUI_LoadLine()
; * 功能:输出单色图形的一行数据。
; * 入口参数: x		指定显示位置,x坐标
; *           y		指定显示位置,y坐标
; *           dat		要输出显示的数据。
; *           no      要显示此行的点个数
; * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; uint8  GUI_LoadLine(uint32 x, uint32 y, uint8 *dat, uint32 no)
; {  uint8   bit_dat;
	.dbline 27
;    uint8   i;
;    TCOLOR  bakc;
; 
;    /* 参数过滤 */
;    if(x>=GUI_LCM_XMAX) return(0);
	movw R24,R4
	cpi R24,240
	ldi R30,0
	cpc R25,R30
	brlo L8
	.dbline 27
	clr R16
	xjmp L7
L8:
	.dbline 28
;    if(y>=GUI_LCM_YMAX) return(0);
	movw R24,R14
	cpi R24,128
	ldi R30,0
	cpc R25,R30
	brlo L10
	.dbline 28
	clr R16
	xjmp L7
L10:
	.dbline 30
;    
;    for(i=0; i<no; i++)
	clr R22
	xjmp L15
L12:
	.dbline 31
;    {  /* 判断是否要读取点阵数据 */
	.dbline 32
;       if( (i%8)==0 ) bit_dat = *dat++;
	ldi R17,8
	mov R16,R22
	xcall mod8u
	tst R16
	brne L16
	.dbline 32
	movw R30,R12
	ld R20,Z+
	movw R12,R30
L16:
	.dbline 35
;      
;       /* 设置相应的点为color或为back_color */
;       if( (bit_dat&DCB2HEX_TAB[i&0x07])==0 ) GUI_CopyColor(&bakc, back_color); 
	ldi R24,<_DCB2HEX_TAB
	ldi R25,>_DCB2HEX_TAB
	mov R30,R22
	clr R31
	andi R30,7
	andi R31,0
	add R30,R24
	adc R31,R25
	lpm R30,Z
	mov R2,R20
	and R2,R30
	brne L18
	.dbline 35
	lds R2,_back_color
	std y+1,R2
	xjmp L19
L18:
	.dbline 36
;          else  GUI_CopyColor(&bakc, disp_color);
	lds R2,_disp_color
	std y+1,R2
L19:
	.dbline 37
;       GUI_Point(x, y, bakc);       
	ldd R2,y+1
	std y+0,R2
	movw R18,R14
	movw R16,R4
	push R16
	push R17
	xcall _GUI_Point
	pop R5
	pop R4
	.dbline 39
;      
;       if( (++x)>=GUI_LCM_XMAX ) return(0);
	movw R24,R4
	adiw R24,1
	movw R4,R24
	cpi R24,240
	ldi R30,0
	cpc R25,R30
	brlo L20
	.dbline 39
	clr R16
	xjmp L7
L20:
	.dbline 40
L13:
	.dbline 30
	inc R22
L15:
	.dbline 30
	mov R2,R22
	clr R3
	cp R2,R10
	cpc R3,R11
	brsh X0
	xjmp L12
X0:
	.dbline 42
;    }
;    
;    return(1);
	ldi R16,1
	.dbline -2
L7:
	adiw R28,2
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r bit_dat 20 c
	.dbsym l bakc 1 c
	.dbsym r i 22 c
	.dbsym r no 10 i
	.dbsym r dat 12 pc
	.dbsym r y 14 i
	.dbsym r x 4 i
	.dbend
	.dbfunc e GUI_LoadPic _GUI_LoadPic fV
;              i -> R20,R21
;            lno -> R22,R23
;            hno -> R10,R11
;            dat -> R12,R13
;              y -> R14,R15
;              x -> y+14
	.even
_GUI_LoadPic::
	xcall push_arg4
	xcall push_gset5
	movw R14,R18
	sbiw R28,4
	ldd R12,y+18
	ldd R13,y+19
	ldd R10,y+20
	ldd R11,y+21
	ldd R22,y+22
	ldd R23,y+23
	.dbline -1
	.dbline 60
; }
; #endif
; 
; 
; #if  (GUI_LoadPic_EN==1)|(GUI_MenuIco_EN==1)
; /****************************************************************************
; * 名称:GUI_LoadPic()
; * 功能:输出单色图形数据。
; * 入口参数: x		指定显示位置,x坐标
; *           y		指定显示位置,y坐标
; *           dat		要输出显示的数据
; *           hno     要显示此行的点个数
; *           lno     要显示此列的点个数
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void  GUI_LoadPic(uint32 x, uint32 y, uint8 *dat, uint32 hno, uint32 lno)
; {  uint32  i;
	.dbline 62
; 
;    for(i=0; i<lno; i++)
	clr R20
	clr R21
	xjmp L26
L23:
	.dbline 63
;    {  GUI_LoadLine(x, y, dat, hno);				// 输出一行数据
	.dbline 63
	std y+3,R11
	std y+2,R10
	std y+1,R13
	std y+0,R12
	movw R18,R14
	ldd R16,y+14
	ldd R17,y+15
	xcall _GUI_LoadLine
	.dbline 64
;       y++;										// 显示下一行
	movw R24,R14
	adiw R24,1
	movw R14,R24
	.dbline 65
;       dat += (hno>>3);							// 计算下一行的数据
	movw R2,R10
	lsr R3
	ror R2
	lsr R3
	ror R2
	lsr R3
	ror R2
	add R12,R2
	adc R13,R3
	.dbline 66
;       if( (hno&0x07)!=0 ) dat++;
	movw R24,R10
	andi R24,7
	andi R25,0
	cpi R24,0
	cpc R24,R25
	breq L27
X1:
	.dbline 66
	movw R24,R12
	adiw R24,1
	movw R12,R24
L27:
	.dbline 67
L24:
	.dbline 62
	subi R20,255  ; offset = 1
	sbci R21,255
L26:
	.dbline 62
	cp R20,R22
	cpc R21,R23
	brlo L23
	.dbline -2
L22:
	adiw R28,4
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r lno 22 i
	.dbsym r hno 10 i
	.dbsym r dat 12 pc
	.dbsym r y 14 i
	.dbsym l x 14 i
	.dbend
	.dbfunc e GUI_LoadPic1 _GUI_LoadPic1 fV
;              i -> R20,R21
;            lno -> R22,R23
;            hno -> R10,R11
;            dat -> R12,R13
;              y -> R14,R15
;              x -> y+14
	.even
_GUI_LoadPic1::
	xcall push_arg4
	xcall push_gset5
	movw R14,R18
	sbiw R28,4
	ldd R12,y+18
	ldd R13,y+19
	ldd R10,y+20
	ldd R11,y+21
	ldd R22,y+22
	ldd R23,y+23
	.dbline -1
	.dbline 85
;    }
; }
; 
; 
; 
; 
; /****************************************************************************
; * 名称:GUI_LoadPic1()
; * 功能:输出单色图形数据,反相显示。
; * 入口参数: x		指定显示位置,x坐标
; *           y		指定显示位置,y坐标
; *           dat		要输出显示的数据。
; *           hno     要显示此行的点个数
; *           lno     要显示此列的点个数
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void  GUI_LoadPic1(uint32 x, uint32 y, uint8 *dat, uint32 hno, uint32 lno)
; {  uint32  i;
	.dbline 87
;    
;    GUI_ExchangeColor();									// 显示色与背景色交换
	xcall _GUI_ExchangeColor
	.dbline 88
;    for(i=0; i<lno; i++)
	clr R20
	clr R21
	xjmp L33
L30:
	.dbline 89
;    {  GUI_LoadLine(x, y, dat, hno);						// 输出一行数据
	.dbline 89
	std y+3,R11
	std y+2,R10
	std y+1,R13
	std y+0,R12
	movw R18,R14
	ldd R16,y+14
	ldd R17,y+15
	xcall _GUI_LoadLine
	.dbline 90
;       y++;												// 显示下一行
	movw R24,R14
	adiw R24,1
	movw R14,R24
	.dbline 91
;       dat += (hno>>3);									// 计算下一行的数据
	movw R2,R10
	lsr R3
	ror R2
	lsr R3
	ror R2
	lsr R3
	ror R2
	add R12,R2
	adc R13,R3
	.dbline 92
;       if( (hno&0x07)!=0 ) dat++;
	movw R24,R10
	andi R24,7
	andi R25,0
	cpi R24,0
	cpc R24,R25
	breq L34
X2:
	.dbline 92
	movw R24,R12
	adiw R24,1
	movw R12,R24
L34:
	.dbline 93
L31:
	.dbline 88
	subi R20,255  ; offset = 1
	sbci R21,255
L33:
	.dbline 88
	cp R20,R22
	cpc R21,R23
	brlo L30
	.dbline 94
;    }
;    GUI_ExchangeColor();
	xcall _GUI_ExchangeColor
	.dbline -2
L29:
	adiw R28,4
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r lno 22 i
	.dbsym r hno 10 i
	.dbsym r dat 12 pc
	.dbsym r y 14 i
	.dbsym l x 14 i
	.dbend
	.dbfunc e GUI_PutHZ _GUI_PutHZ fV
;              i -> R20
;            lno -> R22
;            hno -> R10
;            dat -> R12,R13
;              y -> R14,R15
;              x -> y+14
	.even
_GUI_PutHZ::
	xcall push_arg4
	xcall push_gset5
	movw R14,R18
	sbiw R28,4
	ldd R12,y+18
	ldd R13,y+19
	ldd R10,y+20
	ldd R22,y+22
	.dbline -1
	.dbline 113
;    
; }
; #endif
; 
; 
; #if  GUI_PutHZ_EN==1
; /****************************************************************************
; * 名称:GUI_PutHZ()
; * 功能:显示汉字。
; * 入口参数: x		指定显示位置,x坐标
; *           y		指定显示位置,y坐标
; *           dat		要输出显示的汉字点阵数据。
; *           hno     要显示此行的点个数
; *           lno     要显示此列的点个数
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void  GUI_PutHZ(uint32 x, uint32 y, uint8 *dat, uint8 hno, uint8 lno)
; {  uint8  i;
	.dbline 115
; 
;    for(i=0; i<lno; i++)
	clr R20
	xjmp L40
L37:
	.dbline 116
;    {  GUI_LoadLine(x, y, dat, hno);						// 输出一行数据
	.dbline 116
	mov R2,R10
	clr R3
	std y+3,R3
	std y+2,R2
	std y+1,R13
	std y+0,R12
	movw R18,R14
	ldd R16,y+14
	ldd R17,y+15
	xcall _GUI_LoadLine
	.dbline 117
;       y++;												// 显示下一行
	movw R24,R14
	adiw R24,1
	movw R14,R24
	.dbline 118
;       dat += (hno>>3);									// 计算下一行的数据
	mov R2,R10
	clr R3
	asr R3
	ror R2
	asr R3
	ror R2
	asr R3
	ror R2
	add R12,R2
	adc R13,R3
	.dbline 119
;       if( (hno&0x07)!=0 ) dat++;
	mov R24,R10
	andi R24,7
	breq L41
	.dbline 119
	movw R24,R12
	adiw R24,1
	movw R12,R24
L41:
	.dbline 120
L38:
	.dbline 115
	inc R20
L40:
	.dbline 115
	cp R20,R22
	brlo L37
	.dbline -2
L36:
	adiw R28,4
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r lno 22 c
	.dbsym r hno 10 c
	.dbsym r dat 12 pc
	.dbsym r y 14 i
	.dbsym l x 14 i
	.dbend

⌨️ 快捷键说明

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