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

📄 ledmenu_icc.lst

📁 做点阵式lcd多级菜单开发的一个例子 可以帮助初学者了解 交互式界面简单设计的部分
💻 LST
📖 第 1 页 / 共 4 页
字号:
     494 9220 009B STS	0x009B,R2
(0046) 	main_menu[1].children_menus=green_menu;
     496 E68B      LDI	R24,0x6B
     497 E090      LDI	R25,0
     498 9390 009E STS	0x009E,R25
     49A 9380 009D STS	0x009D,R24
(0047) 	main_menu[1].parent_menus=NULL;
     49C 9230 00A0 STS	0x00A0,R3
     49E 9220 009F STS	0x009F,R2
(0048) 	
(0049) 	main_menu[2].menu_count=3;
     4A0 E083      LDI	R24,3
     4A1 9380 00A1 STS	0x00A1,R24
(0050) 	main_menu[2].display=red;		//点亮红灯.
     4A3 E68E      LDI	R24,0x6E
     4A4 E094      LDI	R25,4
     4A5 9390 00A3 STS	0x00A3,R25
     4A7 9380 00A2 STS	0x00A2,R24
(0051) 	main_menu[2].subs=openred;
     4A9 E58C      LDI	R24,0x5C
     4AA E090      LDI	R25,0
     4AB 9390 00A5 STS	0x00A5,R25
     4AD 9380 00A4 STS	0x00A4,R24
(0052) 	main_menu[2].children_menus=NULL;
     4AF 9230 00A7 STS	0x00A7,R3
     4B1 9220 00A6 STS	0x00A6,R2
(0053) 	main_menu[2].parent_menus=NULL;
     4B3 9230 00A9 STS	0x00A9,R3
     4B5 9220 00A8 STS	0x00A8,R2
     4B7 9508      RET
(0054) }
(0055) 
(0056) void blue_menu_initial(void)
(0057) {
(0058) 	blue_menu[0].menu_count=2;
_blue_menu_initial:
     4B8 E082      LDI	R24,2
     4B9 9380 007D STS	blue_menu,R24
(0059) 	blue_menu[0].display=qr;			//点亮兰灯,确认.
     4BB E28E      LDI	R24,0x2E
     4BC E095      LDI	R25,5
     4BD 9390 007F STS	blue_menu+2,R25
     4BF 9380 007E STS	blue_menu+1,R24
(0060) 	blue_menu[0].subs=openblue;
     4C1 E58A      LDI	R24,0x5A
     4C2 E090      LDI	R25,0
     4C3 9390 0081 STS	0x0081,R25
     4C5 9380 0080 STS	blue_menu+3,R24
(0061) 	blue_menu[0].children_menus=NULL;
     4C7 2422      CLR	R2
     4C8 2433      CLR	R3
     4C9 9230 0083 STS	0x0083,R3
     4CB 9220 0082 STS	0x0082,R2
(0062) 	blue_menu[0].parent_menus=main_menu;
     4CD E88F      LDI	R24,0x8F
     4CE E090      LDI	R25,0
     4CF 9390 0085 STS	0x0085,R25
     4D1 9380 0084 STS	0x0084,R24
(0063) 	
(0064) 	blue_menu[1].menu_count=2;
     4D3 E082      LDI	R24,2
     4D4 9380 0086 STS	0x0086,R24
(0065) 	blue_menu[1].display=qx;			//取消.
     4D6 E68E      LDI	R24,0x6E
     4D7 E095      LDI	R25,5
     4D8 9390 0088 STS	0x0088,R25
     4DA 9380 0087 STS	0x0087,R24
(0066) 	blue_menu[1].subs=closeblue;
     4DC E588      LDI	R24,0x58
     4DD E090      LDI	R25,0
     4DE 9390 008A STS	0x008A,R25
     4E0 9380 0089 STS	0x0089,R24
(0067) 	blue_menu[1].children_menus=NULL;
     4E2 9230 008C STS	0x008C,R3
     4E4 9220 008B STS	0x008B,R2
(0068) 	blue_menu[1].parent_menus=main_menu;	
     4E6 E88F      LDI	R24,0x8F
     4E7 E090      LDI	R25,0
     4E8 9390 008E STS	0x008E,R25
     4EA 9380 008D STS	0x008D,R24
     4EC 9508      RET
(0069) }
(0070) 
(0071) void green_menu_initial(void)
(0072) {
(0073) 	green_menu[0].menu_count=2;
_green_menu_initial:
     4ED E082      LDI	R24,2
     4EE 9380 006B STS	green_menu,R24
(0074) 	green_menu[0].display=qr;			//点亮绿灯---确认.
     4F0 E28E      LDI	R24,0x2E
     4F1 E095      LDI	R25,5
     4F2 9390 006D STS	green_menu+2,R25
     4F4 9380 006C STS	green_menu+1,R24
(0075) 	green_menu[0].subs=opengreen;
     4F6 E586      LDI	R24,0x56
     4F7 E090      LDI	R25,0
     4F8 9390 006F STS	0x006F,R25
     4FA 9380 006E STS	green_menu+3,R24
(0076) 	green_menu[0].children_menus=NULL;
     4FC 2422      CLR	R2
     4FD 2433      CLR	R3
     4FE 9230 0071 STS	0x0071,R3
     500 9220 0070 STS	0x0070,R2
(0077) 	green_menu[0].parent_menus=main_menu;
     502 E88F      LDI	R24,0x8F
     503 E090      LDI	R25,0
     504 9390 0073 STS	0x0073,R25
     506 9380 0072 STS	0x0072,R24
(0078) 	
(0079) 	green_menu[1].menu_count=2;
     508 E082      LDI	R24,2
     509 9380 0074 STS	0x0074,R24
(0080) 	green_menu[1].display=qx;			//----取消.
     50B E68E      LDI	R24,0x6E
     50C E095      LDI	R25,5
     50D 9390 0076 STS	0x0076,R25
     50F 9380 0075 STS	0x0075,R24
(0081) 	green_menu[1].subs=closegreen;
     511 E584      LDI	R24,0x54
     512 E090      LDI	R25,0
     513 9390 0078 STS	0x0078,R25
     515 9380 0077 STS	0x0077,R24
(0082) 	green_menu[1].children_menus=NULL;
     517 9230 007A STS	0x007A,R3
     519 9220 0079 STS	0x0079,R2
(0083) 	green_menu[1].parent_menus=main_menu;
     51B E88F      LDI	R24,0x8F
     51C E090      LDI	R25,0
     51D 9390 007C STS	0x007C,R25
     51F 9380 007B STS	0x007B,R24
     521 9508      RET
_led_menu_pro:
     522 934A      ST	R20,-Y
     523 935A      ST	R21,-Y
(0084) }
(0085) 
(0086) 
(0087) void led_menu_pro(void)
(0088) {
(0089) 	max_item=menu_led->menu_count;
     524 91E0 0060 LDS	R30,menu_led
     526 91F0 0061 LDS	R31,menu_led+1
     528 8020      LDD	R2,Z+0
     529 9220 0063 STS	max_item,R2
(0090) 	switch(keyval)
     52B 9140 0065 LDS	R20,keyval
     52D 2755      CLR	R21
     52E 3040      CPI	R20,0
     52F 0745      CPC	R20,R21
     530 F409      BNE	0x0532
     531 C0A1      RJMP	0x05D3
     532 3041      CPI	R20,1
     533 E0E0      LDI	R30,0
     534 075E      CPC	R21,R30
     535 F071      BEQ	0x0544
     536 3042      CPI	R20,2
     537 E0E0      LDI	R30,0
     538 075E      CPC	R21,R30
     539 F0D9      BEQ	0x0555
     53A 3043      CPI	R20,3
     53B E0E0      LDI	R30,0
     53C 075E      CPC	R21,R30
     53D F139      BEQ	0x0565
     53E 3044      CPI	R20,4
     53F E0E0      LDI	R30,0
     540 075E      CPC	R21,R30
     541 F409      BNE	0x0543
     542 C06C      RJMP	0x05AF
     543 C08F      RJMP	0x05D3
(0091) 	{
(0092) 		case 0: break;
(0093) 		case 1:				//向上键.
(0094) 			if(user_choosen==0)
     544 9020 0062 LDS	R2,user_choosen
     546 2022      TST	R2
     547 F421      BNE	0x054C
(0095) 			{			
(0096) 				user_choosen=max_item;
     548 9020 0063 LDS	R2,max_item
     54A 9220 0062 STS	user_choosen,R2
(0097) 			}
(0098) 			refresh=1;
     54C E081      LDI	R24,1
     54D 9380 0064 STS	refresh,R24
(0099) 			user_choosen--;
     54F 9180 0062 LDS	R24,user_choosen
     551 5081      SUBI	R24,1
     552 9380 0062 STS	user_choosen,R24
(0100) 			break;
     554 C07E      RJMP	0x05D3
(0101) 		case 2:				//向下键.
(0102) 			user_choosen++;
     555 9180 0062 LDS	R24,user_choosen
     557 5F8F      SUBI	R24,0xFF
     558 9380 0062 STS	user_choosen,R24
(0103) 			if(user_choosen==max_item)
     55A 9020 0063 LDS	R2,max_item
     55C 1582      CP	R24,R2
     55D F419      BNE	0x0561
(0104) 			{
(0105) 				user_choosen=0;
     55E 2422      CLR	R2
     55F 9220 0062 STS	user_choosen,R2
(0106) 			}
(0107) 			refresh=1;
     561 E081      LDI	R24,1
     562 9380 0064 STS	refresh,R24
(0108) 			break;
     564 C06E      RJMP	0x05D3
(0109) 		case 3:				//确认键.			
(0110) 			if(menu_led[user_choosen].subs!=NULL)
     565 9020 0062 LDS	R2,user_choosen
     567 E089      LDI	R24,0x9
     568 9D82      MUL	R24,R2
     569 01F0      MOVW	R30,R0
     56A 9020 0060 LDS	R2,menu_led
     56C 9030 0061 LDS	R3,menu_led+1
     56E 0DE2      ADD	R30,R2
     56F 1DF3      ADC	R31,R3
     570 8023      LDD	R2,Z+3
     571 8034      LDD	R3,Z+4
     572 2022      TST	R2
     573 F411      BNE	0x0576
     574 2033      TST	R3
     575 F079      BEQ	0x0585
(0111) 			{
(0112) 				(*menu_led[user_choosen].subs)();	//执行函数.
     576 9020 0062 LDS	R2,user_choosen
     578 9D82      MUL	R24,R2
     579 01F0      MOVW	R30,R0
     57A 9020 0060 LDS	R2,menu_led
     57C 9030 0061 LDS	R3,menu_led+1
     57E 0DE2      ADD	R30,R2
     57F 1DF3      ADC	R31,R3
     580 81A3      LDD	R26,Z+3
     581 81B4      LDD	R27,Z+4
     582 01FD      MOVW	R30,R26
     583 940E 06F9 CALL	xicall
(0113) 			}
(0114) 			if(menu_led[user_choosen].children_menus!=NULL)
     585 9020 0062 LDS	R2,user_choosen
     587 E089      LDI	R24,0x9
     588 9D82      MUL	R24,R2
     589 01F0      MOVW	R30,R0
     58A 9020 0060 LDS	R2,menu_led
     58C 9030 0061 LDS	R3,menu_led+1
     58E 0DE2      ADD	R30,R2
     58F 1DF3      ADC	R31,R3
     590 8025      LDD	R2,Z+5
     591 8036      LDD	R3,Z+6
     592 2022      TST	R2
     593 F411      BNE	0x0596
     594 2033      TST	R3
     595 F0A9      BEQ	0x05AB
(0115) 			{
(0116) 				temp_choosen=user_choosen;
     596 9020 0062 LDS	R2,user_choosen
     598 9220 006A STS	temp_choosen,R2
(0117) 				menu_led=menu_led[user_choosen].children_menus;
     59A 9D82      MUL	R24,R2
     59B 01F0      MOVW	R30,R0
     59C 9020 0060 LDS	R2,menu_led
     59E 9030 0061 LDS	R3,menu_led+1
     5A0 0DE2      ADD	R30,R2
     5A1 1DF3      ADC	R31,R3
     5A2 8025      LDD	R2,Z+5
     5A3 8036      LDD	R3,Z+6
     5A4 9230 0061 STS	menu_led+1,R3
     5A6 9220 0060 STS	menu_led,R2
(0118) 				user_choosen=0;
     5A8 2422      CLR	R2
     5A9 9220 0062 STS	user_choosen,R2
(0119) 			}
(0120) 			refresh=1;
     5AB E081      LDI	R24,1
     5AC 9380 0064 STS	refresh,R24
(0121) 			break;
     5AE C024      RJMP	0x05D3
(0122) 		case 4:				//返回键.
(0123) 			if(menu_led[user_choosen].parent_menus!=NULL)
     5AF 9020 0062 LDS	R2,user_choosen
     5B1 E089      LDI	R24,0x9
     5B2 9D82      MUL	R24,R2
     5B3 01F0      MOVW	R30,R0
     5B4 9020 0060 LDS	R2,menu_led
     5B6 9030 0061 LDS	R3,menu_led+1
     5B8 0DE2      ADD	R30,R2
     5B9 1DF3      ADC	R31,R3
     5BA 8027      LDD	R2,Z+7
     5BB 8430      LDD	R3,Z+8
     5BC 2022      TST	R2
     5BD F411      BNE	0x05C0
     5BE 2033      TST	R3
     5BF F081      BEQ	0x05D0
(0124) 			{
(0125) 				menu_led=menu_led[user_choosen].parent_menus;
     5C0 9020 0062 LDS	R2,user_choosen
     5C2 9D82      MUL	R24,R2
     5C3 01F0      MOVW	R30,R0
     5C4 9020 0060 LDS	R2,menu_led
     5C6 9030 0061 LDS	R3,menu_led+1
     5C8 0DE2      ADD	R30,R2
     5C9 1DF3      ADC	R31,R3
     5CA 8027      LDD	R2,Z+7
     5CB 8430      LDD	R3,Z+8
     5CC 9230 0061 STS	menu_led+1,R3
     5CE 9220 0060 STS	menu_led,R2
(0126) 			}	
(0127) 			refresh=1;
     5D0 E081      LDI	R24,1
     5D1 9380 0064 STS	refresh,R24
(0128) 			break;
(0129) 		default:
(0130) 			break;			
(0131) 	}
(0132) 	if(refresh)					//是否需要刷新LCD标志位.
     5D3 9020 0064 LDS	R2,refresh
     5D5 2022      TST	R2
     5D6 F021      BEQ	0x05DB
(0133) 	{
(0134) 		lcd_clr();
     5D7 DD75      RCALL	_lcd_clr
(0135) 		refresh=0;
     5D8 2422      CLR	R2
     5D9 9220 0064 STS	refresh,R2
(0136) 	}
(0137) 	led_menu_show();	
     5DB D003      RCALL	_led_menu_show
     5DC 9159      LD	R21,Y+
     5DD 9149      LD	R20,Y+
     5DE 9508      RET
_led_menu_show:
  n                    --> R20
     5DF 940E 06EF CALL	push_xgsetF000
     5E1 9726      SBIW	R28,6
(0138) }
(0139) 
(0140) void led_menu_show(void)	
(0141) {
(0142) 	uchar n;
(0143) 	max_item=menu_led->menu_count;
     5E2 91E0 0060 LDS	R30,menu_led
     5E4 91F0 0061 LDS	R31,menu_led+1
     5E6 8020      LDD	R2,Z+0
     5E7 9220 0063 STS	max_item,R2
(0144) 	if (max_item>=3)				//菜单项为3则表示为主菜单.
     5E9 2D82      MOV	R24,R2
     5EA 3083      CPI	R24,3
     5EB F0F0      BCS	0x060A
(0145) 	{				
(0146) 		for(n=0;n<3;n++)
     5EC 2744      CLR	R20
     5ED C016      RJMP	0x0604
(0147) 		{
(0148) /*使同一数组元素图形宽度相同,即取最大的图形宽度,这里取96,在数组赋值时也要注意*/		
(0149) 			draw_bmp(n*2,20,96,0,menu_led[n].display);
     5EE E089      LDI	R24,0x9
     5EF 9F84      MUL	R24,R20
     5F0 01F0      MOVW	R30,R0
     5F1 9020 0060 LDS	R2,menu_led
     5F3 9030 0061 LDS	R3,menu_led+1
     5F5 0DE2      ADD	R30,R2
     5F6 1DF3      ADC	R31,R3
     5F7 8021      LDD	R2,Z+1
     5F8 8032      LDD	R3,Z+2
     5F9 823D      STD	Y+5,R3
     5FA 822C      STD	Y+4,R2
     5FB 2422      CLR	R2
     5FC 822A      STD	Y+2,R2
     5FD E680      LDI	R24,0x60
     5FE 8388      STD	Y+0,R24

⌨️ 快捷键说明

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