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

📄 menu.s

📁 一个用于LCD的菜单模式界面的程序,如何实现滚屏.
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbfunc e Menu_Change _Menu_Change fV
;         KeyNum -> R20
	.even
_Menu_Change::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 153
; 		 LCD_write_string(2,n,MenuPoint[DisplayPoint++].DisplayString);
; 		 
; 	 	}
; 
; }
; 
; void Menu_Change(unsigned char KeyNum)
; {
	.dbline 154
; 		if(KeyNum)
	tst R20
	brne X3
	xjmp L36
X3:
	.dbline 155
; 		{
	.dbline 156
; 		   switch(KeyNum) 
	clr R21
	cpi R20,55
	ldi R30,0
	cpc R21,R30
	brne X4
	xjmp L47
X4:
	ldi R24,55
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L57
L56:
	cpi R20,48
	ldi R30,0
	cpc R21,R30
	brne X5
	xjmp L55
X5:
	cpi R20,51
	ldi R30,0
	cpc R21,R30
	breq L41
	xjmp L39
L57:
	cpi R20,66
	ldi R30,0
	cpc R21,R30
	breq L44
	cpi R20,66
	ldi R30,0
	cpc R21,R30
	brge X6
	xjmp L39
X6:
L58:
	cpi R20,70
	ldi R30,0
	cpc R21,R30
	brne X7
	xjmp L50
X7:
	xjmp L39
X0:
	.dbline 157
; 		   {		    
L41:
	.dbline 159
; 		   				case UP: 
; 							 UserChoose --; 
	lds R24,_UserChoose
	subi R24,1
	sts _UserChoose,R24
	.dbline 160
; 							 if (UserChoose ==255)
	cpi R24,255
	breq X8
	xjmp L39
X8:
	.dbline 161
; 							 { 
	.dbline 162
; 							   	UserChoose = 0;//上翻截至,如果要回滚赋值MaxItems-1
	clr R2
	sts _UserChoose,R2
	.dbline 163
; 							 } 
	.dbline 164
; 							 break; 
	xjmp L39
L44:
	.dbline 166
; 						case Esc: 
; 							 if (MenuPoint[UserChoose].ParentMenus != Null) 
	lds R2,_UserChoose
	ldi R24,9
	mul R24,R2
	movw R30,R0
	lds R2,_MenuPoint
	lds R3,_MenuPoint+1
	add R30,R2
	adc R31,R3
	ldd R2,z+7
	ldd R3,z+8
	tst R2
	brne X1
	tst R3
	brne X9
	xjmp L39
X9:
X1:
	.dbline 167
; 							 { 
	.dbline 168
; 							   	MenuPoint = MenuPoint[UserChoose].ParentMenus; 
	lds R2,_UserChoose
	ldi R24,9
	mul R24,R2
	movw R30,R0
	lds R2,_MenuPoint
	lds R3,_MenuPoint+1
	add R30,R2
	adc R31,R3
	ldd R2,z+7
	ldd R3,z+8
	sts _MenuPoint+1,R3
	sts _MenuPoint,R2
	.dbline 169
; 								UserChoose = 0; 
	clr R2
	sts _UserChoose,R2
	.dbline 170
; 								DisplayStart = 0; 
	sts _DisplayStart,R2
	.dbline 171
; 							} 
	.dbline 172
; 							break; 
	xjmp L39
L47:
	.dbline 174
; 						case Down: 
; 							 UserChoose ++; 
	lds R24,_UserChoose
	subi R24,255    ; addi 1
	sts _UserChoose,R24
	.dbline 175
; 							 if (UserChoose == MaxItems) 
	lds R2,_MaxItems
	lds R3,_MaxItems+1
	mov R4,R24
	clr R5
	cp R4,R2
	cpc R5,R3
	breq X10
	xjmp L39
X10:
	.dbline 176
; 							 { 
	.dbline 177
; 							   UserChoose = MaxItems-1;//下翻截至,如要回滚赋值为0 
	movw R24,R2
	sbiw R24,1
	sts _UserChoose,R24
	.dbline 178
; 							 } 
	.dbline 179
; 							 break; 
	xjmp L39
L50:
	.dbline 181
; 						case Enter: 
; 							 if (MenuPoint[UserChoose].Subs != NullSubs) 
	lds R2,_UserChoose
	ldi R24,9
	mul R24,R2
	movw R30,R0
	lds R2,_MenuPoint
	lds R3,_MenuPoint+1
	add R30,R2
	adc R31,R3
	ldd R2,z+3
	ldd R3,z+4
	ldi R24,<PL_NullSubs
	ldi R25,>PL_NullSubs
	cp R2,R24
	cpc R3,R25
	breq L51
	.dbline 182
; 							 { 
	.dbline 183
; 							   (*MenuPoint[UserChoose].Subs)(); 
	lds R2,_UserChoose
	ldi R24,9
	mul R24,R2
	movw R30,R0
	lds R2,_MenuPoint
	lds R3,_MenuPoint+1
	add R30,R2
	adc R31,R3
	ldd R26,z+3
	ldd R27,z+4
	movw R30,R26
	xcall xicall
	.dbline 184
; 							 } 
	xjmp L39
L51:
	.dbline 185
; 							 else if (MenuPoint[UserChoose].ChildrenMenus != Null) 
	lds R2,_UserChoose
	ldi R24,9
	mul R24,R2
	movw R30,R0
	lds R2,_MenuPoint
	lds R3,_MenuPoint+1
	add R30,R2
	adc R31,R3
	ldd R2,z+5
	ldd R3,z+6
	tst R2
	brne X2
	tst R3
	breq L39
X2:
	.dbline 186
; 							 { 
	.dbline 187
; 							   MenuPoint = MenuPoint[UserChoose].ChildrenMenus; 
	lds R2,_UserChoose
	ldi R24,9
	mul R24,R2
	movw R30,R0
	lds R2,_MenuPoint
	lds R3,_MenuPoint+1
	add R30,R2
	adc R31,R3
	ldd R2,z+5
	ldd R3,z+6
	sts _MenuPoint+1,R3
	sts _MenuPoint,R2
	.dbline 188
; 							   UserChoose = 0; 
	clr R2
	sts _UserChoose,R2
	.dbline 189
; 							   DisplayStart = 0; 
	sts _DisplayStart,R2
	.dbline 190
; 							 } 
	.dbline 191
; 							 break; 
	xjmp L39
L55:
	.dbline 193
; 					   case Reset: 
; 					   		MenuPoint = MainMenu; 
	ldi R24,<_MainMenu
	ldi R25,>_MainMenu
	sts _MenuPoint+1,R25
	sts _MenuPoint,R24
	.dbline 194
; 							UserChoose = 0; 
	clr R2
	sts _UserChoose,R2
	.dbline 195
; 							DisplayStart = 0; 
	sts _DisplayStart,R2
	.dbline 196
; 							break; 
	.dbline 197
; 					   default:break;
L39:
	.dbline 199
; 			}
; 			if (UserChoose%ShowCount==0)           //一屏只能显示ShowCount行
	lds R17,_ShowCount
	lds R16,_UserChoose
	xcall mod8u
	tst R16
	brne L59
	.dbline 200
; 			  DisplayStart = UserChoose;
	lds R2,_UserChoose
	sts _DisplayStart,R2
	xjmp L60
L59:
	.dbline 201
; 			else if(UserChoose==1||UserChoose== 3)
	lds R24,_UserChoose
	cpi R24,1
	breq L63
	cpi R24,3
	brne L61
L63:
	.dbline 202
; 			   DisplayStart = UserChoose-1;		   //实现滚屏的关键				 
	lds R24,_UserChoose
	subi R24,1
	sts _DisplayStart,R24
L61:
L60:
	.dbline 203
	ldi R16,1
	ldi R17,0
	xcall _LCD_write_command
	.dbline 204
	ldi R16,5
	ldi R17,0
	xcall _delay_nms
	.dbline 205
	xcall _ShowMenu
	.dbline 206
L36:
	.dbline -2
L35:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r KeyNum 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
_MaxItems::
	.blkb 2
	.dbsym e MaxItems _MaxItems i
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L33:
	.blkb 3
	.area idata
	.byte 45,62,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L25:
	.blkb 15
	.area idata
	.byte 52,46,'F,'l,'a,'s,'h,32,'O,'p,'t,'i,'o,'n,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L24:
	.blkb 16
	.area idata
	.byte 51,46,'R,'o,'b,'o,'t,32,'C,'o,'n,'t,'r,'o,'l,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L23:
	.blkb 15
	.area idata
	.byte 50,46,'V,'o,'i,'c,'e,32,'C,'e,'n,'t,'e,'r,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L22:
	.blkb 10
	.area idata
	.byte 52,46,'G,'o,32,'B,'a,'c,'k,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L21:
	.blkb 11
	.area idata
	.byte 51,46,'G,'o,32,'A,'h,'e,'a,'d,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L20:
	.blkb 13
	.area idata
	.byte 50,46,'T,'u,'r,'n,32,'R,'i,'g,'h,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L19:
	.blkb 12
	.area idata
	.byte 49,46,'T,'u,'r,'n,32,'L,'e,'f,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L18:
	.blkb 15
	.area idata
	.byte 52,46,'V,'o,'i,'c,'e,32,'D,'e,'l,'e,'t,'e,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L17:
	.blkb 15
	.area idata
	.byte 49,46,'V,'o,'i,'c,'e,32,'R,'e,'c,'o,'r,'d,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L16:
	.blkb 7
	.area idata
	.byte 53,46,'B,'a,'c,'k,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L15:
	.blkb 15
	.area idata
	.byte 52,46,'F,'l,'a,'s,'h,32,'D,'e,'l,'e,'t,'e,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L14:
	.blkb 8
	.area idata
	.byte 51,46,'P,'a,'u,'s,'e,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L13:
	.blkb 7
	.area idata
	.byte 50,46,'P,'l,'a,'y,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L12:
	.blkb 15
	.area idata
	.byte 49,46,'F,'l,'a,'s,'h,32,'R,'e,'c,'o,'r,'d,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L11:
	.blkb 7
	.area idata
	.byte 52,46,'B,'a,'c,'k,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L10:
	.blkb 11
	.area idata
	.byte 51,46,'A,'l,'e,'r,'t,'S,'e,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L9:
	.blkb 11
	.area idata
	.byte 50,46,'D,'a,'t,'e,32,'S,'e,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L8:
	.blkb 11
	.area idata
	.byte 49,46,'T,'i,'m,'e,32,'S,'e,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L7:
	.blkb 9
	.area idata
	.byte 'A,'l,'e,'r,'t,'S,'e,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L5:
	.blkb 8
	.area idata
	.byte 'D,'a,'t,'e,'S,'e,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
L3:
	.blkb 8
	.area idata
	.byte 'T,'i,'m,'e,'S,'e,'t,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\menu.c
	.area func_lit
PL_NullSubs:	.word `_NullSubs
PL_AlertSet:	.word `_AlertSet
PL_DateSet:	.word `_DateSet
PL_TimeSet:	.word `_TimeSet

⌨️ 快捷键说明

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