📄 getkey.lis
字号:
00F8 09F4 brne X5
00FA 49C0 xjmp L27
00FC X5:
00FC .dbline 76
00FC ; {
00FC .dbline 77
00FC ; delay_nms(15);//延时消抖动
00FC 0FE0 ldi R16,15
00FE 10E0 ldi R17,0
0100 6BD0 xcall _delay_nms
0102 .dbline 78
0102 ; tem=key_port_pin&0xf0;//再读键盘
0102 80B3 in R24,0x10
0104 807F andi R24,240
0106 A82E mov R10,R24
0108 .dbline 79
0108 ; if(tem!=0xf0)//确认按键按下
0108 803F cpi R24,240
010A 09F4 brne X6
010C 40C0 xjmp L29
010E X6:
010E .dbline 80
010E ; {
010E .dbline 81
010E ; tem&=0xf0;
010E 807F andi R24,240
0110 A82E mov R10,R24
0112 .dbline 82
0112 ; switch(tem)//计算键值
0112 482F mov R20,R24
0114 5527 clr R21
0116 403B cpi R20,176
0118 E0E0 ldi R30,0
011A 5E07 cpc R21,R30
011C F9F0 breq L35
011E 80EB ldi R24,176
0120 90E0 ldi R25,0
0122 8417 cp R24,R20
0124 9507 cpc R25,R21
0126 2CF0 brlt L39
0128 L38:
0128 4037 cpi R20,112
012A E0E0 ldi R30,0
012C 5E07 cpc R21,R30
012E 71F0 breq L34
0130 2CC0 xjmp L32
0132 L39:
0132 403D cpi R20,208
0134 E0E0 ldi R30,0
0136 5E07 cpc R21,R30
0138 C9F0 breq L36
013A 403D cpi R20,208
013C E0E0 ldi R30,0
013E 5E07 cpc R21,R30
0140 24F1 brlt L32
0142 L40:
0142 403E cpi R20,224
0144 E0E0 ldi R30,0
0146 5E07 cpc R21,R30
0148 C9F0 breq L37
014A 1FC0 xjmp L32
014C X4:
014C .dbline 83
014C ; {
014C L34:
014C .dbline 84
014C ; case 0x70:tem=15-(3-i)*4;break;//这里可以改tem=11-(2-i)*4,不过一改4*4键就不适用了^___^
014C 13E0 ldi R17,3
014E 161B sub R17,R22
0150 04E0 ldi R16,4
0152 0102 muls R16,R17
0154 8FE0 ldi R24,15
0156 A82E mov R10,R24
0158 A018 sub R10,R0
015A .dbline 84
015A 17C0 xjmp L32
015C L35:
015C .dbline 85
015C ; case 0xb0:tem=14-(3-i)*4;break;
015C 13E0 ldi R17,3
015E 161B sub R17,R22
0160 04E0 ldi R16,4
0162 0102 muls R16,R17
0164 8EE0 ldi R24,14
0166 A82E mov R10,R24
0168 A018 sub R10,R0
016A .dbline 85
016A 0FC0 xjmp L32
016C L36:
016C .dbline 86
016C ; case 0xd0:tem=13-(3-i)*4;break;
016C 13E0 ldi R17,3
016E 161B sub R17,R22
0170 04E0 ldi R16,4
0172 0102 muls R16,R17
0174 8DE0 ldi R24,13
0176 A82E mov R10,R24
0178 A018 sub R10,R0
017A .dbline 86
017A 07C0 xjmp L32
017C L37:
017C .dbline 87
017C ; case 0xe0:tem=12-(3-i)*4;break;
017C 13E0 ldi R17,3
017E 161B sub R17,R22
0180 04E0 ldi R16,4
0182 0102 muls R16,R17
0184 8CE0 ldi R24,12
0186 A82E mov R10,R24
0188 A018 sub R10,R0
018A .dbline 87
018A .dbline 88
018A ; default:break;
018A L32:
018A .dbline 90
018A ; }
018A ; return tem;//返回0~11号键
018A 0A2D mov R16,R10
018C 07C0 xjmp L22
018E L29:
018E .dbline 92
018E ; }
018E ; }
018E L27:
018E .dbline 93
018E 8FEF ldi R24,255
0190 82BB out 0x12,R24
0192 .dbline 94
0192 L24:
0192 .dbline 70
0192 6395 inc R22
0194 L26:
0194 .dbline 70
0194 6330 cpi R22,3
0196 08F4 brsh X7
0198 A1CF xjmp L23
019A X7:
019A .dbline 95
019A ; key_port=0xff;
019A ; }
019A ; return 0xff;//无按键按下则返回0xff
019A 0FEF ldi R16,255
019C .dbline -2
019C L22:
019C 0E940000 xcall pop_gset3
01A0 .dbline 0 ; func end
01A0 0895 ret
01A2 .dbsym r i 22 c
01A2 .dbsym r tem 10 c
01A2 .dbend
01A2 .dbfunc e delay_1us _delay_1us fV
.even
01A2 _delay_1us::
01A2 .dbline -1
01A2 .dbline 101
01A2 ; }
01A2 ;
01A2 ; /*--------------------------------------------延时函数------------------------------------*/
01A2 ; //1us延时函数
01A2 ; void delay_1us(void)
01A2 ; {
01A2 .dbline 102
01A2 ; NOP();
01A2 0000 nop
01A4 .dbline -2
01A4 L41:
01A4 .dbline 0 ; func end
01A4 0895 ret
01A6 .dbend
01A6 .dbfunc e delay_nus _delay_nus fV
01A6 ; i -> R20,R21
01A6 ; n -> R22,R23
.even
01A6 _delay_nus::
01A6 0E940000 xcall push_gset2
01AA B801 movw R22,R16
01AC .dbline -1
01AC .dbline 107
01AC ; }
01AC ;
01AC ; //n us 延时函数
01AC ; void delay_nus(unsigned int n)
01AC ; {
01AC .dbline 109
01AC 4427 clr R20
01AE 5527 clr R21
01B0 03C0 xjmp L46
01B2 L43:
01B2 .dbline 109
01B2 F7DF xcall _delay_1us
01B4 L44:
01B4 .dbline 109
01B4 4F5F subi R20,255 ; offset = 1
01B6 5F4F sbci R21,255
01B8 L46:
01B8 .dbline 109
01B8 ; unsigned int i;
01B8 ; for(i=0;i<n;i++)delay_1us();
01B8 4617 cp R20,R22
01BA 5707 cpc R21,R23
01BC D0F3 brlo L43
01BE .dbline -2
01BE L42:
01BE 0E940000 xcall pop_gset2
01C2 .dbline 0 ; func end
01C2 0895 ret
01C4 .dbsym r i 20 i
01C4 .dbsym r n 22 i
01C4 .dbend
01C4 .dbfunc e delay_1ms _delay_1ms fV
01C4 ; i -> R16,R17
.even
01C4 _delay_1ms::
01C4 .dbline -1
01C4 .dbline 114
01C4 ; }
01C4 ;
01C4 ; //1ms延时函数
01C4 ; void delay_1ms(void)
01C4 ; {
01C4 .dbline 116
01C4 0027 clr R16
01C6 1127 clr R17
01C8 02C0 xjmp L51
01CA L48:
01CA .dbline 116
01CA L49:
01CA .dbline 116
01CA 0F5F subi R16,255 ; offset = 1
01CC 1F4F sbci R17,255
01CE L51:
01CE .dbline 116
01CE ; unsigned int i;
01CE ; for(i=0;i<600;i++);
01CE 0835 cpi R16,88
01D0 E2E0 ldi R30,2
01D2 1E07 cpc R17,R30
01D4 D0F3 brlo L48
01D6 .dbline -2
01D6 L47:
01D6 .dbline 0 ; func end
01D6 0895 ret
01D8 .dbsym r i 16 i
01D8 .dbend
01D8 .dbfunc e delay_nms _delay_nms fV
01D8 ; i -> R20,R21
01D8 ; n -> R22,R23
.even
01D8 _delay_nms::
01D8 0E940000 xcall push_gset2
01DC B801 movw R22,R16
01DE .dbline -1
01DE .dbline 121
01DE ; }
01DE ;
01DE ; //n ms延时函数
01DE ; void delay_nms(unsigned int n)
01DE ; {
01DE .dbline 123
01DE 4427 clr R20
01E0 5527 clr R21
01E2 03C0 xjmp L56
01E4 L53:
01E4 .dbline 123
01E4 EFDF xcall _delay_1ms
01E6 L54:
01E6 .dbline 123
01E6 4F5F subi R20,255 ; offset = 1
01E8 5F4F sbci R21,255
01EA L56:
01EA .dbline 123
01EA ; unsigned int i;
01EA ; for(i=0;i<n;i++)delay_1ms();
01EA 4617 cp R20,R22
01EC 5707 cpc R21,R23
01EE D0F3 brlo L53
01F0 .dbline -2
01F0 L52:
01F0 0E940000 xcall pop_gset2
01F4 .dbline 0 ; func end
01F4 0895 ret
01F6 .dbsym r i 20 i
01F6 .dbsym r n 22 i
01F6 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -