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

📄 键盘.lst

📁 本文为4*4键盘扫描程序
💻 LST
字号:
__start:
__text_start:
      42 E5CF      LDI	R28,0x5F
      43 E0D4      LDI	R29,4
      44 BFCD      OUT	0x3D,R28
      45 BFDE      OUT	0x3E,R29
      46 51C0      SUBI	R28,0x10
      47 40D0      SBCI	R29,0
      48 EA0A      LDI	R16,0xAA
      49 8308      STD	Y+0,R16
      4A 2400      CLR	R0
      4B E7E0      LDI	R30,0x70
      4C E0F0      LDI	R31,0
      4D E010      LDI	R17,0
      4E 37E0      CPI	R30,0x70
      4F 07F1      CPC	R31,R17
      50 F011      BEQ	0x0053
      51 9201      ST	R0,Z+
      52 CFFB      RJMP	0x004E
      53 8300      STD	Z+0,R16
      54 E7E4      LDI	R30,0x74
      55 E0F0      LDI	R31,0
      56 E6A0      LDI	R26,0x60
      57 E0B0      LDI	R27,0
      58 E010      LDI	R17,0
      59 E000      LDI	R16,0
      5A BF0B      OUT	0x3B,R16
      5B 38E4      CPI	R30,0x84
      5C 07F1      CPC	R31,R17
      5D F021      BEQ	0x0062
      5E 95C8      LPM
      5F 9631      ADIW	R30,1
      60 920D      ST	R0,X+
      61 CFF9      RJMP	0x005B
      62 940E 00B0 CALL	_main
_exit:
      64 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  x                    --> R16
      65 940E 0114 CALL	push_xgsetF000
FILE: D:\学习工具\单片机程序\键盘\键盘.c
(0001) //ICC-AVR application builder : 2008-10-16 19:41:41
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) unsigned char A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x79,0x71};
(0008) 
(0009) void delay(unsigned int x)
(0010) {
(0011) int i,j;
(0012) for(i=0;i<x;i++)
      67 2744      CLR	R20
      68 2755      CLR	R21
      69 C00A      RJMP	0x0074
(0013) for(j=0;j<8000;j++)
      6A 2766      CLR	R22
      6B 2777      CLR	R23
      6C 5F6F      SUBI	R22,0xFF
      6D 4F7F      SBCI	R23,0xFF
      6E 3460      CPI	R22,0x40
      6F E1EF      LDI	R30,0x1F
      70 077E      CPC	R23,R30
      71 F3D4      BLT	0x006C
      72 5F4F      SUBI	R20,0xFF
      73 4F5F      SBCI	R21,0xFF
      74 1740      CP	R20,R16
      75 0751      CPC	R21,R17
      76 F398      BCS	0x006A
      77 940C 0119 JMP	pop_xgsetF000
_read_key:
  l                    --> Y,+1
  k                    --> Y,+1
  key_value            --> R10
  j                    --> R22
  i                    --> R20
      79 940E 011E CALL	push_xgsetF00C
      7B 2F40      MOV	R20,R16
(0014) ;
(0015) }
(0016) 
(0017) unsigned char read_key(unsigned char i)
(0018) {
(0019) unsigned char j,k,l,key_value=0;
      7C 24AA      CLR	R10
(0020) PORTD=0x0F;
      7D E08F      LDI	R24,0xF
      7E BB82      OUT	0x12,R24
(0021) //DDRD=0xF0;
(0022) if((PIND&0X0f)==0x0f) return 0xff;
      7F B380      IN	R24,0x10
      80 708F      ANDI	R24,0xF
      81 308F      CPI	R24,0xF
      82 F411      BNE	0x0085
      83 EF0F      LDI	R16,0xFF
      84 C029      RJMP	0x00AE
(0023) else
(0024) {delay(5);
      85 E005      LDI	R16,5
      86 E010      LDI	R17,0
      87 DFDD      RCALL	_delay
(0025) if((PIND&0x0f)==0x0f) return 0xff;
      88 B380      IN	R24,0x10
      89 708F      ANDI	R24,0xF
      8A 308F      CPI	R24,0xF
      8B F411      BNE	0x008E
      8C EF0F      LDI	R16,0xFF
      8D C020      RJMP	0x00AE
(0026) else
(0027)       for(i=4;i<8;i++)
      8E E044      LDI	R20,4
      8F C01B      RJMP	0x00AB
(0028) 	  {   
(0029) 	PORTD=~(1<<i)| 0x0f;
      90 E001      LDI	R16,1
      91 2F14      MOV	R17,R20
      92 940E 012C CALL	lsl8
      94 2F80      MOV	R24,R16
      95 9580      COM	R24
      96 608F      ORI	R24,0xF
      97 BB82      OUT	0x12,R24
(0030) 	for(j=0;j<4;j++)
      98 2766      CLR	R22
      99 C00E      RJMP	0x00A8
(0031) 		{
(0032) 	 	if((PIND&(1<<j))==0)
      9A E001      LDI	R16,1
      9B 2F16      MOV	R17,R22
      9C 940E 012C CALL	lsl8
      9E B220      IN	R2,0x10
      9F 2220      AND	R2,R16
      A0 F431      BNE	0x00A7
(0033) 		key_value=(i-4)*4+j;
      A1 2F84      MOV	R24,R20
      A2 5084      SUBI	R24,4
      A3 2EA8      MOV	R10,R24
      A4 0CAA      LSL	R10
      A5 0CAA      LSL	R10
      A6 0EA6      ADD	R10,R22
      A7 9563      INC	R22
      A8 3064      CPI	R22,4
      A9 F380      BCS	0x009A
      AA 9543      INC	R20
      AB 3048      CPI	R20,0x8
      AC F318      BCS	0x0090
(0034) 		}
(0035)     }
(0036)    return key_value;
      AD 2D0A      MOV	R16,R10
      AE 940C 0125 JMP	pop_xgsetF00C
(0037)   }
(0038) }
(0039) void main()
(0040) {
(0041) unsigned char m;
(0042) PORTA=0xFF;
_main:
  m                    --> R10
      B0 EF8F      LDI	R24,0xFF
      B1 BB8B      OUT	0x1B,R24
(0043) DDRA=0xFF;
      B2 BB8A      OUT	0x1A,R24
(0044) PORTD=0x0F;
      B3 E08F      LDI	R24,0xF
      B4 BB82      OUT	0x12,R24
(0045) DDRD=0xF0;
      B5 EF80      LDI	R24,0xF0
      B6 BB81      OUT	0x11,R24
      B7 C05A      RJMP	0x0112
(0046) while(1)
(0047) {
(0048) m=read_key(4);
      B8 E004      LDI	R16,4
      B9 DFBF      RCALL	_read_key
      BA 2EA0      MOV	R10,R16
(0049) switch(m)
      BB 2D4A      MOV	R20,R10
      BC 2755      CLR	R21
      BD 3040      CPI	R20,0
      BE E0E0      LDI	R30,0
      BF 075E      CPC	R21,R30
      C0 F40C      BGE	0x00C2
      C1 C050      RJMP	0x0112
      C2 E08F      LDI	R24,0xF
      C3 E090      LDI	R25,0
      C4 1784      CP	R24,R20
      C5 0795      CPC	R25,R21
      C6 F40C      BGE	0x00C8
      C7 C04A      RJMP	0x0112
      C8 E584      LDI	R24,0x54
      C9 E090      LDI	R25,0
      CA 01FA      MOVW	R30,R20
      CB 0FEE      LSL	R30
      CC 1FFF      ROL	R31
      CD 0FE8      ADD	R30,R24
      CE 1FF9      ADC	R31,R25
      CF 9025      LPM	R2,Z+
      D0 9034      LPM	R3,0(Z)
      D1 01F1      MOVW	R30,R2
      D2 9409      IJMP
(0050) {
(0051)  
(0052)  case 0:PORTA=A[0];break;
      D3 9020 0060 LDS	R2,A
      D5 BA2B      OUT	0x1B,R2
      D6 C03B      RJMP	0x0112
(0053)  case 1:PORTA=A[1];break;
      D7 9020 0061 LDS	R2,A+1
      D9 BA2B      OUT	0x1B,R2
      DA C037      RJMP	0x0112
(0054)  case 2:PORTA=A[2];break;
      DB 9020 0062 LDS	R2,A+2
      DD BA2B      OUT	0x1B,R2
      DE C033      RJMP	0x0112
(0055)  case 3:PORTA=A[3];break;
      DF 9020 0063 LDS	R2,A+3
      E1 BA2B      OUT	0x1B,R2
      E2 C02F      RJMP	0x0112
(0056)  case 4:PORTA=A[4];break;
      E3 9020 0064 LDS	R2,0x0064
      E5 BA2B      OUT	0x1B,R2
      E6 C02B      RJMP	0x0112
(0057)  case 5:PORTA=A[5];break;
      E7 9020 0065 LDS	R2,0x0065
      E9 BA2B      OUT	0x1B,R2
      EA C027      RJMP	0x0112
(0058)  case 6:PORTA=A[6];break;
      EB 9020 0066 LDS	R2,0x0066
      ED BA2B      OUT	0x1B,R2
      EE C023      RJMP	0x0112
(0059)  case 7:PORTA=A[7];break;
      EF 9020 0067 LDS	R2,0x0067
      F1 BA2B      OUT	0x1B,R2
      F2 C01F      RJMP	0x0112
(0060)  case 8:PORTA=A[8];break;
      F3 9020 0068 LDS	R2,0x0068
      F5 BA2B      OUT	0x1B,R2
      F6 C01B      RJMP	0x0112
(0061)  case 9:PORTA=A[9];break;
      F7 9020 0069 LDS	R2,0x0069
      F9 BA2B      OUT	0x1B,R2
      FA C017      RJMP	0x0112
(0062)  case 10:PORTA=A[10];break;
      FB 9020 006A LDS	R2,0x006A
      FD BA2B      OUT	0x1B,R2
      FE C013      RJMP	0x0112
(0063)  case 11:PORTA=A[11];break;
      FF 9020 006B LDS	R2,0x006B
     101 BA2B      OUT	0x1B,R2
     102 C00F      RJMP	0x0112
(0064)  case 12:PORTA=A[12];break;
     103 9020 006C LDS	R2,0x006C
     105 BA2B      OUT	0x1B,R2
     106 C00B      RJMP	0x0112
(0065)  case 13:PORTA=A[13];break;
     107 9020 006D LDS	R2,0x006D
     109 BA2B      OUT	0x1B,R2
     10A C007      RJMP	0x0112
(0066)  case 14:PORTA=A[14];break;
     10B 9020 006E LDS	R2,0x006E
     10D BA2B      OUT	0x1B,R2
     10E C003      RJMP	0x0112
(0067)  case 15:PORTA=A[15];break;
FILE: <library>
     10F 9020 006F LDS	R2,0x006F
     111 BA2B      OUT	0x1B,R2
     112 CFA5      RJMP	0x00B8
     113 9508      RET
push_xgsetF000:
     114 937A      ST	R23,-Y
     115 936A      ST	R22,-Y
     116 935A      ST	R21,-Y
     117 934A      ST	R20,-Y
     118 9508      RET
pop_xgsetF000:
     119 9149      LD	R20,Y+
     11A 9159      LD	R21,Y+
     11B 9169      LD	R22,Y+
     11C 9179      LD	R23,Y+
     11D 9508      RET
push_xgsetF00C:
     11E 937A      ST	R23,-Y
     11F 936A      ST	R22,-Y
     120 935A      ST	R21,-Y
     121 934A      ST	R20,-Y
     122 92BA      ST	R11,-Y
     123 92AA      ST	R10,-Y
     124 9508      RET
pop_xgsetF00C:
     125 90A9      LD	R10,Y+
     126 90B9      LD	R11,Y+
     127 9149      LD	R20,Y+
     128 9159      LD	R21,Y+
     129 9169      LD	R22,Y+
     12A 9179      LD	R23,Y+
     12B 9508      RET
lsl8:
     12C 2311      TST	R17
     12D F019      BEQ	0x0131
     12E 0F00      LSL	R16
     12F 951A      DEC	R17
     130 CFFB      RJMP	lsl8
     131 9508      RET

⌨️ 快捷键说明

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