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

📄 menu.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module menu.c
	.area text(rom, con, rel)
	.dbfile G:\IccPro\mega128_lcd\ZLG_GUI\menu.c
	.dbfunc e GUI_MMenuDraw _GUI_MMenuDraw fc
;              i -> R20
;             xx -> R22
;           mwin -> R10,R11
;            men -> R12,R13
	.even
_GUI_MMenuDraw::
	xcall push_gset4
	movw R12,R16
	sbiw R28,3
	.dbline -1
	.dbline 19
; /****************************************************************************************
; * 文件名:MENU.C
; * 功能:菜单显示及操作(下拉式菜单)。
; * 作者:黄绍斌
; * 日期:2004.02.26
; * 备注:使用GUI_SetBackColor()函数设置显示颜色及背景色。
; ****************************************************************************************/
; #include "config.h"
; 
; 
; #if  GUI_MenuDown_EN==1
; /****************************************************************************
; * 名称:GUI_MMenuDraw()
; * 功能:显示主菜单,加上边框。
; * 入口参数:men		主菜单句柄
; * 出口参数:返回0表示操作失败,返回1表示操作成功
; ****************************************************************************/
; uint8  GUI_MMenuDraw(MMENU *men)
; {  WINDOWS  *mwin;
	.dbline 24
;    uint8  i;
;    uint8  xx;
; 
;    /* 参数过滤 */
;    if( (men->no)==0 ) return(0);
	movw R30,R12
	ldd R2,z+2
	tst R2
	brne L8
	.dbline 24
	clr R16
	xjmp L7
L8:
	.dbline 26
;    
;    mwin = men->win;						// 取得窗口句柄
	movw R30,R12
	ldd R10,z+0
	ldd R11,z+1
	.dbline 28
;    /* 判断是否可以显示主菜单 */
;    if( (mwin->hight)<50 ) return(0);
	movw R30,R10
	ldd R24,z+6
	ldd R25,z+7
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L10
	.dbline 28
	clr R16
	xjmp L7
L10:
	.dbline 29
;    if( (mwin->with)<50 ) return(0);
	movw R30,R10
	ldd R24,z+4
	ldd R25,z+5
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L12
	.dbline 29
	clr R16
	xjmp L7
L12:
	.dbline 32
;    
;    /* 画菜单条,并显示菜主单 */
;    GUI_HLine(mwin->x, mwin->y + 22, mwin->x + mwin->with - 1, disp_color);
	lds R2,_disp_color
	std y+2,R2
	movw R30,R10
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+4
	ldd R5,z+5
	movw R24,R2
	add R24,R4
	adc R25,R5
	sbiw R24,1
	std y+1,R25
	std y+0,R24
	movw R30,R10
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	movw R16,R2
	xcall _GUI_HLine
	.dbline 34
;    
;    xx = mwin->x;
	movw R30,R10
	ldd R22,z+0
	.dbline 35
;    for(i=0; i<(men->no); i++)
	clr R20
	xjmp L17
L14:
	.dbline 36
;    {  if( (xx+MMENU_WIDTH) > (mwin->x + mwin->with) ) return(0);
	.dbline 36
	movw R30,R10
	ldd R2,z+4
	ldd R3,z+5
	movw R30,R10
	ldd R4,z+0
	ldd R5,z+1
	add R4,R2
	adc R5,R3
	mov R24,R22
	clr R25
	adiw R24,34
	cp R4,R24
	cpc R5,R25
	brsh L18
	.dbline 36
	clr R16
	xjmp L7
L18:
	.dbline 38
	ldi R24,4
	std y+2,R24
	ldi R24,2
	mul R24,R20
	movw R30,R0
	movw R24,R12
	adiw R24,3
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	movw R30,R10
	ldd R18,z+2
	ldd R19,z+3
	subi R18,242  ; offset = 14
	sbci R19,255
	mov R16,R22
	clr R17
	subi R16,254  ; offset = 2
	sbci R17,255
	xcall _GUI_PutNoStr
	.dbline 39
	subi R22,222    ; addi 34
	.dbline 40
	lds R2,_disp_color
	std y+2,R2
	movw R30,R10
	ldd R2,z+2
	ldd R3,z+3
	movw R24,R2
	adiw R24,22
	std y+1,R25
	std y+0,R24
	movw R18,R2
	subi R18,244  ; offset = 12
	sbci R19,255
	mov R16,R22
	clr R17
	xcall _GUI_RLine
	.dbline 41
L15:
	.dbline 35
	inc R20
L17:
	.dbline 35
	movw R30,R12
	ldd R2,z+2
	cp R20,R2
	brsh X0
	xjmp L14
X0:
	.dbline 43
;       
;       GUI_PutNoStr(xx+2, mwin->y + 14, men->str[i], 4);			// 书写主菜单文字
;       xx += MMENU_WIDTH;
;       GUI_RLine(xx, mwin->y + 12, mwin->y + 22, disp_color);	// 显示主菜单分界线      
;    }
;    
;    return(1);
	ldi R16,1
	.dbline -2
L7:
	adiw R28,3
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r xx 22 c
	.dbsym r mwin 10 pX
	.dbsym r men 12 pX
	.dbend
	.dbfunc e GUI_MMenuSelect _GUI_MMenuSelect fV
;             xx -> R20
;           mwin -> R22,R23
;             no -> R20
;            men -> R22,R23
	.even
_GUI_MMenuSelect::
	xcall push_gset2
	mov R20,R18
	movw R22,R16
	sbiw R28,3
	.dbline -1
	.dbline 55
; }
; 
; 
; /****************************************************************************
; * 名称:GUI_MMenuSelect()
; * 功能:当前主菜单,加下划线,表示当前主菜单。
; * 入口参数:men		主菜单句柄
; *          no		所选的主菜单项
; * 出口参数:无
; ****************************************************************************/
; void  GUI_MMenuSelect(MMENU *men, uint8 no)
; {  WINDOWS  *mwin;
	.dbline 59
;    uint8  xx;
; 
;    /* 参数过滤 */
;    if( (men->no)==0 ) return;
	movw R30,R22
	ldd R2,z+2
	tst R2
	brne L21
	.dbline 59
	xjmp L20
L21:
	.dbline 60
;    if( no>(men->no) ) return;
	movw R30,R22
	ldd R2,z+2
	cp R2,R20
	brsh L23
	.dbline 60
	xjmp L20
L23:
	.dbline 62
;   
;    mwin = men->win;						// 取得窗口句柄
	movw R30,R22
	ldd R22,z+0
	ldd R23,z+1
	.dbline 64
;    /* 判断是否可以显示主菜单 */
;    if( (mwin->hight)<50 ) return;
	movw R30,R22
	ldd R24,z+6
	ldd R25,z+7
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L25
	.dbline 64
	xjmp L20
L25:
	.dbline 65
;    if( (mwin->with)<50 ) return;
	movw R30,R22
	ldd R24,z+4
	ldd R25,z+5
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L27
	.dbline 65
	xjmp L20
L27:
	.dbline 68
;    
;    /* 显示下划线 */
;    xx = mwin->x + no*MMENU_WIDTH;
	ldi R24,34
	mul R24,R20
	movw R30,R22
	ldd R20,z+0
	add R20,R0
	adc R21,R1
	.dbline 69
;    GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, disp_color);
	lds R2,_disp_color
	std y+2,R2
	mov R24,R20
	clr R25
	adiw R24,34
	sbiw R24,1
	std y+1,R25
	std y+0,R24
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	subi R18,1
	sbci R19,0
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_HLine
	.dbline -2
L20:
	adiw R28,3
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r xx 20 c
	.dbsym r mwin 22 pX
	.dbsym r no 20 c
	.dbsym r men 22 pX
	.dbend
	.dbfunc e GUI_MMenuNSelect _GUI_MMenuNSelect fV
;             xx -> R20
;           mwin -> R22,R23
;             no -> R20
;            men -> R22,R23
	.even
_GUI_MMenuNSelect::
	xcall push_gset2
	mov R20,R18
	movw R22,R16
	sbiw R28,3
	.dbline -1
	.dbline 81
; }
; 
; 
; /****************************************************************************
; * 名称:GUI_MMenuNSelect()
; * 功能:取消当前主菜单,去除下划线。
; * 入口参数:men		主菜单句柄
; *          no		所选的主菜单项
; * 出口参数:无
; ****************************************************************************/
; void  GUI_MMenuNSelect(MMENU *men, uint8 no)
; {  WINDOWS  *mwin;
	.dbline 85
;    uint8  xx;
; 
;    /* 参数过滤 */
;    if( (men->no)==0 ) return;
	movw R30,R22
	ldd R2,z+2
	tst R2
	brne L30
	.dbline 85
	xjmp L29
L30:
	.dbline 86
;    if( no>(men->no) ) return;
	movw R30,R22
	ldd R2,z+2
	cp R2,R20
	brsh L32
	.dbline 86
	xjmp L29
L32:
	.dbline 88
;   
;    mwin = men->win;						// 取得窗口句柄
	movw R30,R22
	ldd R22,z+0
	ldd R23,z+1
	.dbline 90
;    /* 判断是否可以显示主菜单 */
;    if( (mwin->hight)<50 ) return;
	movw R30,R22
	ldd R24,z+6
	ldd R25,z+7
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L34
	.dbline 90
	xjmp L29
L34:
	.dbline 91
;    if( (mwin->with)<50 ) return;
	movw R30,R22
	ldd R24,z+4
	ldd R25,z+5
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L36
	.dbline 91
	xjmp L29
L36:
	.dbline 94
;    
;    /* 显示下划线 */
;    xx = mwin->x + no*MMENU_WIDTH;
	ldi R24,34
	mul R24,R20
	movw R30,R22
	ldd R20,z+0
	add R20,R0
	adc R21,R1
	.dbline 95
;    GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, back_color);
	lds R2,_back_color
	std y+2,R2
	mov R24,R20
	clr R25
	adiw R24,34
	sbiw R24,1
	std y+1,R25
	std y+0,R24
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	subi R18,1
	sbci R19,0
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_HLine
	.dbline -2
L29:
	adiw R28,3
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r xx 20 c
	.dbsym r mwin 22 pX
	.dbsym r no 20 c
	.dbsym r men 22 pX
	.dbend
	.dbfunc e GUI_SMenuDraw _GUI_SMenuDraw fc
;           mwin -> R22,R23
;             xx -> R20,R21
;              i -> R22
;             yy -> R10,R11
;            men -> R12,R13
	.even
_GUI_SMenuDraw::
	xcall push_gset4
	movw R12,R16
	sbiw R28,5
	.dbline -1
	.dbline 107
; }
; 
; 
; 
; /****************************************************************************
; * 名称:GUI_SMenuDraw()
; * 功能:显示子菜单,加上边框。
; * 入口参数:men		子菜单句柄
; * 出口参数:返回0表示操作失败,返回1表示操作成功
; ****************************************************************************/
; uint8  GUI_SMenuDraw(SMENU *men)
; {  WINDOWS  *mwin;
	.dbline 111
;    uint32   xx, yy;
;    uint8    i;
; 
;    mwin = men->win;
	movw R30,R12
	ldd R22,z+0
	ldd R23,z+1
	.dbline 113
;    /* 判断是否可以显示主菜单 */
;    if( (mwin->hight)<50 ) return(0);
	movw R30,R22
	ldd R24,z+6
	ldd R25,z+7
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L39
	.dbline 113
	clr R16
	xjmp L38
L39:
	.dbline 114
;    if( (mwin->with)<50 ) return(0);
	movw R30,R22
	ldd R24,z+4
	ldd R25,z+5
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L41
	.dbline 114
	clr R16
	xjmp L38
L41:
	.dbline 117
;     
;    /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
;    xx = mwin->x;
	movw R30,R22
	ldd R20,z+0
	ldd R21,z+1
	.dbline 118
;    xx += (men->mmenu_no)*MMENU_WIDTH;
	movw R30,R12
	ldd R2,z+2
	ldi R24,34
	mul R24,R2
	add R20,R0
	adc R21,R1
	.dbline 119
;    yy = mwin->y + 22;
	movw R30,R22
	ldd R24,z+2
	ldd R25,z+3
	adiw R24,22
	movw R10,R24
	.dbline 120
;    yy +=  (men->no) * 11 + 2;
	movw R30,R12
	ldd R2,z+3
	ldi R24,11
	mul R24,R2
	movw R24,R0
	adiw R24,2
	add R10,R24
	adc R11,R25
	.dbline 121
;    if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) ) 
	movw R30,R22
	ldd R2,z+4
	ldd R3,z+5
	movw R30,R22
	ldd R24,z+0
	ldd R25,z+1
	add R24,R2
	adc R25,R3
	sbiw R24,1
	movw R30,R20
	subi R30,190  ; offset = 66
	sbci R31,255
	cp R24,R30
	cpc R25,R31
	brsh X1
	xjmp L43
X1:
	.dbline 122
;    {  /* 以左下拉为原则显示子菜单 */
	.dbline 123
;       if( (men->mmenu_no) == 0 )
	movw R30,R12
	ldd R2,z+2
	tst R2
	brne L45
	.dbline 124
;       {  GUI_RLine(xx+SMENU_WIDTH, mwin->y + 22, yy, disp_color);
	.dbline 124
	lds R2,_disp_color
	std y+2,R2
	std y+1,R11
	std y+0,R10
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	movw R16,R20
	subi R16,190  ; offset = 66
	sbci R17,255
	xcall _GUI_RLine
	.dbline 125
;          GUI_HLine(xx, yy, xx+SMENU_WIDTH, disp_color);
	lds R2,_disp_color
	std y+2,R2
	movw R24,R20
	subi R24,190  ; offset = 66
	sbci R25,255
	std y+1,R25
	std y+0,R24
	movw R18,R10
	movw R16,R20
	xcall _GUI_HLine
	.dbline 126
;       }
	xjmp L46
L45:
	.dbline 128
;       else
;       {  GUI_Rectangle(xx, mwin->y + 22, xx+SMENU_WIDTH, yy, disp_color);
	.dbline 128
	lds R2,_disp_color
	std y+4,R2
	std y+3,R11
	std y+2,R10
	movw R24,R20
	subi R24,190  ; offset = 66
	sbci R25,255
	std y+1,R25
	std y+0,R24
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	movw R16,R20
	xcall _GUI_Rectangle
	.dbline 129
;       }
L46:
	.dbline 130
;       GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
	lds R2,_back_color
	std y+2,R2
	movw R24,R20
	adiw R24,34
	sbiw R24,1
	std y+1,R25
	std y+0,R24
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	movw R16,R20
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_HLine
	.dbline 132
;       
;    }
	xjmp L44
L43:
	.dbline 134
;    else
;    {  /* 以右下拉为原则 */
	.dbline 135
;       if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
	movw R30,R22
	ldd R2,z+4
	ldd R3,z+5
	movw R30,R22
	ldd R24,z+0
	ldd R25,z+1
	add R24,R2
	adc R25,R3
	sbiw R24,1
	movw R30,R20
	adiw R30,34
	cp R30,R24
	cpc R31,R25
	brne L47
	.dbline 136
;       {  GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, yy, disp_color);
	.dbline 136
	lds R2,_disp_color
	std y+2,R2
	std y+1,R11
	std y+0,R10
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	movw R16,R20
	subi R16,32
	sbci R17,0
	xcall _GUI_RLine
	.dbline 137
;          GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, disp_color);
	lds R2,_disp_color
	std y+2,R2
	movw R24,R20
	adiw R24,34
	std y+1,R25
	std y+0,R24
	movw R18,R10
	movw R16,R20
	subi R16,32
	sbci R17,0
	xcall _GUI_HLine
	.dbline 139
;          
;       }
	xjmp L48
L47:
	.dbline 141
;       else
;       {  GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, xx+MMENU_WIDTH, yy, disp_color);
	.dbline 141
	lds R2,_disp_color
	std y+4,R2
	std y+3,R11
	std y+2,R10
	movw R24,R20
	adiw R24,34
	std y+1,R25
	std y+0,R24
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	movw R16,R20
	subi R16,32
	sbci R17,0
	xcall _GUI_Rectangle
	.dbline 142
;       }
L48:

⌨️ 快捷键说明

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