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

📄 menu.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 143
;       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 145
;       
;       xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
	subi R20,32
	sbci R21,0
	.dbline 146
;    }
L44:
	.dbline 149
;    
;    /* 显示菜单文字 */
;    xx++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 150
;    yy = mwin->y + 22 + 2;
	movw R30,R22
	ldd R24,z+2
	ldd R25,z+3
	adiw R24,24
	movw R10,R24
	.dbline 151
;    for(i=0; i<(men->no); i++)
	clr R22
	xjmp L52
L49:
	.dbline 152
;    {  if( i == (men->state) )								// 判断所选择的菜单项
	.dbline 152
	movw R30,R12
	ldd R2,z+20
	cp R22,R2
	brne L53
	.dbline 153
;       {  /* 显示背景色 */
	.dbline 154
;          GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
	lds R2,_disp_color
	std y+4,R2
	movw R24,R10
	adiw R24,10
	std y+3,R25
	std y+2,R24
	movw R24,R20
	subi R24,190  ; offset = 66
	sbci R25,255
	sbiw R24,2
	std y+1,R25
	std y+0,R24
	movw R18,R10
	movw R16,R20
	xcall _GUI_RectangleFill
	.dbline 156
;          /* 显示菜单字符 */
;          GUI_ExchangeColor();
	xcall _GUI_ExchangeColor
	.dbline 157
;          GUI_PutNoStr(xx+1, yy+1, men->str[i], 8);			// 书写子菜单文字
	ldi R24,8
	std y+2,R24
	ldi R24,2
	mul R24,R22
	movw R30,R0
	movw R24,R12
	adiw R24,4
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	movw R18,R10
	subi R18,255  ; offset = 1
	sbci R19,255
	movw R16,R20
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_PutNoStr
	.dbline 158
;          GUI_ExchangeColor();
	xcall _GUI_ExchangeColor
	.dbline 159
;       }
	xjmp L54
L53:
	.dbline 161
;       else
;       {  /* 显示背景色 */
	.dbline 162
;          GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
	lds R2,_back_color
	std y+4,R2
	movw R24,R10
	adiw R24,10
	std y+3,R25
	std y+2,R24
	movw R24,R20
	subi R24,190  ; offset = 66
	sbci R25,255
	sbiw R24,2
	std y+1,R25
	std y+0,R24
	movw R18,R10
	movw R16,R20
	xcall _GUI_RectangleFill
	.dbline 164
;          /* 显示菜单字符 */
;          GUI_PutNoStr(xx+1, yy+1, men->str[i], 8);			// 书写子菜单文字
	ldi R24,8
	std y+2,R24
	ldi R24,2
	mul R24,R22
	movw R30,R0
	movw R24,R12
	adiw R24,4
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	movw R18,R10
	subi R18,255  ; offset = 1
	sbci R19,255
	movw R16,R20
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_PutNoStr
	.dbline 165
;       }   
L54:
	.dbline 167
	movw R24,R10
	adiw R24,11
	movw R10,R24
	.dbline 168
L50:
	.dbline 151
	inc R22
L52:
	.dbline 151
	movw R30,R12
	ldd R2,z+3
	cp R22,R2
	brsh X2
	xjmp L49
X2:
	.dbline 170
;       
;       yy += 11;
;    }
;     
;    return(1);
	ldi R16,1
	.dbline -2
L38:
	adiw R28,5
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r mwin 22 pX
	.dbsym r xx 20 i
	.dbsym r i 22 c
	.dbsym r yy 10 i
	.dbsym r men 12 pX
	.dbend
	.dbfunc e GUI_SMenuSelect _GUI_SMenuSelect fV
;           mwin -> R14,R15
;             yy -> R22
;             xx -> R20
;         new_no -> R12
;         old_no -> y+15
;            men -> R10,R11
	.even
_GUI_SMenuSelect::
	st -y,r19
	st -y,r18
	xcall push_gset5
	movw R10,R16
	sbiw R28,5
	ldd R12,y+17
	.dbline -1
	.dbline 184
; }
; 
; 
; 
; /****************************************************************************
; * 名称:GUI_SMenuSelect()
; * 功能:选择新的子菜单。
; * 入口参数:men		子菜单句柄
; *          old_no	原先选择的子菜单项
; *		   new_no	现要选择的子菜单项
; * 出口参数:无
; ****************************************************************************/
; void  GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
; {  WINDOWS  *mwin;
	.dbline 188
;    uint8  xx, yy;
; 
;    /* 参数过滤 */ 
;    if(old_no==new_no) return;
	ldd R0,y+15
	cp R0,R12
	brne L56
	.dbline 188
	xjmp L55
L56:
	.dbline 189
;    xx = men->no;
	movw R30,R10
	ldd R20,z+3
	.dbline 190
	ldd R0,y+15
	cp R20,R0
	brlo L60
	cp R20,R12
	brsh L58
L60:
	.dbline 190
;    if( (old_no>xx) || (new_no>xx) ) return;
	xjmp L55
L58:
	.dbline 193
;    
;    /* 设置新的选择的子菜单项 */
;    men->state = new_no;
	movw R30,R10
	std z+20,R12
	.dbline 196
;    
;    /* 进行菜单反相显示 */
;    mwin = men->win;	 
	movw R30,R10
	ldd R14,z+0
	ldd R15,z+1
	.dbline 197
;    xx = mwin->x;
	movw R30,R14
	ldd R20,z+0
	.dbline 198
;    xx +=  (men->mmenu_no)*MMENU_WIDTH;
	movw R30,R10
	ldd R2,z+2
	ldi R24,34
	mul R24,R2
	add R20,R0
	.dbline 199
;    if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) ) 
	movw R30,R14
	ldd R2,z+4
	ldd R3,z+5
	movw R30,R14
	ldd R24,z+0
	ldd R25,z+1
	add R24,R2
	adc R25,R3
	sbiw R24,1
	mov R30,R20
	clr R31
	subi R30,190  ; offset = 66
	sbci R31,255
	cp R24,R30
	cpc R25,R31
	brsh L61
	.dbline 200
;    {  /* 以右下拉为原则显示子菜单,所以xx设置在左端 */
	.dbline 201
;       xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
	subi R20,32
	.dbline 202
;    }
L61:
	.dbline 203
;    xx++;
	inc R20
	.dbline 206
;  
;    /* 取消原子菜单选择 */  
;    yy = mwin->y + 22 + 2;
	movw R30,R14
	ldd R22,z+2
	subi R22,232  ; offset = 24
	sbci R23,255
	.dbline 207
;    yy += old_no*11;
	ldi R24,11
	ldd R0,y+15
	mul R24,R0
	add R22,R0
	.dbline 208
;    GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
	lds R2,_back_color
	std y+4,R2
	mov R24,R22
	clr R25
	adiw R24,10
	std y+3,R25
	std y+2,R24
	mov R24,R20
	clr R25
	subi R24,190  ; offset = 66
	sbci R25,255
	sbiw R24,2
	std y+1,R25
	std y+0,R24
	mov R18,R22
	clr R19
	mov R16,R20
	clr R17
	xcall _GUI_RectangleFill
	.dbline 209
;    GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
	ldi R24,8
	std y+2,R24
	ldi R24,2
	ldd R0,y+15
	mul R24,R0
	movw R30,R0
	movw R24,R10
	adiw R24,4
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	mov R18,R22
	clr R19
	subi R18,255  ; offset = 1
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_PutNoStr
	.dbline 211
;    /* 选择新的子菜单 */
;    yy = mwin->y + 22 + 2;
	movw R30,R14
	ldd R22,z+2
	subi R22,232  ; offset = 24
	sbci R23,255
	.dbline 212
;    yy += new_no*11;
	ldi R24,11
	mul R24,R12
	add R22,R0
	.dbline 213
;    GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
	lds R2,_disp_color
	std y+4,R2
	mov R24,R22
	clr R25
	adiw R24,10
	std y+3,R25
	std y+2,R24
	mov R24,R20
	clr R25
	subi R24,190  ; offset = 66
	sbci R25,255
	sbiw R24,2
	std y+1,R25
	std y+0,R24
	mov R18,R22
	clr R19
	mov R16,R20
	clr R17
	xcall _GUI_RectangleFill
	.dbline 214
;    GUI_ExchangeColor();
	xcall _GUI_ExchangeColor
	.dbline 215
;    GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
	ldi R24,8
	std y+2,R24
	ldi R24,2
	mul R24,R12
	movw R30,R0
	movw R24,R10
	adiw R24,4
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	mov R18,R22
	clr R19
	subi R18,255  ; offset = 1
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_PutNoStr
	.dbline 216
;    GUI_ExchangeColor();
	xcall _GUI_ExchangeColor
	.dbline -2
L55:
	adiw R28,5
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r mwin 14 pX
	.dbsym r yy 22 c
	.dbsym r xx 20 c
	.dbsym r new_no 12 c
	.dbsym l old_no 15 c
	.dbsym r men 10 pX
	.dbend
	.dbfunc e GUI_SMenuHide _GUI_SMenuHide fc
;             yy -> R10
;             xx -> R20
;           mwin -> R22,R23
;            men -> R12,R13
	.even
_GUI_SMenuHide::
	xcall push_gset4
	movw R12,R16
	sbiw R28,5
	.dbline -1
	.dbline 228
; }
; 
; 
; 
; /****************************************************************************
; * 名称:GUI_SMenuHide()
; * 功能:消隐子菜单项。
; * 入口参数:men		子菜单句柄
; * 出口参数:返回0表示操作失败,返回1表示操作成功
; ****************************************************************************/
; uint8  GUI_SMenuHide(SMENU *men)
; {  WINDOWS  *mwin;
	.dbline 231
;    uint8    xx, yy;
; 
;    mwin = men->win;
	movw R30,R12
	ldd R22,z+0
	ldd R23,z+1
	.dbline 233
;    /* 判断是否可以显示主菜单 */
;    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 L64
	.dbline 233
	clr R16
	xjmp L63
L64:
	.dbline 234
;    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 L66
	.dbline 234
	clr R16
	xjmp L63
L66:
	.dbline 237
;     
;    /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
;    xx = mwin->x;
	movw R30,R22
	ldd R20,z+0
	.dbline 238
;    xx +=  (men->mmenu_no)*MMENU_WIDTH;
	movw R30,R12
	ldd R2,z+2
	ldi R24,34
	mul R24,R2
	add R20,R0
	.dbline 239
;    yy = mwin->y + 22;
	movw R30,R22
	ldd R24,z+2
	ldd R25,z+3
	adiw R24,22
	mov R10,R24
	.dbline 240
;    yy +=  (men->no) * 11 + 2;
	movw R30,R12
	ldd R2,z+3
	ldi R24,11
	mul R24,R2
	mov R24,R0
	subi R24,254    ; addi 2
	add R10,R24
	.dbline 241
;    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
	mov R30,R20
	clr R31
	subi R30,190  ; offset = 66
	sbci R31,255
	cp R24,R30
	cpc R25,R31
	brsh X3
	xjmp L68
X3:
	.dbline 242
;    {  /* 以左下拉为原则显示子菜单 */
	.dbline 243
;       if( (men->mmenu_no) == 0 )
	movw R30,R12
	ldd R2,z+2
	tst R2
	brne L70
	.dbline 244
;       {  GUI_RectangleFill(xx+1, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
	.dbline 244
	lds R2,_back_color
	std y+4,R2
	mov R2,R10
	clr R3
	std y+3,R3
	std y+2,R2
	mov R24,R20
	clr R25
	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,233  ; offset = 23
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_RectangleFill
	.dbline 245
;       }
	xjmp L71
L70:
	.dbline 247
;       else
;       {  GUI_RectangleFill(xx, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
	.dbline 247
	lds R2,_back_color
	std y+4,R2
	mov R2,R10
	clr R3
	std y+3,R3
	std y+2,R2
	mov R24,R20
	clr R25
	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,233  ; offset = 23
	sbci R19,255
	mov R16,R20
	clr R17
	xcall _GUI_RectangleFill
	.dbline 248
;       }
L71:
	.dbline 249
;       GUI_HLine(xx+1, mwin->y + 22, 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
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _GUI_HLine
	.dbline 250
;    }
	xjmp L69
L68:
	.dbline 252
;    else
;    {  /* 以右下拉为原则 */
	.dbline 253
;       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
	mov R30,R20
	clr R31
	adiw R30,34
	cp R30,R24
	cpc R31,R25
	brne L72
	.dbline 254
;       {  GUI_RectangleFill(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22+1, xx+MMENU_WIDTH-1, yy, back_color);
	.dbline 254
	lds R2,_back_color
	std y+4,R2
	mov R2,R10
	clr R3
	std y+3,R3
	std y+2,R2
	mov R24,R20
	clr R25
	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,233  ; offset = 23
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,32
	sbci R17,0
	xcall _GUI_RectangleFill
	.dbline 255
;       }
	xjmp L73
L72:
	.dbline 257
;       else
;       {  GUI_RectangleFill(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22+1, xx+MMENU_WIDTH, yy, back_color);
	.dbline 257
	lds R2,_back_color
	std y+4,R2
	mov R2,R10
	clr R3
	std y+3,R3
	std y+2,R2
	mov R24,R20
	clr R25
	adiw R24,34
	std y+1,R25
	std y+0,R24
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,233  ; offset = 23
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,32
	sbci R17,0
	xcall _GUI_RectangleFill
	.dbline 258
;       }
L73:
	.dbline 259
;       GUI_HLine(xx+1, mwin->y + 22, 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
	movw R30,R22
	ldd R18,z+2
	ldd R19,z+3
	subi R18,234  ; offset = 22
	sbci R19,255
	mov R16,R20
	clr R17
	subi R16,255  ; offset = 1
	sbci R17,255

⌨️ 快捷键说明

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