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

📄 menu.s

📁 简单菜单程序,八个按键.使用AVR单片机.2008/3/24--2008/3/29 编译器为ICCAVR7.14.晶振7.3728M,单片机为ATmega16(用ATmega32在proteus中仿
💻 S
📖 第 1 页 / 共 3 页
字号:
	ldi R21,4
	xjmp L14
L11:
	.dbline 40
	.dbline 41
	.dbline 42
L12:
	.dbline 39
	subi R20,1
	sbci R21,0
L14:
	.dbline 39
	cpi R20,0
	cpc R20,R21
	brne L11
X1:
L8:
	.dbline 38
	subi R16,1
	sbci R17,0
L10:
	.dbline 38
	cpi R16,0
	cpc R16,R17
	brne L7
X2:
	.dbline -2
L6:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r n 20 i
	.dbsym r m 16 i
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
	.dbfunc e chkbusy _chkbusy fV
	.even
_chkbusy::
	.dbline -1
	.dbline 24
	.dbline 26
	sbi 0x18,4
	.dbline 27
	cbi 0x18,2
	.dbline 28
	sbi 0x18,3
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e send_comm _send_comm fV
;        command -> R20
	.even
_send_comm::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 33
	.dbline 34
	xcall _chkbusy
	.dbline 35
	sbi 0x18,4
	.dbline 36
	cbi 0x18,2
	.dbline 37
	cbi 0x18,3
	.dbline 38
	out 0x1b,R20
	.dbline 39
	sbi 0x18,4
	.dbline 40
; 	main_menu[0].children_menus=blue_menu;
	cbi 0x18,4
	.dbline -2
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r command 20 c
	.dbend
	.dbfunc e send_data _send_data fV
;            dat -> R20
	.even
_send_data::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 44
; 	main_menu[0].parent_menus=NULL;
; 	
; 	main_menu[1].menu_count=3;
; 	main_menu[1].display=green;		//点亮绿灯
	.dbline 45
; 	main_menu[1].subs=NULL;
	xcall _chkbusy
	.dbline 46
; 	main_menu[1].children_menus=green_menu;
	sbi 0x18,4
	.dbline 47
; 	main_menu[1].parent_menus=NULL;
	sbi 0x18,2
	.dbline 48
; 	
	cbi 0x18,3
	.dbline 49
; 	main_menu[2].menu_count=3;
	out 0x1b,R20
	.dbline 50
; 	main_menu[2].display=red;		//点亮红灯.
	cbi 0x18,4
	.dbline -2
L17:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r dat 20 c
	.dbend
	.dbfunc e lcd_init _lcd_init fV
	.even
_lcd_init::
	.dbline -1
	.dbline 55
; 	main_menu[2].subs=openred;
; 	main_menu[2].children_menus=NULL;
; 	main_menu[2].parent_menus=NULL;
; }
; 
	.dbline 56
; void blue_menu_initial(void)
	ldi R16,192
	xcall _send_comm
	.dbline 57
; {
	ldi R16,184
	xcall _send_comm
	.dbline 58
; 	blue_menu[0].menu_count=2;
	ldi R16,64
	xcall _send_comm
	.dbline 59
; 	blue_menu[0].display=qr;			//点亮兰灯,确认.
	ldi R16,63
	xcall _send_comm
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e lcd_clr _lcd_clr fV
;           page -> R20
;            col -> R22
	.even
_lcd_clr::
	xcall push_gset2
	.dbline -1
	.dbline 64
; 	blue_menu[0].subs=openblue;
; 	blue_menu[0].children_menus=NULL;
; 	blue_menu[0].parent_menus=main_menu;
; 	
; 	blue_menu[1].menu_count=2;
	.dbline 66
; 	blue_menu[1].display=qx;			//取消.
; 	blue_menu[1].subs=closeblue;
	sbi 0x18,0
	.dbline 67
; 	blue_menu[1].children_menus=NULL;
	cbi 0x18,1
	.dbline 68
; 	blue_menu[1].parent_menus=main_menu;	
	clr R20
	xjmp L23
L20:
	.dbline 69
; }
	.dbline 70
; 
	mov R16,R20
	ori R16,184
	xcall _send_comm
	.dbline 71
; void green_menu_initial(void)
	ldi R16,64
	xcall _send_comm
	.dbline 72
; {
	clr R22
	xjmp L27
L24:
	.dbline 73
	.dbline 74
	clr R16
	xcall _send_data
	.dbline 75
L25:
	.dbline 72
	inc R22
L27:
	.dbline 72
	cpi R22,64
	brlo L24
	.dbline 76
L21:
	.dbline 68
	inc R20
L23:
	.dbline 68
	cpi R20,8
	brlo L20
	.dbline 78
; 	green_menu[0].menu_count=2;
; 	green_menu[0].display=qr;			//点亮绿灯---确认.
; 	green_menu[0].subs=opengreen;
; 	green_menu[0].children_menus=NULL;
; 	green_menu[0].parent_menus=main_menu;
; 	
	cbi 0x18,0
	.dbline 79
; 	green_menu[1].menu_count=2;
	sbi 0x18,1
	.dbline 80
; 	green_menu[1].display=qx;			//----取消.
	clr R20
	xjmp L31
L28:
	.dbline 81
; 	green_menu[1].subs=closegreen;
	.dbline 82
; 	green_menu[1].children_menus=NULL;
	mov R16,R20
	ori R16,184
	xcall _send_comm
	.dbline 83
; 	green_menu[1].parent_menus=main_menu;
	ldi R16,64
	xcall _send_comm
	.dbline 84
; }
	clr R22
	xjmp L35
L32:
	.dbline 85
	.dbline 86
	clr R16
	xcall _send_data
	.dbline 87
L33:
	.dbline 84
	inc R22
L35:
	.dbline 84
	cpi R22,64
	brlo L32
	.dbline 88
L29:
	.dbline 80
	inc R20
L31:
	.dbline 80
	cpi R20,8
	brlo L28
	.dbline -2
L19:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r page 20 c
	.dbsym r col 22 c
	.dbend
	.dbfunc e draw_bmp _draw_bmp fV
;        address -> R20
;              p -> R22
;         window -> R10
;              x -> R12
;            bmp -> R14,R15
;            mod -> y+16
;          width -> y+14
;            col -> y+12
;           page -> y+10
	.even
_draw_bmp::
	xcall push_arg4
	xcall push_gset5
	ldd R14,y+18
	ldd R15,y+19
	.dbline -1
	.dbline 97
; 
; 
; void led_menu_pro(void)
; {
; 	max_item=menu_led->menu_count;
; 	switch(keyval)
; 	{
; 		case 0: break;
; 		case 1:				//向上键.
; 			if(user_choosen==0)
; 			{			
; 				user_choosen=max_item;
; 			}
	.dbline 99
; 			refresh=1;
; 			user_choosen--;
	clr R10
	.dbline 100
; 			break;
	clr R22
	.dbline 102
; 		case 2:				//向下键.
; 			user_choosen++;
	ldd R12,y+12
	xjmp L40
L37:
	.dbline 103
; 			if(user_choosen==max_item)
	.dbline 105
; 			{
; 				user_choosen=0;
	ldi R24,127
	cp R24,R12
	brsh L41
	.dbline 105
	xjmp L36
L41:
	.dbline 106
; 			}
	ldi R24,63
	cp R24,R12
	brsh L43
	.dbline 107
; 			refresh=1;
	.dbline 108
; 			break;
	clr R10
	inc R10
	.dbline 109
; 		case 3:				//确认键.			
	ldi R17,64
	mov R16,R12
	xcall mod8u
	mov R20,R16
	.dbline 110
; 			if(menu_led[user_choosen].subs!=NULL)
	xjmp L44
L43:
	.dbline 112
; 			{
; 				(*menu_led[user_choosen].subs)();	//执行函数.
	.dbline 113
; 			}
	clr R10
	.dbline 114
; 			if(menu_led[user_choosen].children_menus!=NULL)
	mov R20,R12
	.dbline 115
; 			{
L44:
	.dbline 117
; 				temp_choosen=user_choosen;
; 				menu_led=menu_led[user_choosen].children_menus;
	tst R10
	breq L45
	.dbline 118
; 				user_choosen=0;
	.dbline 119
; 			}
	cbi 0x18,0
	.dbline 120
; 			refresh=1;
	sbi 0x18,1
	.dbline 121
; 			break;
	xjmp L46
L45:
	.dbline 124
; 		case 4:				//返回键.
; 			if(menu_led[user_choosen].parent_menus!=NULL)
; 			{
	.dbline 125
; 				menu_led=menu_led[user_choosen].parent_menus;
	sbi 0x18,0
	.dbline 126
; 			}	
	cbi 0x18,1
	.dbline 127
; 			refresh=1;
L46:
	.dbline 128
; 			break;
	ldd R16,y+10
	ori R16,184
	xcall _send_comm
	.dbline 129
; 		default:
	mov R16,R20
	ori R16,64
	xcall _send_comm
	.dbline 131
; 			break;			
; 	}
	ldd R0,y+16
	tst R0
	breq L47
	.dbline 131
	mov R30,R22
	clr R31
	add R30,R14
	adc R31,R15
	lpm R16,Z
	com R16
	xcall _send_data
	xjmp L48
L47:
	.dbline 132
; 	if(refresh)					//是否需要刷新LCD标志位.
	mov R30,R22
	clr R31
	add R30,R14
	adc R31,R15
	lpm R16,Z
	xcall _send_data
L48:
	.dbline 134
; 	{
; 		lcd_clr();
	tst R10
	breq L49
	.dbline 135
; 		refresh=0;
	.dbline 136
; 	}
	cbi 0x18,0
	.dbline 137
; 	led_menu_show();	
	sbi 0x18,1
	.dbline 138
; }
	xjmp L50
L49:
	.dbline 141
; 
; void led_menu_show(void)	
; {
	.dbline 142
; 	uchar n;
	sbi 0x18,0
	.dbline 143
; 	max_item=menu_led->menu_count;
	cbi 0x18,1
	.dbline 144
; 	if (max_item>=3)				//菜单项为3则表示为主菜单.
L50:
	.dbline 146
; 	{				
; 		for(n=0;n<3;n++)
	ldd R16,y+10
	ori R16,184
	subi R16,255    ; addi 1
	xcall _send_comm
	.dbline 147
; 		{
	mov R16,R20
	ori R16,64
	xcall _send_comm
	.dbline 149
; /*使同一数组元素图形宽度相同,即取最大的图形宽度,这里取96,在数组赋值时也要注意*/		
; 			draw_bmp(n*2,20,96,0,menu_led[n].display);
	ldd R0,y+16
	tst R0
	breq L51
	.dbline 149
	ldd R2,y+14
	clr R3
	mov R30,R22
	clr R31
	add R30,R2
	adc R31,R3
	add R30,R14
	adc R31,R15
	lpm R16,Z
	com R16
	xcall _send_data
	xjmp L52
L51:
	.dbline 150
; 		}
	ldd R2,y+14
	clr R3
	mov R30,R22
	clr R31
	add R30,R2
	adc R31,R3
	add R30,R14
	adc R31,R15
	lpm R16,Z
	xcall _send_data
L52:
	.dbline 152
	inc R22
	.dbline 153
L38:
	.dbline 102
	inc R12
L40:
	.dbline 102
	ldd R2,y+12
	ldd R0,y+14
	add R2,R0
	cp R12,R2
	brsh X3
	xjmp L37
X3:
	.dbline -2
L36:
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r p 22 c
	.dbsym r window 10 c
	.dbsym r x 12 c
	.dbsym r bmp 14 pkc
	.dbsym l mod 16 c
	.dbsym l width 14 c
	.dbsym l col 12 c
	.dbsym l page 10 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
L54:
	.blkb 1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
L55:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
L56:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
L57:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/lcd_12864.h
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu/get_key.h
	.dbfunc e get_key _get_key fc
	.dbsym s keylock L57 c
	.dbsym s havekey L56 c
	.dbsym s keytime L55 c
	.dbsym s lastkcode L54 c
;           pass -> R16
;       kcodebuf -> R18
	.even
_get_key::
	.dbline -1
	.dbline 8
	.dbline 14
	in R18,0x10
	andi R18,255
	.dbline 15
	lds R24,L55
	subi R24,255    ; addi 1
	sts L55,R24
	.dbline 16
	lds R2,L54
	cp R18,R2
	breq L58
	.dbline 16
	clr R2
	sts L55,R2
L58:
	.dbline 17
	cpi R18,255
	brne L60
	.dbline 18
	.dbline 19
	clr R2
	sts L56,R2
	.dbline 20
	sts L57,R2
	.dbline 21
	sts L55,R2
	.dbline 22
	clr R16
	.dbline 23
	xjmp L61
L60:
	.dbline 24
	cpi R18,127
	brne L62
	.dbline 25
	.dbline 26
	ldi R24,1
	sts L57,R24
	.dbline 27
	lds R2,L55
	tst R2
	brne L64
	.dbline 27
	ldi R16,7
	xjmp L63
L64:
	.dbline 29
	.dbline 30
	lds R24,L55
	cpi R24,100
	brne L66
	.dbline 31
	.dbline 32
	ldi R16,7
	.dbline 33
	ldi R24,80
	sts L55,R24
	.dbline 34
	xjmp L63
L66:
	.dbline 35
	ldi R16,9
	.dbline 36
	.dbline 37
	xjmp L63
L62:
	.dbline 38
	cpi R18,191
	brne L68
	.dbline 39
	.dbline 40
	ldi R24,1
	sts L57,R24
	.dbline 41
	lds R2,L55
	tst R2
	brne L70
	.dbline 41
	ldi R16,8
	xjmp L69
L70:
	.dbline 42
	lds R24,L55
	cpi R24,100
	brne L72
	.dbline 43
	.dbline 44
	ldi R16,8
	.dbline 45
	ldi R24,80
	sts L55,R24
	.dbline 46
	xjmp L69
L72:
	.dbline 47
	ldi R16,9
	.dbline 48
	xjmp L69
L68:
	.dbline 50
	lds R2,L56
	tst R2
	brne L74
	.dbline 51
	.dbline 52
	ldi R24,1
	sts L56,R24
	.dbline 53
	ldi R16,10
	.dbline 54
	xjmp L75
L74:
	.dbline 56
	lds R24,L57
	cpi R24,1
	brne L76
	.dbline 56
	ldi R16,10
	xjmp L77
L76:
	.dbline 58
	cpi R18,223
	brne L78
	.dbline 59
	.dbline 60
	ldi R24,1
	sts L57,R24
	.dbline 61
	ldi R16,6
	.dbline 62
	xjmp L79
L78:
	.dbline 63
	cpi R18,239
	brne L80
	.dbline 64
	.dbline 65
	ldi R24,1
	sts L57,R24
	.dbline 66
	ldi R16,5
	.dbline 67
	xjmp L81
L80:
	.dbline 68
	cpi R18,247
	brne L82
	.dbline 69
	.dbline 70
	ldi R24,1
	sts L57,R24
	.dbline 71
	ldi R16,4
	.dbline 72
	xjmp L83
L82:
	.dbline 73
	cpi R18,251
	brne L84
	.dbline 74
	.dbline 75
	ldi R24,1
	sts L57,R24
	.dbline 76
	ldi R16,3
	.dbline 77
	xjmp L85
L84:
	.dbline 78
	cpi R18,253
	brne L86
	.dbline 79
	.dbline 80
	ldi R24,1
	sts L57,R24
	.dbline 81
	ldi R16,2
	.dbline 82
	xjmp L87
L86:
	.dbline 83
	cpi R18,254
	brne L88
	.dbline 84
	.dbline 85
	ldi R24,1
	sts L57,R24
	.dbline 86
	ldi R16,1
	.dbline 87
	xjmp L89
L88:
	.dbline 88
	ldi R16,10
L89:
L87:
L85:
L83:
L81:
L79:
L77:
L75:
L69:
L63:
L61:
	.dbline 89
	sts L54,R18
	.dbline 91
	.dbline -2
L53:
	.dbline 0 ; func end
	ret
	.dbsym r pass 16 c
	.dbsym r kcodebuf 18 c
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\LedMenu\menu.c
	.dbfunc e main_init _main_init fV
	.even
_main_init::
	.dbline -1
	.dbline 23
	.dbline 24
	ldi R24,255
	out 0x1a,R24
	.dbline 25
	clr R2
	out 0x1b,R2
	.dbline 26
	out 0x17,R24
	.dbline 27
	out 0x18,R2
	.dbline 29
	out 0x14,R2
	.dbline 30
	out 0x15,R24
	.dbline 31
	out 0x11,R2
	.dbline 32
	out 0x12,R24
	.dbline -2
L90:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main_menu_initial _main_menu_initial fV
	.even
_main_menu_initial::
	.dbline -1
	.dbline 36
	.dbline 37
	ldi R24,3
	sts _main_menu,R24
	.dbline 38
	ldi R24,<_blue
	ldi R25,>_blue
	sts _main_menu+1+1,R25
	sts _main_menu+1,R24
	.dbline 39
	clr R2
	clr R3
	sts _main_menu+3+1,R3
	sts _main_menu+3,R2
	.dbline 40
	ldi R24,<_blue_menu
	ldi R25,>_blue_menu
	sts _main_menu+5+1,R25
	sts _main_menu+5,R24
	.dbline 41
	sts _main_menu+7+1,R3
	sts _main_menu+7,R2
	.dbline 43
	ldi R24,3
	sts _main_menu+9,R24
	.dbline 44
	ldi R24,<_green
	ldi R25,>_green

⌨️ 快捷键说明

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