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

📄 mykey.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 51CE      SUBI	R28,0x1E
      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 0117 CALL	_main
_exit:
      5D CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      5E 940E 0127 CALL	push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\mykey\mykey.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,0};
(0008) void delay(uint ms)
(0009) {
(0010)         uint i,j;
(0011) 	for(i=0;i<ms;i++)
      60 2744      CLR	R20
      61 2755      CLR	R21
      62 C00B      RJMP	0x006E
(0012) 	   {
(0013) 	   for(j=0;j<1141;j++);
      63 2766      CLR	R22
      64 2777      CLR	R23
      65 C002      RJMP	0x0068
      66 5F6F      SUBI	R22,0xFF
      67 4F7F      SBCI	R23,0xFF
      68 3765      CPI	R22,0x75
      69 E0E4      LDI	R30,4
      6A 077E      CPC	R23,R30
      6B F3D0      BCS	0x0066
      6C 5F4F      SUBI	R20,0xFF
      6D 4F5F      SBCI	R21,0xFF
      6E 1740      CP	R20,R16
      6F 0751      CPC	R21,R17
      70 F390      BCS	0x0063
      71 940C 012C JMP	pop_xgsetF000
_show:
  k                    --> R22
  j                    --> R20
      73 934A      ST	R20,-Y
      74 936A      ST	R22,-Y
      75 2F62      MOV	R22,R18
      76 2F40      MOV	R20,R16
(0014)        }
(0015) }
(0016) void show(uchar j,uchar k)
(0017) {
(0018)     PORTA|=BIT(3);
      77 9ADB      SBI	0x1B,3
(0019) 	PORTB=table[j];
      78 E584      LDI	R24,0x54
      79 E090      LDI	R25,0
      7A 2FE4      MOV	R30,R20
      7B 27FF      CLR	R31
      7C 0FEE      LSL	R30
      7D 1FFF      ROL	R31
      7E 0FE8      ADD	R30,R24
      7F 1FF9      ADC	R31,R25
      80 9025      LPM	R2,Z+
      81 9034      LPM	R3,0(Z)
      82 BA28      OUT	0x18,R2
(0020) 	PORTA&=~BIT(3);
      83 98DB      CBI	0x1B,3
(0021) 	PORTB=0XFF;
      84 EF8F      LDI	R24,0xFF
      85 BB88      OUT	0x18,R24
(0022) 	PORTA|=BIT(4);
      86 9ADC      SBI	0x1B,4
(0023) 	if(j==1)
      87 3041      CPI	R20,1
      88 F499      BNE	0x009C
(0024) 	for(k=5;k>0;k--)
      89 E065      LDI	R22,5
      8A C00D      RJMP	0x0098
(0025) 	{
(0026) 	
(0027) 	PORTB&=~BIT(k);
      8B E001      LDI	R16,1
      8C 2F16      MOV	R17,R22
      8D 940E 0131 CALL	lsl8
      8F 2E20      MOV	R2,R16
      90 9420      COM	R2
      91 B238      IN	R3,0x18
      92 2032      AND	R3,R2
      93 BA38      OUT	0x18,R3
(0028) 	delay(300);	
      94 E20C      LDI	R16,0x2C
      95 E011      LDI	R17,1
      96 DFC7      RCALL	_delay
      97 956A      DEC	R22
      98 E080      LDI	R24,0
      99 1786      CP	R24,R22
      9A F380      BCS	0x008B
      9B C02C      RJMP	0x00C8
(0029) 	}
(0030) 	else if(j==2)
      9C 3042      CPI	R20,2
      9D F491      BNE	0x00B0
(0031) 		for(k=1;k<6;k++)
      9E E061      LDI	R22,1
      9F C00D      RJMP	0x00AD
(0032) 	{
(0033) 	
(0034) 	PORTB&=~BIT(k);
      A0 E001      LDI	R16,1
      A1 2F16      MOV	R17,R22
      A2 940E 0131 CALL	lsl8
      A4 2E20      MOV	R2,R16
      A5 9420      COM	R2
      A6 B238      IN	R3,0x18
      A7 2032      AND	R3,R2
      A8 BA38      OUT	0x18,R3
(0035) 	delay(300);	
      A9 E20C      LDI	R16,0x2C
      AA E011      LDI	R17,1
      AB DFB2      RCALL	_delay
      AC 9563      INC	R22
      AD 3066      CPI	R22,6
      AE F388      BCS	0x00A0
      AF C018      RJMP	0x00C8
(0036) 	}
(0037) 	else if(j==3)
      B0 3043      CPI	R20,3
      B1 F4B1      BNE	0x00C8
(0038) 	for(k=1;k<6;k++)
      B2 E061      LDI	R22,1
      B3 C012      RJMP	0x00C6
(0039) 	{
(0040) 	
(0041) 	PORTB&=~BIT(j);
      B4 E001      LDI	R16,1
      B5 2F14      MOV	R17,R20
      B6 940E 0131 CALL	lsl8
      B8 2E20      MOV	R2,R16
      B9 9420      COM	R2
      BA B238      IN	R3,0x18
      BB 2032      AND	R3,R2
      BC BA38      OUT	0x18,R3
(0042) 	delay(300);	
      BD E20C      LDI	R16,0x2C
      BE E011      LDI	R17,1
      BF DF9E      RCALL	_delay
(0043) 	PORTB=0xff;
      C0 EF8F      LDI	R24,0xFF
      C1 BB88      OUT	0x18,R24
(0044) 	delay(200);
      C2 EC08      LDI	R16,0xC8
      C3 E010      LDI	R17,0
      C4 DF99      RCALL	_delay
      C5 9563      INC	R22
      C6 3066      CPI	R22,6
      C7 F360      BCS	0x00B4
(0045) 	}
(0046) 	
(0047) 	PORTB=0XFF;
      C8 EF8F      LDI	R24,0xFF
      C9 BB88      OUT	0x18,R24
(0048) 	PORTB=~BIT(j);
      CA E001      LDI	R16,1
      CB 2F14      MOV	R17,R20
      CC 940E 0131 CALL	lsl8
      CE 2E20      MOV	R2,R16
      CF 9420      COM	R2
      D0 BA28      OUT	0x18,R2
(0049) 	PORTA&=~BIT(4);
      D1 98DC      CBI	0x1B,4
(0050) 	delay(1);
      D2 E001      LDI	R16,1
      D3 E010      LDI	R17,0
      D4 DF89      RCALL	_delay
      D5 9169      LD	R22,Y+
      D6 9149      LD	R20,Y+
      D7 9508      RET
(0051) }
(0052) 
(0053) uchar key_press()
(0054) {
(0055)     uchar j;
(0056)     DDRD|=0X0F;
_key_press:
  j                    --> R16
      D8 B381      IN	R24,0x11
      D9 608F      ORI	R24,0xF
      DA BB81      OUT	0x11,R24
(0057) 	PORTD|=0X0F;
      DB B382      IN	R24,0x12
      DC 608F      ORI	R24,0xF
      DD BB82      OUT	0x12,R24
(0058) 	
(0059) 	DDRD&=0XF0;
      DE B381      IN	R24,0x11
      DF 7F80      ANDI	R24,0xF0
      E0 BB81      OUT	0x11,R24
(0060) 	
(0061) 	j=PIND;
      E1 B300      IN	R16,0x10
(0062) 	j=j&0X0F;//00001111
      E2 700F      ANDI	R16,0xF
(0063) 	if(j==0X0F)
      E3 300F      CPI	R16,0xF
      E4 F411      BNE	0x00E7
(0064) 	{
(0065) 	  return 0;
      E5 2700      CLR	R16
      E6 C001      RJMP	0x00E8
(0066) 	}
(0067) 	else
(0068) 	{
(0069) 	 return 1;
      E7 E001      LDI	R16,1
      E8 9508      RET
_key_scan:
  key                  --> R20
      E9 940E 0127 CALL	push_xgsetF000
(0070) 	}
(0071) 	
(0072) }
(0073) 
(0074) uchar key_scan()
(0075) {
(0076)     uchar key;
(0077)     delay(10);
      EB E00A      LDI	R16,0xA
      EC E010      LDI	R17,0
      ED DF70      RCALL	_delay
(0078) 	if(key_press())
      EE DFE9      RCALL	_key_press
      EF 2300      TST	R16
      F0 F111      BEQ	0x0113
(0079) 	{
(0080) 	key=PIND;
      F1 B340      IN	R20,0x10
(0081) 	key&=0X0F;
      F2 704F      ANDI	R20,0xF
(0082) 	switch(key)
      F3 2F64      MOV	R22,R20
      F4 2777      CLR	R23
      F5 3067      CPI	R22,7
      F6 E0E0      LDI	R30,0
      F7 077E      CPC	R23,R30
      F8 F099      BEQ	0x010C
      F9 306B      CPI	R22,0xB
      FA E0E0      LDI	R30,0
      FB 077E      CPC	R23,R30
      FC F069      BEQ	0x010A
      FD 306D      CPI	R22,0xD
      FE E0E0      LDI	R30,0
      FF 077E      CPC	R23,R30
     100 F039      BEQ	0x0108
     101 306E      CPI	R22,0xE
     102 E0E0      LDI	R30,0
     103 077E      CPC	R23,R30
     104 F009      BEQ	0x0106
     105 C008      RJMP	0x010E
(0083) 	{
(0084) 	   case 0X0E: 
(0085) 	       key=1;
     106 E041      LDI	R20,1
(0086) 		   break;
     107 C007      RJMP	0x010F
(0087) 	   case 0X0D:
(0088) 	       key=2;
     108 E042      LDI	R20,2
(0089) 		   break;
     109 C005      RJMP	0x010F
(0090) 	   	 case 0X0B: 
(0091) 	       key=3;
     10A E043      LDI	R20,3
(0092) 		   break;
     10B C003      RJMP	0x010F
(0093) 	   case 0X07:
(0094) 	       key=4;
     10C E044      LDI	R20,4
(0095) 		   break; 
     10D C001      RJMP	0x010F
(0096) 	   default:	
(0097) 	       key=16;     	   
     10E E140      LDI	R20,0x10
(0098) 	}
(0099) 	  while(key_press());
     10F DFC8      RCALL	_key_press
     110 2300      TST	R16
     111 F7E9      BNE	0x010F
(0100) 	}
     112 C001      RJMP	0x0114
(0101) 	else
(0102) 	{
(0103) 	  key=16;
     113 E140      LDI	R20,0x10
(0104) 	}
(0105) 	return key;
     114 2F04      MOV	R16,R20
     115 940C 012C JMP	pop_xgsetF000
(0106) }
(0107) void main()
(0108) {
(0109)     uchar i,l;
(0110)     DDRA=0X18;//0001 1000
_main:
  l                    --> R20
  i                    --> R10
     117 E188      LDI	R24,0x18
     118 BB8A      OUT	0x1A,R24
(0111) 	DDRB=0XFF;
     119 EF8F      LDI	R24,0xFF
     11A BB87      OUT	0x17,R24
     11B C009      RJMP	0x0125
(0112) 	while(1)
(0113) 	{
(0114) 	  i=key_press();
     11C DFBB      RCALL	_key_press
     11D 2EA0      MOV	R10,R16
(0115) 	  if(i)
     11E 2300      TST	R16
     11F F029      BEQ	0x0125
(0116) 	  {
(0117) 	     l=key_scan();
     120 DFC8      RCALL	_key_scan
     121 2F40      MOV	R20,R16
(0118) 		 show(l-1,0);
FILE: <library>
     122 2722      CLR	R18
     123 5001      SUBI	R16,1
     124 DF4E      RCALL	_show
     125 CFF6      RJMP	0x011C
     126 9508      RET
push_xgsetF000:
     127 937A      ST	R23,-Y
     128 936A      ST	R22,-Y
     129 935A      ST	R21,-Y
     12A 934A      ST	R20,-Y
     12B 9508      RET
pop_xgsetF000:
     12C 9149      LD	R20,Y+
     12D 9159      LD	R21,Y+
     12E 9169      LD	R22,Y+
     12F 9179      LD	R23,Y+
     130 9508      RET
lsl8:
     131 2311      TST	R17
     132 F019      BEQ	0x0136
     133 0F00      LSL	R16
     134 951A      DEC	R17
     135 CFFB      RJMP	lsl8
     136 9508      RET

⌨️ 快捷键说明

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