📄 训练项目七:键盘的使用.lis
字号:
00BA 9CD0 xcall _send
00BC 07E0 ldi R16,7
00BE 10E0 ldi R17,0
00C0 99D0 xcall _send
00C2 3FC0 xjmp L6
00C4 L16:
00C4 ; case 81:set_cs;send(0xc8);send(0x08);break;
00C4 C29A sbi 0x18,2
00C6 08EC ldi R16,200
00C8 10E0 ldi R17,0
00CA 94D0 xcall _send
00CC 08E0 ldi R16,8
00CE 10E0 ldi R17,0
00D0 91D0 xcall _send
00D2 37C0 xjmp L6
00D4 L17:
00D4 ; case 82:set_cs;send(0xc8);send(0x09);break;
00D4 C29A sbi 0x18,2
00D6 08EC ldi R16,200
00D8 10E0 ldi R17,0
00DA 8CD0 xcall _send
00DC 09E0 ldi R16,9
00DE 10E0 ldi R17,0
00E0 89D0 xcall _send
00E2 2FC0 xjmp L6
00E4 L18:
00E4 ; case 83:set_cs;send(0xc8);send(0x0A);break;
00E4 C29A sbi 0x18,2
00E6 08EC ldi R16,200
00E8 10E0 ldi R17,0
00EA 84D0 xcall _send
00EC 0AE0 ldi R16,10
00EE 10E0 ldi R17,0
00F0 81D0 xcall _send
00F2 27C0 xjmp L6
00F4 L19:
00F4 ; case 84:set_cs;send(0xc8);send(0x0B);break;
00F4 C29A sbi 0x18,2
00F6 08EC ldi R16,200
00F8 10E0 ldi R17,0
00FA 7CD0 xcall _send
00FC 0BE0 ldi R16,11
00FE 10E0 ldi R17,0
0100 79D0 xcall _send
0102 1FC0 xjmp L6
0104 L20:
0104 ; case 89:set_cs;send(0xc8);send(0x0C);break;
0104 C29A sbi 0x18,2
0106 08EC ldi R16,200
0108 10E0 ldi R17,0
010A 74D0 xcall _send
010C 0CE0 ldi R16,12
010E 10E0 ldi R17,0
0110 71D0 xcall _send
0112 17C0 xjmp L6
0114 L21:
0114 ; case 90:set_cs;send(0xc8);send(0x0D);break;
0114 C29A sbi 0x18,2
0116 08EC ldi R16,200
0118 10E0 ldi R17,0
011A 6CD0 xcall _send
011C 0DE0 ldi R16,13
011E 10E0 ldi R17,0
0120 69D0 xcall _send
0122 0FC0 xjmp L6
0124 L22:
0124 ; case 91:set_cs;send(0xc8);send(0x0E);break;
0124 C29A sbi 0x18,2
0126 08EC ldi R16,200
0128 10E0 ldi R17,0
012A 64D0 xcall _send
012C 0EE0 ldi R16,14
012E 10E0 ldi R17,0
0130 61D0 xcall _send
0132 07C0 xjmp L6
0134 L23:
0134 ; case 92:set_cs;send(0xc8);send(0x0F);break;
0134 C29A sbi 0x18,2
0136 08EC ldi R16,200
0138 10E0 ldi R17,0
013A 5CD0 xcall _send
013C 0FE0 ldi R16,15
013E 10E0 ldi R17,0
0140 59D0 xcall _send
0142 ; default:break;
0142 L6:
0142 ;
0142 ; }
0142 ; }
0142 L3:
0142 65CF xjmp L2
0144 X2:
0144 L1:
0144 .dbline 0 ; func end
0144 0895 ret
.even
0146 _key_check::
0146 0A92 st -y,R0
0148 1A92 st -y,R1
014A 2A92 st -y,R2
014C 3A92 st -y,R3
014E 4A92 st -y,R4
0150 5A92 st -y,R5
0152 6A92 st -y,R6
0154 7A92 st -y,R7
0156 8A92 st -y,R8
0158 9A92 st -y,R9
015A 0A93 st -y,R16
015C 1A93 st -y,R17
015E 2A93 st -y,R18
0160 3A93 st -y,R19
0162 8A93 st -y,R24
0164 9A93 st -y,R25
0166 AA93 st -y,R26
0168 BA93 st -y,R27
016A EA93 st -y,R30
016C FA93 st -y,R31
016E 0FB6 in R0,0x3f
0170 0A92 st -y,R0
0172 ; }
0172 ; /****************************************************************************
0172 ; ** Function Name: key_check
0172 ; ** Descriptions: read the key
0172 ; ** Input Parameters: K
0172 ; ** Output parameters: void
0172 ; ** Returned Value: void
0172 ; **---------------------------------------------------------------------------
0172 ; ****************************************************************************/
0172 ;
0172 ; void key_check()
0172 ; {
0172 ; n=1;
0172 81E0 ldi R24,1
0174 90E0 ldi R25,0
0176 90930200 sts _n+1,R25
017A 80930100 sts _n,R24
017E ; send(0x15); /* 读键盘指令 */
017E 05E1 ldi R16,21
0180 10E0 ldi R17,0
0182 38D0 xcall _send
0184 ; k=receive()+61;
0184 51D0 xcall _receive
0186 C801 movw R24,R16
0188 CD96 adiw R24,61
018A 80930000 sts _k,R24
018E ; set_cs;
018E C29A sbi 0x18,2
0190 L25:
0190 .dbline 0 ; func end
0190 0990 ld R0,y+
0192 0FBE out 0x3f,R0
0194 F991 ld R31,y+
0196 E991 ld R30,y+
0198 B991 ld R27,y+
019A A991 ld R26,y+
019C 9991 ld R25,y+
019E 8991 ld R24,y+
01A0 3991 ld R19,y+
01A2 2991 ld R18,y+
01A4 1991 ld R17,y+
01A6 0991 ld R16,y+
01A8 9990 ld R9,y+
01AA 8990 ld R8,y+
01AC 7990 ld R7,y+
01AE 6990 ld R6,y+
01B0 5990 ld R5,y+
01B2 4990 ld R4,y+
01B4 3990 ld R3,y+
01B6 2990 ld R2,y+
01B8 1990 ld R1,y+
01BA 0990 ld R0,y+
01BC 1895 reti
.even
01BE _led_init::
01BE ; }
01BE ; /****************************************************************************
01BE ; ** Function Name: led_init
01BE ; ** Descriptions:
01BE ; ** Input Parameters: uiTime
01BE ; ** Output parameters: void
01BE ; ** Returned Value: void
01BE ; **---------------------------------------------------------------------------
01BE ; ****************************************************************************/
01BE ; void led_init (void)
01BE ; {
01BE ; DDRB|= 0x0C; /* PB0和PB1为输入 */
01BE 87B3 in R24,0x17
01C0 8C60 ori R24,12
01C2 87BB out 0x17,R24
01C4 ; set_cs;
01C4 C29A sbi 0x18,2
01C6 ; send (0xA4);
01C6 04EA ldi R16,164
01C8 10E0 ldi R17,0
01CA 14D0 xcall _send
01CC L26:
01CC .dbline 0 ; func end
01CC 0895 ret
.even
01CE _init_7279::
01CE ; }
01CE ;
01CE ; /****************************************************************************
01CE ; ** Function Name: init_7279
01CE ; ** Descriptions: initialization
01CE ; ** Input Parameters: uiTime
01CE ; ** Output parameters: void
01CE ; ** Returned Value: void
01CE ; **---------------------------------------------------------------------------
01CE ; ****************************************************************************/
01CE ; void init_7279()
01CE ; {
01CE ; SREG|=0x80; /* 状态寄存器,全局中断允许 */
01CE 7894 bset 7
01D0 ; EIMSK|=0x08; /* 外部中断屏蔽寄存器 */
01D0 89B7 in R24,0x39
01D2 8860 ori R24,8
01D4 89BF out 0x39,R24
01D6 ; EICRA&=0x3f; /* 外部中断控制寄存器A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -