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

📄 menu.lis

📁 做点阵式lcd多级菜单开发的一个例子 可以帮助初学者了解 交互式界面简单设计的部分
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 014C           ; 
 014C           ;               else
 014C           ;               {
 014C                   .dbline 142
 014C           ;                       L_off;
 014C C09A              sbi 0x18,0
 014E                   .dbline 143
 014E           ;                       R_on;
 014E C198              cbi 0x18,1
 0150                   .dbline 144
 0150           ;               }
 0150           L50:
 0150                   .dbline 146
 0150           ; 
 0150           ;               send_comm((page_addr_set | page)+1);    //页地址加一.
 0150 0A85              ldd R16,y+10
 0152 086B              ori R16,184
 0154 0F5F              subi R16,255    ; addi 1
 0156 74DF              xcall _send_comm
 0158                   .dbline 147
 0158           ;               send_comm(col_addr_set | address);              //列地址不变.
 0158 042F              mov R16,R20
 015A 0064              ori R16,64
 015C 71DF              xcall _send_comm
 015E                   .dbline 149
 015E           ; 
 015E           ;               if (mod) send_data(~bmp[p+width]);
 015E 0888              ldd R0,y+16
 0160 0020              tst R0
 0162 61F0              breq L51
 0164           X12:
 0164                   .dbline 149
 0164 2E84              ldd R2,y+14
 0166 3324              clr R3
 0168 EC2D              mov R30,R12
 016A FF27              clr R31
 016C E20D              add R30,R2
 016E F31D              adc R31,R3
 0170 EE0D              add R30,R14
 0172 FF1D              adc R31,R15
 0174 0491              lpm R16,Z
 0176 0095              com R16
 0178 6EDF              xcall _send_data
 017A 0AC0              xjmp L52
 017C           L51:
 017C                   .dbline 150
 017C           ;               else send_data(bmp[p+width]);                           //第二排数据.
 017C 2E84              ldd R2,y+14
 017E 3324              clr R3
 0180 EC2D              mov R30,R12
 0182 FF27              clr R31
 0184 E20D              add R30,R2
 0186 F31D              adc R31,R3
 0188 EE0D              add R30,R14
 018A FF1D              adc R31,R15
 018C 0491              lpm R16,Z
 018E 63DF              xcall _send_data
 0190           L52:
 0190                   .dbline 152
 0190           ; 
 0190           ;               p++;
 0190 C394              inc R12
 0192                   .dbline 153
 0192           ;       }
 0192           L38:
 0192                   .dbline 102
 0192 A394              inc R10
 0194           L40:
 0194                   .dbline 102
 0194 2C84              ldd R2,y+12
 0196 0E84              ldd R0,y+14
 0198 200C              add R2,R0
 019A A214              cp R10,R2
 019C 08F4              brsh X14
 019E A3CF              xjmp L37
 01A0           X14:
 01A0           X13:
 01A0                   .dbline -2
 01A0           L36:
 01A0                   .dbline 0 ; func end
 01A0 0E940000          xcall pop_xgsetF0FC
 01A4 2496              adiw R28,4
 01A6 0895              ret
 01A8                   .dbsym r address 20 c
 01A8                   .dbsym r p 12 c
 01A8                   .dbsym r window 22 c
 01A8                   .dbsym r x 10 c
 01A8                   .dbsym r bmp 14 pkc
 01A8                   .dbsym l mod 16 c
 01A8                   .dbsym l width 14 c
 01A8                   .dbsym l col 12 c
 01A8                   .dbsym l page 10 c
 01A8                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\diy\LedMenu\lcd_12864.h
 0000           L54:
 0000                   .blkb 1
                        .area data(ram, con, rel)
 0006                   .dbfile F:\diy\LedMenu\lcd_12864.h
 0006           L55:
 0006                   .blkb 1
                        .area idata
 0006 00                .byte 0
                        .area data(ram, con, rel)
 0007                   .dbfile F:\diy\LedMenu\lcd_12864.h
 0007           L56:
 0007                   .blkb 1
                        .area idata
 0007 00                .byte 0
                        .area data(ram, con, rel)
 0008                   .dbfile F:\diy\LedMenu\lcd_12864.h
 0008           L57:
 0008                   .blkb 1
                        .area idata
 0008 00                .byte 0
                        .area data(ram, con, rel)
 0009                   .dbfile F:\diy\LedMenu\lcd_12864.h
                        .area text(rom, con, rel)
 01A8                   .dbfile F:\diy\LedMenu\lcd_12864.h
 01A8                   .dbfile F:\diy\LedMenu\get_key.h
 01A8                   .dbfunc e get_key _get_key fc
 01A8                   .dbsym s keylock L57 c
 01A8                   .dbsym s havekey L56 c
 01A8                   .dbsym s keytime L55 c
 01A8                   .dbsym s lastkcode L54 c
 01A8           ;           pass -> R16
 01A8           ;       kcodebuf -> R18
                        .even
 01A8           _get_key::
 01A8                   .dbline -1
 01A8                   .dbline 8
 01A8           ; /**********************************************************************************/
 01A8           ; //写一个八个按键的程序.最后的两个按键为方向键,可以连续调整.
 01A8           ; #define nullkey 0
 01A8           ; #define pr_timekey 9
 01A8           ; #define nusekey 10
 01A8           ; 
 01A8           ; uchar get_key(void)
 01A8           ; {
 01A8                   .dbline 14
 01A8           ;       uchar pass,kcodebuf;    
 01A8           ;       static uchar lastkcode,keytime=0;       //定义为静态变量,外部不可见,但需要常驻内存.
 01A8           ;       static uchar havekey=0;
 01A8           ;       static uchar keylock=0;
 01A8           ;               
 01A8           ;       kcodebuf=PIND & 0xff;
 01A8 20B3              in R18,0x10
 01AA 2F7F              andi R18,255
 01AC                   .dbline 15
 01AC           ;       keytime++;
 01AC 80910600          lds R24,L55
 01B0 8F5F              subi R24,255    ; addi 1
 01B2 80930600          sts L55,R24
 01B6                   .dbline 16
 01B6           ;       if (kcodebuf!=lastkcode) keytime=0;
 01B6 20900000          lds R2,L54
 01BA 2215              cp R18,R2
 01BC 19F0              breq L58
 01BE           X15:
 01BE                   .dbline 16
 01BE 2224              clr R2
 01C0 20920600          sts L55,R2
 01C4           L58:
 01C4                   .dbline 17
 01C4           ;       if (kcodebuf==0xff)
 01C4 2F3F              cpi R18,255
 01C6 49F4              brne L60
 01C8           X16:
 01C8                   .dbline 18
 01C8           ;       {
 01C8                   .dbline 19
 01C8           ;               havekey=0;
 01C8 2224              clr R2
 01CA 20920700          sts L56,R2
 01CE                   .dbline 20
 01CE           ;               keylock=0;
 01CE 20920800          sts L57,R2
 01D2                   .dbline 21
 01D2           ;               keytime=0;
 01D2 20920600          sts L55,R2
 01D6                   .dbline 22
 01D6           ;               pass=0;
 01D6 0027              clr R16
 01D8                   .dbline 23
 01D8           ;       }
 01D8 66C0              xjmp L61
 01DA           L60:
 01DA                   .dbline 24
 01DA           ;       else if (kcodebuf==0x7f)
 01DA 2F37              cpi R18,127
 01DC A1F4              brne L62
 01DE           X17:
 01DE                   .dbline 25
 01DE           ;       {
 01DE                   .dbline 26
 01DE           ;               keylock=1;
 01DE 81E0              ldi R24,1
 01E0 80930800          sts L57,R24
 01E4                   .dbline 27
 01E4           ;               if (keytime==0) pass=7;
 01E4 20900600          lds R2,L55
 01E8 2220              tst R2
 01EA 11F4              brne L64
 01EC           X18:
 01EC                   .dbline 27
 01EC 07E0              ldi R16,7
 01EE 5BC0              xjmp L63
 01F0           L64:
 01F0                   .dbline 29
 01F0           ;               else
 01F0           ;               {
 01F0                   .dbline 30
 01F0           ;                       if (keytime==100)
 01F0 80910600          lds R24,L55
 01F4 8436              cpi R24,100
 01F6 29F4              brne L66
 01F8           X19:
 01F8                   .dbline 31
 01F8           ;                       {
 01F8                   .dbline 32
 01F8           ;                               pass=7;
 01F8 07E0              ldi R16,7
 01FA                   .dbline 33
 01FA           ;                               keytime=80;
 01FA 80E5              ldi R24,80
 01FC 80930600          sts L55,R24
 0200                   .dbline 34
 0200           ;                       }
 0200 52C0              xjmp L63
 0202           L66:
 0202                   .dbline 35
 0202           ;                       else pass=pr_timekey;
 0202 09E0              ldi R16,9
 0204                   .dbline 36
 0204           ;               }
 0204                   .dbline 37
 0204           ;       }
 0204 50C0              xjmp L63
 0206           L62:
 0206                   .dbline 38
 0206           ;       else if (kcodebuf==0xbf)
 0206 2F3B              cpi R18,191
 0208 A1F4              brne L68
 020A           X20:
 020A                   .dbline 39
 020A           ;       {
 020A                   .dbline 40
 020A           ;               keylock=1;
 020A 81E0              ldi R24,1
 020C 80930800          sts L57,R24
 0210                   .dbline 41
 0210           ;               if (keytime==0) pass=8;
 0210 20900600          lds R2,L55
 0214 2220              tst R2
 0216 11F4              brne L70
 0218           X21:
 0218                   .dbline 41
 0218 08E0              ldi R16,8
 021A 45C0              xjmp L69
 021C           L70:
 021C                   .dbline 42
 021C           ;               else if (keytime==100)
 021C 80910600          lds R24,L55
 0220 8436              cpi R24,100
 0222 29F4              brne L72
 0224           X22:
 0224                   .dbline 43
 0224           ;               {
 0224                   .dbline 44
 0224           ;                       pass=8;
 0224 08E0              ldi R16,8
 0226                   .dbline 45
 0226           ;                       keytime=80;
 0226 80E5              ldi R24,80
 0228 80930600          sts L55,R24
 022C                   .dbline 46
 022C           ;               }
 022C 3CC0              xjmp L69
 022E           L72:
 022E                   .dbline 47
 022E           ;               else pass=pr_timekey;
 022E 09E0              ldi R16,9
 0230                   .dbline 48
 0230           ;       }
 0230 3AC0              xjmp L69
 0232           L68:
 0232                   .dbline 50
 0232           ;       
 0232           ;       else if (havekey==0)
 0232 20900700          lds R2,L56
 0236 2220              tst R2
 0238 29F4              brne L74
 023A           X23:
 023A                   .dbline 51
 023A           ;       {
 023A                   .dbline 52
 023A           ;               havekey=1;
 023A 81E0              ldi R24,1
 023C 80930700          sts L56,R24
 0240                   .dbline 53
 0240           ;               pass=nusekey;
 0240 0AE0              ldi R16,10
 0242                   .dbline 54
 0242           ;       }
 0242 31C0              xjmp L75
 0244           L74:
 0244                   .dbline 56
 0244           ;       
 0244           ;       else if (keylock==1) pass=nusekey;
 0244 80910800          lds R24,L57
 0248 8130              cpi R24,1
 024A 11F4              brne L76
 024C           X24:
 024C                   .dbline 56
 024C 0AE0              ldi R16,10
 024E 2BC0              xjmp L77
 0250           L76:
 0250                   .dbline 58
 0250           ;       
 0250           ;       else if (kcodebuf==0xdf)
 0250 2F3D              cpi R18,223
 0252 29F4              brne L78
 0254           X25:
 0254                   .dbline 59
 0254           ;       {
 0254                   .dbline 60
 0254           ;               keylock=1;
 0254 81E0              ldi R24,1
 0256 80930800          sts L57,R24
 025A                   .dbline 61
 025A           ;               pass=6;
 025A 06E0              ldi R16,6
 025C                   .dbline 62
 025C           ;       }
 025C 24C0              xjmp L79
 025E           L78:
 025E                   .

⌨️ 快捷键说明

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