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

📄 mkey.lst

📁 基于AVR的四个独立键盘程序。是学习矩阵键盘的前奏
💻 LST
字号:
__start:
__text_start:
    0011 E5CF      LDI	R28,0x5F
    0012 E0D2      LDI	R29,2
    0013 BFCD      OUT	P3D,R28
    0014 BFDE      OUT	P3E,R29
    0015 51C0      SUBI	R28,0x10
    0016 40D0      SBCI	R29,0
    0017 EA0A      LDI	R16,0xAA
    0018 8308      STD	R16,0+Y
    0019 2400      CLR	R0
    001A E6E0      LDI	R30,0x60
    001B E0F0      LDI	R31,0
    001C E010      LDI	R17,0
    001D 36E0      CPI	R30,0x60
    001E 07F1      CPC	R31,R17
    001F F011      BEQ	0x0022
    0020 9201      ST	R0,Z+
    0021 CFFB      RJMP	0x001D
    0022 8300      STD	R16,0+Z
    0023 E2E2      LDI	R30,0x22
    0024 E0F0      LDI	R31,0
    0025 E6A0      LDI	R26,0x60
    0026 E0B0      LDI	R27,0
    0027 E010      LDI	R17,0
    0028 32E2      CPI	R30,0x22
    0029 07F1      CPC	R31,R17
    002A F021      BEQ	0x002F
    002B 95C8      LPM
    002C 9631      ADIW	R30,1
    002D 920D      ST	R0,X+
    002E CFF9      RJMP	0x0028
    002F D0E3      RCALL	_main
_exit:
    0030 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0031 D107      RCALL	push_gset2
FILE: I:\AVR视频教程\视频教程\lesson5\mkey\mkey.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) #pragma data:code 
(0006) const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
(0008) void delay(uint ms)
(0009) {
(0010)         uint i,j;
(0011) 	for(i=0;i<ms;i++)
    0032 2744      CLR	R20
    0033 2755      CLR	R21
    0034 C00B      RJMP	0x0040
(0012) 	   {
(0013) 	   for(j=0;j<1141;j++);
    0035 2766      CLR	R22
    0036 2777      CLR	R23
    0037 C002      RJMP	0x003A
    0038 5F6F      SUBI	R22,0xFF
    0039 4F7F      SBCI	R23,0xFF
    003A 3765      CPI	R22,0x75
    003B E0E4      LDI	R30,4
    003C 077E      CPC	R23,R30
    003D F3D0      BCS	0x0038
    003E 5F4F      SUBI	R20,0xFF
    003F 4F5F      SBCI	R21,0xFF
    0040 1740      CP	R20,R16
    0041 0751      CPC	R21,R17
    0042 F390      BCS	0x0035
(0014)        }
(0015) }
    0043 D0FB      RCALL	pop_gset2
    0044 9508      RET
_show:
  k                    --> R20
  j                    --> R22
    0045 D0F3      RCALL	push_gset2
    0046 2F42      MOV	R20,R18
    0047 2F60      MOV	R22,R16
(0016) void show(uchar j,uchar k)
(0017) {
(0018)         PORTA|=BIT(3);
    0048 9ADB      SBI	P1B,3
(0019) 	PORTB=table[j];
    0049 E080      LDI	R24,0
    004A E090      LDI	R25,0
    004B 2F06      MOV	R16,R22
    004C 2711      CLR	R17
    004D 0F00      LSL	R16
    004E 1F11      ROL	R17
    004F 0F08      ADD	R16,R24
    0050 1F19      ADC	R17,R25
    0051 D0F1      RCALL	lpm16
    0052 BB08      OUT	P18,R16
(0020) 	PORTA&=~BIT(3);
    0053 98DB      CBI	P1B,3
(0021) 	
(0022) 	PORTB=0XFF;
    0054 EF8F      LDI	R24,0xFF
    0055 BB88      OUT	P18,R24
(0023) 	PORTB&=~BIT(k);
    0056 E001      LDI	R16,1
    0057 2F14      MOV	R17,R20
    0058 D0F8      RCALL	lsl8
    0059 2E20      MOV	R2,R16
    005A 9420      COM	R2
    005B B238      IN	R3,P18
    005C 2032      AND	R3,R2
    005D BA38      OUT	P18,R3
(0024) 	PORTA|=BIT(4);
    005E 9ADC      SBI	P1B,4
(0025) 	PORTA&=~BIT(4);
    005F 98DC      CBI	P1B,4
(0026) 	delay(1);
    0060 E001      LDI	R16,1
    0061 E010      LDI	R17,0
    0062 DFCE      RCALL	_delay
(0027) }
    0063 D0DB      RCALL	pop_gset2
    0064 9508      RET
(0028) uchar key_press()
(0029) {
(0030)      uchar i;
(0031)      DDRD=0XFF;
_key_press:
  i                    --> R16
    0065 EF8F      LDI	R24,0xFF
    0066 BB81      OUT	P11,R24
(0032) 	 PORTD=0XF0;
    0067 EF80      LDI	R24,0xF0
    0068 BB82      OUT	P12,R24
(0033) 	 
(0034) 	 DDRD=0X0F;
    0069 E08F      LDI	R24,0xF
    006A BB81      OUT	P11,R24
(0035) 	 
(0036) 	 i=PIND;
    006B B300      IN	R16,P10
(0037) 	 if(i==0XF0)
    006C 3F00      CPI	R16,0xF0
    006D F421      BNE	0x0072
(0038) 	 {
(0039) 	   DDRD=0XFF;
    006E EF8F      LDI	R24,0xFF
    006F BB81      OUT	P11,R24
(0040) 	   return 0;
    0070 2700      CLR	R16
    0071 C003      RJMP	0x0075
(0041) 	 }
(0042) 	 else
(0043) 	 {
(0044) 	   DDRD=0XFF;
    0072 EF8F      LDI	R24,0xFF
    0073 BB81      OUT	P11,R24
(0045) 	   return 1;
    0074 E001      LDI	R16,1
    0075 9508      RET
_key_scan:
  j                    --> R22
  key                  --> R20
  i                    --> R10
    0076 D0C5      RCALL	push_gset3
(0046) 	 }
(0047) }
(0048) 
(0049) uchar key_scan()
(0050) {
(0051)      uchar key,i=0X7F,j;
    0077 E78F      LDI	R24,0x7F
    0078 2EA8      MOV	R10,R24
(0052)      delay(10);
    0079 E00A      LDI	R16,0xA
    007A E010      LDI	R17,0
    007B DFB5      RCALL	_delay
(0053) 	 if(key_press())
    007C DFE8      RCALL	_key_press
    007D 2300      TST	R16
    007E F409      BNE	0x0080
    007F C08F      RJMP	0x010F
(0054) 	 {
(0055) 	    do
(0056) 		{
(0057) 		 i=(i<<1|i>>7);
    0080 2C2A      MOV	R2,R10
    0081 9426      LSR	R2
    0082 9426      LSR	R2
    0083 9426      LSR	R2
    0084 9426      LSR	R2
    0085 9426      LSR	R2
    0086 9426      LSR	R2
    0087 9426      LSR	R2
    0088 2C3A      MOV	R3,R10
    0089 0C33      LSL	R3
    008A 2832      OR	R3,R2
    008B 2CA3      MOV	R10,R3
(0058) 		 PORTD=i;
    008C BA32      OUT	P12,R3
(0059) 		 DDRD=0X0F;
    008D E08F      LDI	R24,0xF
    008E BB81      OUT	P11,R24
(0060) 		 
(0061) 		 key=PIND;
    008F B340      IN	R20,P10
(0062) 		 j=key&0XF0;
    0090 2F64      MOV	R22,R20
    0091 7F60      ANDI	R22,0xF0
(0063) 		 
(0064) 	    }while(j==0XF0);
    0092 3F60      CPI	R22,0xF0
    0093 F361      BEQ	0x0080
(0065) 		
(0066) 		while(key_press());
    0094 DFD0      RCALL	_key_press
    0095 2300      TST	R16
    0096 F7E9      BNE	0x0094
(0067) 		switch(key)
    0097 2F64      MOV	R22,R20
    0098 2777      CLR	R23
    0099 3B67      CPI	R22,0xB7
    009A E0E0      LDI	R30,0
    009B 077E      CPC	R23,R30
    009C F409      BNE	0x009E
    009D C06B      RJMP	0x0109
    009E 3B6B      CPI	R22,0xBB
    009F E0E0      LDI	R30,0
    00A0 077E      CPC	R23,R30
    00A1 F409      BNE	0x00A3
    00A2 C05E      RJMP	0x0101
    00A3 3B6D      CPI	R22,0xBD
    00A4 E0E0      LDI	R30,0
    00A5 077E      CPC	R23,R30
    00A6 F409      BNE	0x00A8
    00A7 C051      RJMP	0x00F9
    00A8 3B6E      CPI	R22,0xBE
    00A9 E0E0      LDI	R30,0
    00AA 077E      CPC	R23,R30
    00AB F409      BNE	0x00AD
    00AC C044      RJMP	0x00F1
    00AD EB8E      LDI	R24,0xBE
    00AE E090      LDI	R25,0
    00AF 1786      CP	R24,R22
    00B0 0797      CPC	R25,R23
    00B1 F0A4      BLT	0x00C6
    00B2 3767      CPI	R22,0x77
    00B3 E0E0      LDI	R30,0
    00B4 077E      CPC	R23,R30
    00B5 F409      BNE	0x00B7
    00B6 C054      RJMP	0x010B
    00B7 376B      CPI	R22,0x7B
    00B8 E0E0      LDI	R30,0
    00B9 077E      CPC	R23,R30
    00BA F409      BNE	0x00BC
    00BB C047      RJMP	0x0103
    00BC 376D      CPI	R22,0x7D
    00BD E0E0      LDI	R30,0
    00BE 077E      CPC	R23,R30
    00BF F409      BNE	0x00C1
    00C0 C03A      RJMP	0x00FB
    00C1 376E      CPI	R22,0x7E
    00C2 E0E0      LDI	R30,0
    00C3 077E      CPC	R23,R30
    00C4 F171      BEQ	0x00F3
    00C5 C047      RJMP	0x010D
    00C6 3D67      CPI	R22,0xD7
    00C7 E0E0      LDI	R30,0
    00C8 077E      CPC	R23,R30
    00C9 F409      BNE	0x00CB
    00CA C03C      RJMP	0x0107
    00CB 3D6B      CPI	R22,0xDB
    00CC E0E0      LDI	R30,0
    00CD 077E      CPC	R23,R30
    00CE F181      BEQ	0x00FF
    00CF 3D6D      CPI	R22,0xDD
    00D0 E0E0      LDI	R30,0
    00D1 077E      CPC	R23,R30
    00D2 F121      BEQ	0x00F7
    00D3 3D6E      CPI	R22,0xDE
    00D4 E0E0      LDI	R30,0
    00D5 077E      CPC	R23,R30
    00D6 F0C1      BEQ	0x00EF
    00D7 3D67      CPI	R22,0xD7
    00D8 E0E0      LDI	R30,0
    00D9 077E      CPC	R23,R30
    00DA F40C      BGE	0x00DC
    00DB C031      RJMP	0x010D
    00DC 3E67      CPI	R22,0xE7
    00DD E0E0      LDI	R30,0
    00DE 077E      CPC	R23,R30
    00DF F129      BEQ	0x0105
    00E0 3E6B      CPI	R22,0xEB
    00E1 E0E0      LDI	R30,0
    00E2 077E      CPC	R23,R30
    00E3 F0C9      BEQ	0x00FD
    00E4 3E6D      CPI	R22,0xED
    00E5 E0E0      LDI	R30,0
    00E6 077E      CPC	R23,R30
    00E7 F069      BEQ	0x00F5
    00E8 3E6E      CPI	R22,0xEE
    00E9 E0E0      LDI	R30,0
    00EA 077E      CPC	R23,R30
    00EB F009      BEQ	0x00ED
    00EC C020      RJMP	0x010D
(0068) 		{
(0069)        case 0xEE:
(0070) 	   		key=0x0;
    00ED 2744      CLR	R20
(0071) 			break;
    00EE C021      RJMP	0x0110
(0072) 	   case 0xDE:
(0073) 	   		key=0x1;
    00EF E041      LDI	R20,1
(0074) 			break; 
    00F0 C01F      RJMP	0x0110
(0075) 	   case 0xBE:
(0076) 	   		key=0x2;
    00F1 E042      LDI	R20,2
(0077) 			break;
    00F2 C01D      RJMP	0x0110
(0078) 	   case 0x7E:
(0079) 	   		key=0x3;
    00F3 E043      LDI	R20,3
(0080) 			break;
    00F4 C01B      RJMP	0x0110
(0081) 	   case 0xED:
(0082) 	   		key=0x4;
    00F5 E044      LDI	R20,4
(0083) 			break;
    00F6 C019      RJMP	0x0110
(0084) 	   case 0xDD:
(0085) 	   		key=0x5;
    00F7 E045      LDI	R20,5
(0086) 			break;
    00F8 C017      RJMP	0x0110
(0087) 	   case 0xBD:
(0088) 	   		key=0x6;
    00F9 E046      LDI	R20,6
(0089) 			break;
    00FA C015      RJMP	0x0110
(0090) 	   case 0x7D:
(0091) 	   		key=0x7;
    00FB E047      LDI	R20,7
(0092) 			break;
    00FC C013      RJMP	0x0110
(0093) 	   case 0xEB:
(0094) 	   		key=0x8;
    00FD E048      LDI	R20,0x8
(0095) 			break;
    00FE C011      RJMP	0x0110
(0096) 	   case 0xDB:
(0097) 	   		key=0x9;
    00FF E049      LDI	R20,0x9
(0098) 			break;
    0100 C00F      RJMP	0x0110
(0099) 	   case 0xBB:
(0100) 	   		key=0xA;
    0101 E04A      LDI	R20,0xA
(0101) 			break;
    0102 C00D      RJMP	0x0110
(0102) 	   case 0x7B:
(0103) 	   		key=0xB;
    0103 E04B      LDI	R20,0xB
(0104) 			break;
    0104 C00B      RJMP	0x0110
(0105) 	   case 0xE7:
(0106) 	   		key=0xC;
    0105 E04C      LDI	R20,0xC
(0107) 			break;
    0106 C009      RJMP	0x0110
(0108) 	   case 0xD7:
(0109) 	   		key=0xD;
    0107 E04D      LDI	R20,0xD
(0110) 			break;
    0108 C007      RJMP	0x0110
(0111) 	   case 0xB7:
(0112) 	   		key=0xE;
    0109 E04E      LDI	R20,0xE
(0113) 			break;
    010A C005      RJMP	0x0110
(0114) 	   case 0x77:
(0115) 	   		key=0xF;
    010B E04F      LDI	R20,0xF
(0116) 			break;
    010C C003      RJMP	0x0110
(0117) 	   default:
(0118) 	        key=16;		
    010D E140      LDI	R20,0x10
(0119) 		}
(0120) 	 }
    010E C001      RJMP	0x0110
(0121) 	 else
(0122) 	 {
(0123) 	    key=16;
    010F E140      LDI	R20,0x10
(0124) 	 }
(0125) 	 return key;
    0110 2F04      MOV	R16,R20
    0111 D02F      RCALL	pop_gset3
    0112 9508      RET
(0126) }
(0127) void main()
(0128) {
(0129)      uchar l;
(0130)      DDRA|=0X18;// 0001 1000
_main:
  l                    --> R20
    0113 B38A      IN	R24,P1A
    0114 6188      ORI	R24,0x18
    0115 BB8A      OUT	P1A,R24
(0131)  	 DDRB=0XFF;
    0116 EF8F      LDI	R24,0xFF
    0117 BB87      OUT	P17,R24
    0118 C007      RJMP	0x0120
(0132) 	 while(1)
(0133) 	 {
(0134) 	   if(key_press())
    0119 DF4B      RCALL	_key_press
    011A 2300      TST	R16
    011B F021      BEQ	0x0120
(0135) 	   {
(0136) 	      l=key_scan();
    011C DF59      RCALL	_key_scan
    011D 2F40      MOV	R20,R16
(0137) 		  show(l,0);
    011E 2722      CLR	R18
    011F DF25      RCALL	_show
    0120 CFF8      RJMP	0x0119
(0138) 	   }
(0139) 	 }
(0140) 	 
(0141) }FILE: <library>
    0121 9508      RET
push_gset1:
    0122 935A      ST	R21,-Y
    0123 934A      ST	R20,-Y
    0124 9508      RET
pop_gset1:
    0125 E0E1      LDI	R30,1
pop:
    0126 9149      LD	R20,Y+
    0127 9159      LD	R21,Y+
    0128 FDE0      SBRC	R30,0
    0129 9508      RET
    012A 9169      LD	R22,Y+
    012B 9179      LD	R23,Y+
    012C FDE1      SBRC	R30,1
    012D 9508      RET
    012E 90A9      LD	R10,Y+
    012F 90B9      LD	R11,Y+
    0130 FDE2      SBRC	R30,2
    0131 9508      RET
    0132 90C9      LD	R12,Y+
    0133 90D9      LD	R13,Y+
    0134 FDE3      SBRC	R30,3
    0135 9508      RET
    0136 90E9      LD	R14,Y+
    0137 90F9      LD	R15,Y+
    0138 9508      RET
push_gset2:
    0139 937A      ST	R23,-Y
    013A 936A      ST	R22,-Y
    013B CFE6      RJMP	push_gset1
push_gset3:
    013C 92BA      ST	R11,-Y
    013D 92AA      ST	R10,-Y
    013E CFFA      RJMP	push_gset2
pop_gset2:
    013F E0E2      LDI	R30,2
    0140 CFE5      RJMP	pop
pop_gset3:
    0141 E0E4      LDI	R30,4
    0142 CFE3      RJMP	pop
lpm16:
    0143 93EA      ST	R30,-Y
    0144 93FA      ST	R31,-Y
    0145 920A      ST	R0,-Y
    0146 2FE0      MOV	R30,R16
    0147 2FF1      MOV	R31,R17
    0148 95C8      LPM
    0149 2D00      MOV	R16,R0
    014A 9631      ADIW	R30,1
    014B 95C8      LPM
    014C 2D10      MOV	R17,R0
    014D 9009      LD	R0,Y+
    014E 91F9      LD	R31,Y+
    014F 91E9      LD	R30,Y+
    0150 9508      RET
lsl8:
    0151 2311      TST	R17
    0152 F019      BEQ	0x0156
    0153 0F00      LSL	R16
    0154 951A      DEC	R17
    0155 CFFB      RJMP	lsl8
    0156 9508      RET

⌨️ 快捷键说明

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