📄 menu.lis
字号:
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 + -