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

📄 menu.lis

📁 简单菜单程序,八个按键.使用AVR单片机.2008/3/24--2008/3/29 编译器为ICCAVR7.14.晶振7.3728M,单片机为ATmega16(用ATmega32在proteus中仿
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0096 00E4              ldi R16,64
 0098 D3DF              xcall _send_comm
 009A                   .dbline 72
 009A           ; {
 009A 6627              clr R22
 009C 03C0              xjmp L27
 009E           L24:
 009E                   .dbline 73
 009E                   .dbline 74
 009E 0027              clr R16
 00A0 DCDF              xcall _send_data
 00A2                   .dbline 75
 00A2           L25:
 00A2                   .dbline 72
 00A2 6395              inc R22
 00A4           L27:
 00A4                   .dbline 72
 00A4 6034              cpi R22,64
 00A6 D8F3              brlo L24
 00A8                   .dbline 76
 00A8           L21:
 00A8                   .dbline 68
 00A8 4395              inc R20
 00AA           L23:
 00AA                   .dbline 68
 00AA 4830              cpi R20,8
 00AC 88F3              brlo L20
 00AE                   .dbline 78
 00AE           ;       green_menu[0].menu_count=2;
 00AE           ;       green_menu[0].display=qr;                       //点亮绿灯---确认.
 00AE           ;       green_menu[0].subs=opengreen;
 00AE           ;       green_menu[0].children_menus=NULL;
 00AE           ;       green_menu[0].parent_menus=main_menu;
 00AE           ;       
 00AE C098              cbi 0x18,0
 00B0                   .dbline 79
 00B0           ;       green_menu[1].menu_count=2;
 00B0 C19A              sbi 0x18,1
 00B2                   .dbline 80
 00B2           ;       green_menu[1].display=qx;                       //----取消.
 00B2 4427              clr R20
 00B4 0DC0              xjmp L31
 00B6           L28:
 00B6                   .dbline 81
 00B6           ;       green_menu[1].subs=closegreen;
 00B6                   .dbline 82
 00B6           ;       green_menu[1].children_menus=NULL;
 00B6 042F              mov R16,R20
 00B8 086B              ori R16,184
 00BA C2DF              xcall _send_comm
 00BC                   .dbline 83
 00BC           ;       green_menu[1].parent_menus=main_menu;
 00BC 00E4              ldi R16,64
 00BE C0DF              xcall _send_comm
 00C0                   .dbline 84
 00C0           ; }
 00C0 6627              clr R22
 00C2 03C0              xjmp L35
 00C4           L32:
 00C4                   .dbline 85
 00C4                   .dbline 86
 00C4 0027              clr R16
 00C6 C9DF              xcall _send_data
 00C8                   .dbline 87
 00C8           L33:
 00C8                   .dbline 84
 00C8 6395              inc R22
 00CA           L35:
 00CA                   .dbline 84
 00CA 6034              cpi R22,64
 00CC D8F3              brlo L32
 00CE                   .dbline 88
 00CE           L29:
 00CE                   .dbline 80
 00CE 4395              inc R20
 00D0           L31:
 00D0                   .dbline 80
 00D0 4830              cpi R20,8
 00D2 88F3              brlo L28
 00D4                   .dbline -2
 00D4           L19:
 00D4 0E940000          xcall pop_gset2
 00D8                   .dbline 0 ; func end
 00D8 0895              ret
 00DA                   .dbsym r page 20 c
 00DA                   .dbsym r col 22 c
 00DA                   .dbend
 00DA                   .dbfunc e draw_bmp _draw_bmp fV
 00DA           ;        address -> R20
 00DA           ;              p -> R22
 00DA           ;         window -> R10
 00DA           ;              x -> R12
 00DA           ;            bmp -> R14,R15
 00DA           ;            mod -> y+16
 00DA           ;          width -> y+14
 00DA           ;            col -> y+12
 00DA           ;           page -> y+10
                        .even
 00DA           _draw_bmp::
 00DA 0E940000          xcall push_arg4
 00DE 0E940000          xcall push_gset5
 00E2 EA88              ldd R14,y+18
 00E4 FB88              ldd R15,y+19
 00E6                   .dbline -1
 00E6                   .dbline 97
 00E6           ; 
 00E6           ; 
 00E6           ; void led_menu_pro(void)
 00E6           ; {
 00E6           ;       max_item=menu_led->menu_count;
 00E6           ;       switch(keyval)
 00E6           ;       {
 00E6           ;               case 0: break;
 00E6           ;               case 1:                         //向上键.
 00E6           ;                       if(user_choosen==0)
 00E6           ;                       {                       
 00E6           ;                               user_choosen=max_item;
 00E6           ;                       }
 00E6                   .dbline 99
 00E6           ;                       refresh=1;
 00E6           ;                       user_choosen--;
 00E6 AA24              clr R10
 00E8                   .dbline 100
 00E8           ;                       break;
 00E8 6627              clr R22
 00EA                   .dbline 102
 00EA           ;               case 2:                         //向下键.
 00EA           ;                       user_choosen++;
 00EA CC84              ldd R12,y+12
 00EC 58C0              xjmp L40
 00EE           L37:
 00EE                   .dbline 103
 00EE           ;                       if(user_choosen==max_item)
 00EE                   .dbline 105
 00EE           ;                       {
 00EE           ;                               user_choosen=0;
 00EE 8FE7              ldi R24,127
 00F0 8C15              cp R24,R12
 00F2 08F4              brsh L41
 00F4                   .dbline 105
 00F4 5AC0              xjmp L36
 00F6           L41:
 00F6                   .dbline 106
 00F6           ;                       }
 00F6 8FE3              ldi R24,63
 00F8 8C15              cp R24,R12
 00FA 40F4              brsh L43
 00FC                   .dbline 107
 00FC           ;                       refresh=1;
 00FC                   .dbline 108
 00FC           ;                       break;
 00FC AA24              clr R10
 00FE A394              inc R10
 0100                   .dbline 109
 0100           ;               case 3:                         //确认键.                       
 0100 10E4              ldi R17,64
 0102 0C2D              mov R16,R12
 0104 0E940000          xcall mod8u
 0108 402F              mov R20,R16
 010A                   .dbline 110
 010A           ;                       if(menu_led[user_choosen].subs!=NULL)
 010A 02C0              xjmp L44
 010C           L43:
 010C                   .dbline 112
 010C           ;                       {
 010C           ;                               (*menu_led[user_choosen].subs)();       //执行函数.
 010C                   .dbline 113
 010C           ;                       }
 010C AA24              clr R10
 010E                   .dbline 114
 010E           ;                       if(menu_led[user_choosen].children_menus!=NULL)
 010E 4C2D              mov R20,R12
 0110                   .dbline 115
 0110           ;                       {
 0110           L44:
 0110                   .dbline 117
 0110           ;                               temp_choosen=user_choosen;
 0110           ;                               menu_led=menu_led[user_choosen].children_menus;
 0110 AA20              tst R10
 0112 19F0              breq L45
 0114                   .dbline 118
 0114           ;                               user_choosen=0;
 0114                   .dbline 119
 0114           ;                       }
 0114 C098              cbi 0x18,0
 0116                   .dbline 120
 0116           ;                       refresh=1;
 0116 C19A              sbi 0x18,1
 0118                   .dbline 121
 0118           ;                       break;
 0118 02C0              xjmp L46
 011A           L45:
 011A                   .dbline 124
 011A           ;               case 4:                         //返回键.
 011A           ;                       if(menu_led[user_choosen].parent_menus!=NULL)
 011A           ;                       {
 011A                   .dbline 125
 011A           ;                               menu_led=menu_led[user_choosen].parent_menus;
 011A C09A              sbi 0x18,0
 011C                   .dbline 126
 011C           ;                       }       
 011C C198              cbi 0x18,1
 011E                   .dbline 127
 011E           ;                       refresh=1;
 011E           L46:
 011E                   .dbline 128
 011E           ;                       break;
 011E 0A85              ldd R16,y+10
 0120 086B              ori R16,184
 0122 8EDF              xcall _send_comm
 0124                   .dbline 129
 0124           ;               default:
 0124 042F              mov R16,R20
 0126 0064              ori R16,64
 0128 8BDF              xcall _send_comm
 012A                   .dbline 131
 012A           ;                       break;                  
 012A           ;       }
 012A 0888              ldd R0,y+16
 012C 0020              tst R0
 012E 41F0              breq L47
 0130                   .dbline 131
 0130 E62F              mov R30,R22
 0132 FF27              clr R31
 0134 EE0D              add R30,R14
 0136 FF1D              adc R31,R15
 0138 0491              lpm R16,Z
 013A 0095              com R16
 013C 8EDF              xcall _send_data
 013E 06C0              xjmp L48
 0140           L47:
 0140                   .dbline 132
 0140           ;       if(refresh)                                     //是否需要刷新LCD标志位.
 0140 E62F              mov R30,R22
 0142 FF27              clr R31
 0144 EE0D              add R30,R14
 0146 FF1D              adc R31,R15
 0148 0491              lpm R16,Z
 014A 87DF              xcall _send_data
 014C           L48:
 014C                   .dbline 134
 014C           ;       {
 014C           ;               lcd_clr();
 014C AA20              tst R10
 014E 19F0              breq L49
 0150                   .dbline 135
 0150           ;               refresh=0;
 0150                   .dbline 136
 0150           ;       }
 0150 C098              cbi 0x18,0
 0152                   .dbline 137
 0152           ;       led_menu_show();        
 0152 C19A              sbi 0x18,1
 0154                   .dbline 138
 0154           ; }
 0154 02C0              xjmp L50
 0156           L49:
 0156                   .dbline 141
 0156           ; 
 0156           ; void led_menu_show(void)      
 0156           ; {
 0156                   .dbline 142
 0156           ;       uchar n;
 0156 C09A              sbi 0x18,0
 0158                   .dbline 143
 0158           ;       max_item=menu_led->menu_count;
 0158 C198              cbi 0x18,1
 015A                   .dbline 144
 015A           ;       if (max_item>=3)                                //菜单项为3则表示为主菜单.
 015A           L50:
 015A                   .dbline 146
 015A           ;       {                               
 015A           ;               for(n=0;n<3;n++)
 015A 0A85              ldd R16,y+10
 015C 086B              ori R16,184
 015E 0F5F              subi R16,255    ; addi 1
 0160 6FDF              xcall _send_comm
 0162                   .dbline 147
 0162           ;               {
 0162 042F              mov R16,R20
 0164 0064              ori R16,64
 0166 6CDF              xcall _send_comm
 0168                   .dbline 149
 0168           ; /*使同一数组元素图形宽度相同,即取最大的图形宽度,这里取96,在数组赋值时也要注意*/               
 0168           ;                       draw_bmp(n*2,20,96,0,menu_led[n].display);
 0168 0888              ldd R0,y+16
 016A 0020              tst R0
 016C 61F0              breq L51
 016E                   .dbline 149
 016E 2E84              ldd R2,y+14
 0170 3324              clr R3
 0172 E62F              mov R30,R22
 0174 FF27              clr R31
 0176 E20D              add R30,R2
 0178 F31D              adc R31,R3
 017A EE0D              add R30,R14
 017C FF1D              adc R31,R15
 017E 0491              lpm R16,Z
 0180 0095              com R16
 0182 6BDF              xcall _send_data
 0184 0AC0              xjmp L52
 0186           L51:
 0186                   .dbline 150
 0186           ;               }
 0186 2E84              ldd R2,y+14
 0188 3324              clr R3
 018A E62F              mov R30,R22
 018C FF27              clr R31
 018E E20D              add R30,R2
 0190 F31D              adc R31,R3
 0192 EE0D              add R30,R14
 0194 FF1D              adc R31,R15
 0196 0491              lpm R16,Z
 0198 60DF              xcall _send_data
 019A           L52:
 019A                   .dbline 152
 019A 6395              inc R22
 019C                   .dbline 153
 019C           L38:
 019C                   .dbline 102
 019C C394              inc R12
 019E           L40:
 019E                   .dbline 102
 019E 2C84              ldd R2,y+12
 01A0 0E84              ldd R0,y+14
 01A2 200C              add R2,R0
 01A4 C214              cp R12,R2
 01A6 08F4              brsh X3
 01A8 A2CF              xjmp L37
 01AA           X3:
 01AA                   .dbline -2
 01AA           L36:
 01AA 0E940000          xcall pop_gset5
 01AE 2496              adiw R28,4
 01B0                   .dbline 0 ; func end
 01B0 0895              ret
 01B2                   .dbsym r address 20 c
 01B2                   .dbsym r p 22 c
 01B2                   .dbsym r window 10 c
 01B2                   .dbsym r x 12 c
 01B2                   .dbsym r bmp 14 pkc
 01B2                   .dbsym l mod 16 c

⌨️ 快捷键说明

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