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

📄 mkey.lst

📁 AVR单片机C语言编程及应用实例 适合初学者的学习研究 其中包含Atmega16中文资料及Protel部分电路图
💻 LST
字号:
__start:
__text_start:
      3B E5CF      LDI	R28,0x5F
      3C E0D4      LDI	R29,4
      3D BFCD      OUT	0x3D,R28
      3E BFDE      OUT	0x3E,R29
      3F 51C0      SUBI	R28,0x10
      40 40D0      SBCI	R29,0
      41 EA0A      LDI	R16,0xAA
      42 8308      STD	Y+0,R16
      43 2400      CLR	R0
      44 E6E0      LDI	R30,0x60
      45 E0F0      LDI	R31,0
      46 E010      LDI	R17,0
      47 36E0      CPI	R30,0x60
      48 07F1      CPC	R31,R17
      49 F011      BEQ	0x004C
      4A 9201      ST	R0,Z+
      4B CFFB      RJMP	0x0047
      4C 8300      STD	Z+0,R16
      4D E7E6      LDI	R30,0x76
      4E E0F0      LDI	R31,0
      4F E6A0      LDI	R26,0x60
      50 E0B0      LDI	R27,0
      51 E010      LDI	R17,0
      52 E000      LDI	R16,0
      53 BF0B      OUT	0x3B,R16
      54 37E6      CPI	R30,0x76
      55 07F1      CPC	R31,R17
      56 F021      BEQ	0x005B
      57 95C8      LPM
      58 9631      ADIW	R30,1
      59 920D      ST	R0,X+
      5A CFF9      RJMP	0x0054
      5B 940E 0141 CALL	_main
_exit:
      5D CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      5E D0FF      RCALL	push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\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++)
      5F 2744      CLR	R20
      60 2755      CLR	R21
      61 C00B      RJMP	0x006D
(0012) 	   {
(0013) 	   for(j=0;j<1141;j++);
      62 2766      CLR	R22
      63 2777      CLR	R23
      64 C002      RJMP	0x0067
      65 5F6F      SUBI	R22,0xFF
      66 4F7F      SBCI	R23,0xFF
      67 3765      CPI	R22,0x75
      68 E0E4      LDI	R30,4
      69 077E      CPC	R23,R30
      6A F3D0      BCS	0x0065
      6B 5F4F      SUBI	R20,0xFF
      6C 4F5F      SBCI	R21,0xFF
      6D 1740      CP	R20,R16
      6E 0751      CPC	R21,R17
      6F F390      BCS	0x0062
      70 C0F2      RJMP	pop_xgsetF000
_show:
  k                    --> R10
  j                    --> R12
      71 92AA      ST	R10,-Y
      72 92CA      ST	R12,-Y
      73 2EA2      MOV	R10,R18
      74 2EC0      MOV	R12,R16
(0014)        }
(0015) }
(0016) void show(uchar j,uchar k)
(0017) {
(0018)         PORTA|=BIT(3);
      75 9ADB      SBI	0x1B,3
(0019) 	PORTB=table[j];
      76 E584      LDI	R24,0x54
      77 E090      LDI	R25,0
      78 2D0C      MOV	R16,R12
      79 2711      CLR	R17
      7A 0F00      LSL	R16
      7B 1F11      ROL	R17
      7C 0F08      ADD	R16,R24
      7D 1F19      ADC	R17,R25
      7E D0D1      RCALL	elpm16
      7F BB08      OUT	0x18,R16
(0020) 	PORTA&=~BIT(3);
      80 98DB      CBI	0x1B,3
(0021) 	
(0022) 	PORTB=0XFF;
      81 EF8F      LDI	R24,0xFF
      82 BB88      OUT	0x18,R24
(0023) 	PORTB&=~BIT(k);
      83 E001      LDI	R16,1
      84 2D1A      MOV	R17,R10
      85 D0F0      RCALL	lsl8
      86 2E20      MOV	R2,R16
      87 9420      COM	R2
      88 B238      IN	R3,0x18
      89 2032      AND	R3,R2
      8A BA38      OUT	0x18,R3
(0024) 	PORTA|=BIT(4);
      8B 9ADC      SBI	0x1B,4
(0025) 	PORTA&=~BIT(4);
      8C 98DC      CBI	0x1B,4
(0026) 	delay(1);
      8D E001      LDI	R16,1
      8E E010      LDI	R17,0
      8F DFCE      RCALL	_delay
      90 90C9      LD	R12,Y+
      91 90A9      LD	R10,Y+
      92 9508      RET
(0027) }
(0028) uchar key_press()
(0029) {
(0030)      uchar i;
(0031)      DDRD=0XFF;
_key_press:
  i                    --> R16
      93 EF8F      LDI	R24,0xFF
      94 BB81      OUT	0x11,R24
(0032) 	 PORTD=0XF0;
      95 EF80      LDI	R24,0xF0
      96 BB82      OUT	0x12,R24
(0033) 	 
(0034) 	 DDRD=0X0F;
      97 E08F      LDI	R24,0xF
      98 BB81      OUT	0x11,R24
(0035) 	 
(0036) 	 i=PIND;
      99 B300      IN	R16,0x10
(0037) 	 if(i==0XF0)
      9A 3F00      CPI	R16,0xF0
      9B F421      BNE	0x00A0
(0038) 	 {
(0039) 	   DDRD=0XFF;
      9C EF8F      LDI	R24,0xFF
      9D BB81      OUT	0x11,R24
(0040) 	   return 0;
      9E 2700      CLR	R16
      9F C003      RJMP	0x00A3
(0041) 	 }
(0042) 	 else
(0043) 	 {
(0044) 	   DDRD=0XFF;
      A0 EF8F      LDI	R24,0xFF
      A1 BB81      OUT	0x11,R24
(0045) 	   return 1;
      A2 E001      LDI	R16,1
      A3 9508      RET
_key_scan:
  j                    --> R10
  key                  --> R20
  i                    --> R22
      A4 D0C3      RCALL	push_xgsetF00C
(0046) 	 }
(0047) }
(0048) 
(0049) uchar key_scan()
(0050) {
(0051)      uchar key,i=0X7F,j;
      A5 E76F      LDI	R22,0x7F
(0052)      delay(10);
      A6 E00A      LDI	R16,0xA
      A7 E010      LDI	R17,0
      A8 DFB5      RCALL	_delay
(0053) 	 if(key_press())
      A9 DFE9      RCALL	_key_press
      AA 2300      TST	R16
      AB F409      BNE	0x00AD
      AC C091      RJMP	0x013E
(0054) 	 {
(0055) 	    do
(0056) 		{
(0057) 		 i=(i<<1|i>>7);
      AD 2E26      MOV	R2,R22
      AE 9426      LSR	R2
      AF 9426      LSR	R2
      B0 9426      LSR	R2
      B1 9426      LSR	R2
      B2 9426      LSR	R2
      B3 9426      LSR	R2
      B4 9426      LSR	R2
      B5 2E36      MOV	R3,R22
      B6 0C33      LSL	R3
      B7 2832      OR	R3,R2
      B8 2D63      MOV	R22,R3
(0058) 		 PORTD=i;
      B9 BA32      OUT	0x12,R3
(0059) 		 DDRD=0X0F;
      BA E08F      LDI	R24,0xF
      BB BB81      OUT	0x11,R24
(0060) 		 
(0061) 		 key=PIND;
      BC B340      IN	R20,0x10
(0062) 		 j=key&0XF0;
      BD 2F84      MOV	R24,R20
      BE 7F80      ANDI	R24,0xF0
      BF 2EA8      MOV	R10,R24
(0063) 		 
(0064) 	    }while(j==0XF0);
      C0 2D8A      MOV	R24,R10
      C1 3F80      CPI	R24,0xF0
      C2 F351      BEQ	0x00AD
(0065) 		
(0066) 		while(key_press());
      C3 DFCF      RCALL	_key_press
      C4 2300      TST	R16
      C5 F7E9      BNE	0x00C3
(0067) 		switch(key)
      C6 2F64      MOV	R22,R20
      C7 2777      CLR	R23
      C8 3B67      CPI	R22,0xB7
      C9 E0E0      LDI	R30,0
      CA 077E      CPC	R23,R30
      CB F409      BNE	0x00CD
      CC C06B      RJMP	0x0138
      CD 3B6B      CPI	R22,0xBB
      CE E0E0      LDI	R30,0
      CF 077E      CPC	R23,R30
      D0 F409      BNE	0x00D2
      D1 C05E      RJMP	0x0130
      D2 3B6D      CPI	R22,0xBD
      D3 E0E0      LDI	R30,0
      D4 077E      CPC	R23,R30
      D5 F409      BNE	0x00D7
      D6 C051      RJMP	0x0128
      D7 3B6E      CPI	R22,0xBE
      D8 E0E0      LDI	R30,0
      D9 077E      CPC	R23,R30
      DA F409      BNE	0x00DC
      DB C044      RJMP	0x0120
      DC EB8E      LDI	R24,0xBE
      DD E090      LDI	R25,0
      DE 1786      CP	R24,R22
      DF 0797      CPC	R25,R23
      E0 F0A4      BLT	0x00F5
      E1 3767      CPI	R22,0x77
      E2 E0E0      LDI	R30,0
      E3 077E      CPC	R23,R30
      E4 F409      BNE	0x00E6
      E5 C054      RJMP	0x013A
      E6 376B      CPI	R22,0x7B
      E7 E0E0      LDI	R30,0
      E8 077E      CPC	R23,R30
      E9 F409      BNE	0x00EB
      EA C047      RJMP	0x0132
      EB 376D      CPI	R22,0x7D
      EC E0E0      LDI	R30,0
      ED 077E      CPC	R23,R30
      EE F409      BNE	0x00F0
      EF C03A      RJMP	0x012A
      F0 376E      CPI	R22,0x7E
      F1 E0E0      LDI	R30,0
      F2 077E      CPC	R23,R30
      F3 F171      BEQ	0x0122
      F4 C047      RJMP	0x013C
      F5 3D67      CPI	R22,0xD7
      F6 E0E0      LDI	R30,0
      F7 077E      CPC	R23,R30
      F8 F409      BNE	0x00FA
      F9 C03C      RJMP	0x0136
      FA 3D6B      CPI	R22,0xDB
      FB E0E0      LDI	R30,0
      FC 077E      CPC	R23,R30
      FD F181      BEQ	0x012E
      FE 3D6D      CPI	R22,0xDD
      FF E0E0      LDI	R30,0
     100 077E      CPC	R23,R30
     101 F121      BEQ	0x0126
     102 3D6E      CPI	R22,0xDE
     103 E0E0      LDI	R30,0
     104 077E      CPC	R23,R30
     105 F0C1      BEQ	0x011E
     106 3D67      CPI	R22,0xD7
     107 E0E0      LDI	R30,0
     108 077E      CPC	R23,R30
     109 F40C      BGE	0x010B
     10A C031      RJMP	0x013C
     10B 3E67      CPI	R22,0xE7
     10C E0E0      LDI	R30,0
     10D 077E      CPC	R23,R30
     10E F129      BEQ	0x0134
     10F 3E6B      CPI	R22,0xEB
     110 E0E0      LDI	R30,0
     111 077E      CPC	R23,R30
     112 F0C9      BEQ	0x012C
     113 3E6D      CPI	R22,0xED
     114 E0E0      LDI	R30,0
     115 077E      CPC	R23,R30
     116 F069      BEQ	0x0124
     117 3E6E      CPI	R22,0xEE
     118 E0E0      LDI	R30,0
     119 077E      CPC	R23,R30
     11A F009      BEQ	0x011C
     11B C020      RJMP	0x013C
(0068) 		{
(0069)        case 0xEE:
(0070) 	   		key=0x0;
     11C 2744      CLR	R20
(0071) 			break;
     11D C021      RJMP	0x013F
(0072) 	   case 0xDE:
(0073) 	   		key=0x1;
     11E E041      LDI	R20,1
(0074) 			break; 
     11F C01F      RJMP	0x013F
(0075) 	   case 0xBE:
(0076) 	   		key=0x2;
     120 E042      LDI	R20,2
(0077) 			break;
     121 C01D      RJMP	0x013F
(0078) 	   case 0x7E:
(0079) 	   		key=0x3;
     122 E043      LDI	R20,3
(0080) 			break;
     123 C01B      RJMP	0x013F
(0081) 	   case 0xED:
(0082) 	   		key=0x4;
     124 E044      LDI	R20,4
(0083) 			break;
     125 C019      RJMP	0x013F
(0084) 	   case 0xDD:
(0085) 	   		key=0x5;
     126 E045      LDI	R20,5
(0086) 			break;
     127 C017      RJMP	0x013F
(0087) 	   case 0xBD:
(0088) 	   		key=0x6;
     128 E046      LDI	R20,6
(0089) 			break;
     129 C015      RJMP	0x013F
(0090) 	   case 0x7D:
(0091) 	   		key=0x7;
     12A E047      LDI	R20,7
(0092) 			break;
     12B C013      RJMP	0x013F
(0093) 	   case 0xEB:
(0094) 	   		key=0x8;
     12C E048      LDI	R20,0x8
(0095) 			break;
     12D C011      RJMP	0x013F
(0096) 	   case 0xDB:
(0097) 	   		key=0x9;
     12E E049      LDI	R20,0x9
(0098) 			break;
     12F C00F      RJMP	0x013F
(0099) 	   case 0xBB:
(0100) 	   		key=0xA;
     130 E04A      LDI	R20,0xA
(0101) 			break;
     131 C00D      RJMP	0x013F
(0102) 	   case 0x7B:
(0103) 	   		key=0xB;
     132 E04B      LDI	R20,0xB
(0104) 			break;
     133 C00B      RJMP	0x013F
(0105) 	   case 0xE7:
(0106) 	   		key=0xC;
     134 E04C      LDI	R20,0xC
(0107) 			break;
     135 C009      RJMP	0x013F
(0108) 	   case 0xD7:
(0109) 	   		key=0xD;
     136 E04D      LDI	R20,0xD
(0110) 			break;
     137 C007      RJMP	0x013F
(0111) 	   case 0xB7:
(0112) 	   		key=0xE;
     138 E04E      LDI	R20,0xE
(0113) 			break;
     139 C005      RJMP	0x013F
(0114) 	   case 0x77:
(0115) 	   		key=0xF;
     13A E04F      LDI	R20,0xF
(0116) 			break;
     13B C003      RJMP	0x013F
(0117) 	   default:
(0118) 	        key=16;		
     13C E140      LDI	R20,0x10
(0119) 		}
(0120) 	 }
     13D C001      RJMP	0x013F
(0121) 	 else
(0122) 	 {
(0123) 	    key=16;
     13E E140      LDI	R20,0x10
(0124) 	 }
(0125) 	 return key;
     13F 2F04      MOV	R16,R20
     140 C02E      RJMP	pop_xgsetF00C
(0126) }
(0127) void main()
(0128) {
(0129)      uchar l;
(0130)      DDRA|=0X18;// 0001 1000
_main:
  l                    --> R10
     141 B38A      IN	R24,0x1A
     142 6188      ORI	R24,0x18
     143 BB8A      OUT	0x1A,R24
(0131)  	 DDRB=0XFF;
     144 EF8F      LDI	R24,0xFF
     145 BB87      OUT	0x17,R24
     146 C007      RJMP	0x014E
(0132) 	 while(1)
(0133) 	 {
(0134) 	   if(key_press())
     147 DF4B      RCALL	_key_press
     148 2300      TST	R16
     149 F021      BEQ	0x014E
(0135) 	   {
(0136) 	      l=key_scan();
     14A DF59      RCALL	_key_scan
     14B 2EA0      MOV	R10,R16
(0137) 		  show(l,0);
FILE: <library>
     14C 2722      CLR	R18
     14D DF23      RCALL	_show
     14E CFF8      RJMP	0x0147
     14F 9508      RET
elpm16:
     150 93EA      ST	R30,-Y
     151 93FA      ST	R31,-Y
     152 920A      ST	R0,-Y
     153 2FE0      MOV	R30,R16
     154 2FF1      MOV	R31,R17
     155 95D8      ELPM
     156 2D00      MOV	R16,R0
     157 9631      ADIW	R30,1
     158 95D8      ELPM
     159 2D10      MOV	R17,R0
     15A 9009      LD	R0,Y+
     15B 91F9      LD	R31,Y+
     15C 91E9      LD	R30,Y+
     15D 9508      RET
push_xgsetF000:
     15E 937A      ST	R23,-Y
     15F 936A      ST	R22,-Y
     160 935A      ST	R21,-Y
     161 934A      ST	R20,-Y
     162 9508      RET
pop_xgsetF000:
     163 9149      LD	R20,Y+
     164 9159      LD	R21,Y+
     165 9169      LD	R22,Y+
     166 9179      LD	R23,Y+
     167 9508      RET
push_xgsetF00C:
     168 937A      ST	R23,-Y
     169 936A      ST	R22,-Y
     16A 935A      ST	R21,-Y
     16B 934A      ST	R20,-Y
     16C 92BA      ST	R11,-Y
     16D 92AA      ST	R10,-Y
     16E 9508      RET
pop_xgsetF00C:
     16F 90A9      LD	R10,Y+
     170 90B9      LD	R11,Y+
     171 9149      LD	R20,Y+
     172 9159      LD	R21,Y+
     173 9169      LD	R22,Y+
     174 9179      LD	R23,Y+
     175 9508      RET
lsl8:
     176 2311      TST	R17
     177 F019      BEQ	0x017B
     178 0F00      LSL	R16
     179 951A      DEC	R17
     17A CFFB      RJMP	lsl8
     17B 9508      RET

⌨️ 快捷键说明

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