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

📄 lesson5.lst

📁 用单片机对键盘按键进行扫描检测。可以扫描出具体按下的哪个键子
💻 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 D073      RCALL	_main
_exit:
    0030 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0031 D098      RCALL	push_gset2
FILE: I:\AVR视频教程\视频教程\lesson5\chengxu\lesson5\lesson5.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++)
    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 D089      RCALL	pop_gset2
    0044 9508      RET
_show:
  k                    --> R20
  j                    --> R22
    0045 D084      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 D07D      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 D084      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 D069      RCALL	pop_gset2
    0064 9508      RET
(0028) 
(0029) uchar key_press()
(0030) {
(0031)     uchar j;
(0032)     DDRD|=0X0F;
_key_press:
  j                    --> R16
    0065 B381      IN	R24,P11
    0066 608F      ORI	R24,0xF
    0067 BB81      OUT	P11,R24
(0033) 	PORTD|=0X0F;
    0068 B382      IN	R24,P12
    0069 608F      ORI	R24,0xF
    006A BB82      OUT	P12,R24
(0034) 	
(0035) 	DDRD&=0XF0;
    006B B381      IN	R24,P11
    006C 7F80      ANDI	R24,0xF0
    006D BB81      OUT	P11,R24
(0036) 	
(0037) 	j=PIND;
    006E B300      IN	R16,P10
(0038) 	j=j&0X0F;//00001111
    006F 700F      ANDI	R16,0xF
(0039) 	if(j==0X0F)
    0070 300F      CPI	R16,0xF
    0071 F411      BNE	0x0074
(0040) 	{
(0041) 	  return 0;
    0072 2700      CLR	R16
    0073 C001      RJMP	0x0075
(0042) 	}
(0043) 	else
(0044) 	{
(0045) 	 return 1;
    0074 E001      LDI	R16,1
    0075 9508      RET
_key_scan:
  key                  --> R20
    0076 D053      RCALL	push_gset2
(0046) 	}
(0047) 	
(0048) }
(0049) 
(0050) uchar key_scan()
(0051) {
(0052)     uchar key;
(0053)     delay(10);
    0077 E00A      LDI	R16,0xA
    0078 E010      LDI	R17,0
    0079 DFB7      RCALL	_delay
(0054) 	if(key_press())
    007A DFEA      RCALL	_key_press
    007B 2300      TST	R16
    007C F111      BEQ	0x009F
(0055) 	{
(0056) 	key=PIND;
    007D B340      IN	R20,P10
(0057) 	key&=0X0F;
    007E 704F      ANDI	R20,0xF
(0058) 	switch(key)
    007F 2F64      MOV	R22,R20
    0080 2777      CLR	R23
    0081 3067      CPI	R22,7
    0082 E0E0      LDI	R30,0
    0083 077E      CPC	R23,R30
    0084 F099      BEQ	0x0098
    0085 306B      CPI	R22,0xB
    0086 E0E0      LDI	R30,0
    0087 077E      CPC	R23,R30
    0088 F069      BEQ	0x0096
    0089 306D      CPI	R22,0xD
    008A E0E0      LDI	R30,0
    008B 077E      CPC	R23,R30
    008C F039      BEQ	0x0094
    008D 306E      CPI	R22,0xE
    008E E0E0      LDI	R30,0
    008F 077E      CPC	R23,R30
    0090 F009      BEQ	0x0092
    0091 C008      RJMP	0x009A
(0059) 	{
(0060) 	   case 0X0E: 
(0061) 	       key=1;
    0092 E041      LDI	R20,1
(0062) 		   break;
    0093 C007      RJMP	0x009B
(0063) 	   case 0X0D:
(0064) 	       key=2;
    0094 E042      LDI	R20,2
(0065) 		   break;
    0095 C005      RJMP	0x009B
(0066) 	   	 case 0X0B: 
(0067) 	       key=3;
    0096 E043      LDI	R20,3
(0068) 		   break;
    0097 C003      RJMP	0x009B
(0069) 	   case 0X07:
(0070) 	       key=4;
    0098 E044      LDI	R20,4
(0071) 		   break; 
    0099 C001      RJMP	0x009B
(0072) 	   default:	
(0073) 	       key=16;     	   
    009A E140      LDI	R20,0x10
(0074) 	}
(0075) 	  while(key_press());
    009B DFC9      RCALL	_key_press
    009C 2300      TST	R16
    009D F7E9      BNE	0x009B
(0076) 	}
    009E C001      RJMP	0x00A0
(0077) 	else
(0078) 	{
(0079) 	  key=16;
    009F E140      LDI	R20,0x10
(0080) 	}
(0081) 	return key;
    00A0 2F04      MOV	R16,R20
    00A1 D02B      RCALL	pop_gset2
    00A2 9508      RET
(0082) }
(0083) void main()
(0084) {
(0085)     uchar i,l;
(0086)     DDRA|=0X18;//0001 1000
_main:
  l                    --> R20
  i                    --> R22
    00A3 B38A      IN	R24,P1A
    00A4 6188      ORI	R24,0x18
    00A5 BB8A      OUT	P1A,R24
(0087) 	DDRB=0XFF;
    00A6 EF8F      LDI	R24,0xFF
    00A7 BB87      OUT	P17,R24
    00A8 C008      RJMP	0x00B1
(0088) 	while(1)
(0089) 	{
(0090) 	  i=key_press();
    00A9 DFBB      RCALL	_key_press
    00AA 2F60      MOV	R22,R16
(0091) 	  if(i)
    00AB 2300      TST	R16
    00AC F021      BEQ	0x00B1
(0092) 	  {
(0093) 	     l=key_scan();
    00AD DFC8      RCALL	_key_scan
    00AE 2F40      MOV	R20,R16
(0094) 		 show(l,0);
    00AF 2722      CLR	R18
    00B0 DF94      RCALL	_show
    00B1 CFF7      RJMP	0x00A9
(0095) 	  }
(0096) 	}
(0097) }FILE: <library>
    00B2 9508      RET
push_gset1:
    00B3 935A      ST	R21,-Y
    00B4 934A      ST	R20,-Y
    00B5 9508      RET
pop_gset1:
    00B6 E0E1      LDI	R30,1
pop:
    00B7 9149      LD	R20,Y+
    00B8 9159      LD	R21,Y+
    00B9 FDE0      SBRC	R30,0
    00BA 9508      RET
    00BB 9169      LD	R22,Y+
    00BC 9179      LD	R23,Y+
    00BD FDE1      SBRC	R30,1
    00BE 9508      RET
    00BF 90A9      LD	R10,Y+
    00C0 90B9      LD	R11,Y+
    00C1 FDE2      SBRC	R30,2
    00C2 9508      RET
    00C3 90C9      LD	R12,Y+
    00C4 90D9      LD	R13,Y+
    00C5 FDE3      SBRC	R30,3
    00C6 9508      RET
    00C7 90E9      LD	R14,Y+
    00C8 90F9      LD	R15,Y+
    00C9 9508      RET
push_gset2:
    00CA 937A      ST	R23,-Y
    00CB 936A      ST	R22,-Y
    00CC CFE6      RJMP	push_gset1
pop_gset2:
    00CD E0E2      LDI	R30,2
    00CE CFE8      RJMP	pop
lpm16:
    00CF 93EA      ST	R30,-Y
    00D0 93FA      ST	R31,-Y
    00D1 920A      ST	R0,-Y
    00D2 2FE0      MOV	R30,R16
    00D3 2FF1      MOV	R31,R17
    00D4 95C8      LPM
    00D5 2D00      MOV	R16,R0
    00D6 9631      ADIW	R30,1
    00D7 95C8      LPM
    00D8 2D10      MOV	R17,R0
    00D9 9009      LD	R0,Y+
    00DA 91F9      LD	R31,Y+
    00DB 91E9      LD	R30,Y+
    00DC 9508      RET
lsl8:
    00DD 2311      TST	R17
    00DE F019      BEQ	0x00E2
    00DF 0F00      LSL	R16
    00E0 951A      DEC	R17
    00E1 CFFB      RJMP	lsl8
    00E2 9508      RET

⌨️ 快捷键说明

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