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

📄 buzzer.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0086 2022      TST	R2
    0087 F7D9      BNE	0x0083
    0088 2E20      MOV	R2,R16
    0089 2433      CLR	R3
    008A 5001      SUBI	R16,1
    008B 2022      TST	R2
    008C F7A9      BNE	0x0082
    008D 940E014B  CALL	pop_gset1
    008F 9508      RET
_KeyScan:
  KeyNum               --> R20
  temp                 --> R22
    0090 940E0146  CALL	push_gset2
(0033) 	}
(0034) }
(0035) 
(0036) /*-----------------------------------------------------------------
(0037) 函数名称: void KeyScan(void)
(0038) 函数功能: 键盘扫描程序
(0039) 参    数: 
(0040) 返 回 值: 无
(0041) -----------------------------------------------------------------*/
(0042) void KeyScan(void)
(0043) {
(0044)  	uchar temp;	  		  //存放音符
(0045)  	uchar KeyNum = 0;	  //用来存放按键信息
    0092 2744      CLR	R20
(0046)  	DDRA  = 0xff;         //置端口A为输出
    0093 EF8F      LDI	R24,0xFF
    0094 BB8A      OUT	0x1A,R24
(0047) 	PORTA = 0xff; 		  //全部输出为高电平
    0095 BB8B      OUT	0x1B,R24
(0048) 	DelayMs(1);   		  //延时一段时间
    0096 E001      LDI	R16,1
    0097 DFE7      RCALL	_DelayMs
(0049) 	DDRA  = 0x00;		  //置端口A为输入
    0098 2422      CLR	R2
    0099 BA2A      OUT	0x1A,R2
(0050) 	if( PINA != 0xff)	  //是否有按键按下
    009A B389      IN	R24,0x19
    009B 3F8F      CPI	R24,0xFF
    009C F011      BEQ	0x009F
(0051) 		DelayMs(1);		  //延时去抖动
    009D E001      LDI	R16,1
    009E DFE0      RCALL	_DelayMs
(0052) 		
(0053) 	DDRA  = 0xff;         //置端口A为输出
    009F EF8F      LDI	R24,0xFF
    00A0 BB8A      OUT	0x1A,R24
(0054) 	PORTA = 0xff; 		  //全部输出为高电平
    00A1 BB8B      OUT	0x1B,R24
(0055) 	DelayMs(1);   		  //延时一段时间
    00A2 E001      LDI	R16,1
    00A3 DFDB      RCALL	_DelayMs
(0056) 	DDRA  = 0x00;		  //置端口A为输入
    00A4 2422      CLR	R2
    00A5 BA2A      OUT	0x1A,R2
(0057) 	if( PINA != 0xff)	  //是否有按键按下
    00A6 B389      IN	R24,0x19
    00A7 3F8F      CPI	R24,0xFF
    00A8 F409      BNE	0x00AA
    00A9 C071      RJMP	0x011B
(0058) 	{		 			  //确实有按键按下
(0059) 	 	switch (PINA & 0xff)//判断是哪个按键按下
    00AA B369      IN	R22,0x19
    00AB 2777      CLR	R23
    00AC 7070      ANDI	R23,0
    00AD 3D6F      CPI	R22,0xDF
    00AE E0E0      LDI	R30,0
    00AF 077E      CPC	R23,R30
    00B0 F409      BNE	0x00B2
    00B1 C038      RJMP	0x00EA
    00B2 ED8F      LDI	R24,0xDF
    00B3 E090      LDI	R25,0
    00B4 1786      CP	R24,R22
    00B5 0797      CPC	R25,R23
    00B6 F07C      BLT	0x00C6
    00B7 376F      CPI	R22,0x7F
    00B8 E0E0      LDI	R30,0
    00B9 077E      CPC	R23,R30
    00BA F409      BNE	0x00BC
    00BB C032      RJMP	0x00EE
    00BC 376F      CPI	R22,0x7F
    00BD E0E0      LDI	R30,0
    00BE 077E      CPC	R23,R30
    00BF F40C      BGE	0x00C1
    00C0 C054      RJMP	0x0115
    00C1 3B6F      CPI	R22,0xBF
    00C2 E0E0      LDI	R30,0
    00C3 077E      CPC	R23,R30
    00C4 F139      BEQ	0x00EC
    00C5 C04F      RJMP	0x0115
    00C6 3E6F      CPI	R22,0xEF
    00C7 E0E0      LDI	R30,0
    00C8 077E      CPC	R23,R30
    00C9 F0F1      BEQ	0x00E8
    00CA 3E6F      CPI	R22,0xEF
    00CB E0E0      LDI	R30,0
    00CC 077E      CPC	R23,R30
    00CD F40C      BGE	0x00CF
    00CE C046      RJMP	0x0115
    00CF 3F67      CPI	R22,0xF7
    00D0 E0E0      LDI	R30,0
    00D1 077E      CPC	R23,R30
    00D2 F099      BEQ	0x00E6
    00D3 3F6B      CPI	R22,0xFB
    00D4 E0E0      LDI	R30,0
    00D5 077E      CPC	R23,R30
    00D6 F069      BEQ	0x00E4
    00D7 3F6D      CPI	R22,0xFD
    00D8 E0E0      LDI	R30,0
    00D9 077E      CPC	R23,R30
    00DA F039      BEQ	0x00E2
    00DB 3F6E      CPI	R22,0xFE
    00DC E0E0      LDI	R30,0
    00DD 077E      CPC	R23,R30
    00DE F009      BEQ	0x00E0
    00DF C035      RJMP	0x0115
(0060) 		{
(0061) 		 	 case 0b11111110: KeyNum = 1;break;
    00E0 E041      LDI	R20,1
    00E1 C033      RJMP	0x0115
(0062) 			 case 0b11111101: KeyNum = 2;break;
    00E2 E042      LDI	R20,2
    00E3 C031      RJMP	0x0115
(0063) 			 case 0b11111011: KeyNum = 3;break;
    00E4 E043      LDI	R20,3
    00E5 C02F      RJMP	0x0115
(0064) 			 case 0b11110111: KeyNum = 4;break;
    00E6 E044      LDI	R20,4
    00E7 C02D      RJMP	0x0115
(0065) 			 case 0b11101111: KeyNum = 5;break;
    00E8 E045      LDI	R20,5
    00E9 C02B      RJMP	0x0115
(0066) 			 case 0b11011111: KeyNum = 6;break;
    00EA E046      LDI	R20,6
    00EB C029      RJMP	0x0115
(0067) 			 case 0b10111111: KeyNum = 7;break;
    00EC E047      LDI	R20,7
    00ED C027      RJMP	0x0115
(0068) 			 case 0b01111111: KeyNum = 8;break;
    00EE E048      LDI	R20,0x8
(0069) 			 default: break;			 
    00EF C025      RJMP	0x0115
(0070) 		}
(0071) 		
(0072) 		while(PINA != 0xff)
(0073) 		{
(0074) 		    DDRB  = 0xff;
    00F0 EF8F      LDI	R24,0xFF
    00F1 BB87      OUT	0x17,R24
(0075) 			PORTB&= ~(1<<(KeyNum-1));//显示对应的发光二极管
    00F2 2F14      MOV	R17,R20
    00F3 5011      SUBI	R17,1
    00F4 E001      LDI	R16,1
    00F5 940E015F  CALL	lsl8
    00F7 2E20      MOV	R2,R16
    00F8 9420      COM	R2
    00F9 B238      IN	R3,0x18
    00FA 2032      AND	R3,R2
    00FB BA38      OUT	0x18,R3
(0076) 			DDRA  = 0xff;         //置端口A为输出
    00FC EF8F      LDI	R24,0xFF
    00FD BB8A      OUT	0x1A,R24
(0077) 			PORTA = 0xff; 		  //全部输出为高电平
    00FE BB8B      OUT	0x1B,R24
(0078) //			DelayMs(1);   		  //延时一段时间
(0079) 			temp  = tab[KeyNum-1];
    00FF E082      LDI	R24,2
    0100 9F84      MUL	R24,R20
    0101 01F0      MOVW	R30,R0
    0102 E58E      LDI	R24,0x5E
    0103 E090      LDI	R25,0
    0104 0FE8      ADD	R30,R24
    0105 1FF9      ADC	R31,R25
    0106 8160      LDD	R22,Z+0
    0107 C001      RJMP	0x0109
(0080) 			while(temp--)
(0081) 				NOP();
    0108 0000      NOP
    0109 2E26      MOV	R2,R22
    010A 2433      CLR	R3
    010B 5061      SUBI	R22,1
    010C 2022      TST	R2
    010D F7D1      BNE	0x0108
(0082) 			DDRD   = (1<<5);
    010E E280      LDI	R24,0x20
    010F BB81      OUT	0x11,R24
(0083) 			PORTD ^= (1<<5);
    0110 B222      IN	R2,0x12
    0111 2628      EOR	R2,R24
    0112 BA22      OUT	0x12,R2
(0084) 			DDRA   = 0x00;	
    0113 2422      CLR	R2
    0114 BA2A      OUT	0x1A,R2
    0115 B389      IN	R24,0x19
    0116 3F8F      CPI	R24,0xFF
    0117 F6C1      BNE	0x00F0
(0085) 		}
(0086) 		DDRB  = 0xff;			  //设为输出
    0118 EF8F      LDI	R24,0xFF
    0119 BB87      OUT	0x17,R24
(0087) 		PORTB = 0xff;			  //灭所有的二极管 
    011A BB88      OUT	0x18,R24
(0088) 	}
    011B 940E013D  CALL	pop_gset2
    011D 9508      RET
(0089) 	
(0090) }
(0091) /*-----------------------------------------------------------------
(0092) 函数名称: void main(void)
(0093) 函数功能: 
(0094) 参    数: 
(0095) 返 回 值: 无
(0096) -----------------------------------------------------------------*/
(0097) void main(void)
(0098) {
(0099)  	DDRB  = 0xff;
_main:
    011E EF8F      LDI	R24,0xFF
    011F BB87      OUT	0x17,R24
(0100) 	PORTB = 0xff;
    0120 BB88      OUT	0x18,R24
    0121 C001      RJMP	0x0123
(0101)  	while(1)
(0102) 	{
(0103) //	 	DelayMs(200);
(0104) 		KeyScan();
FILE: <library>
    0122 DF6D      RCALL	_KeyScan
    0123 CFFE      RJMP	0x0122
    0124 9508      RET
mod8u:
    0125 9468      BSET	6
    0126 C001      RJMP	xdiv8u
div8u:
    0127 94E8      BCLR	6
xdiv8u:
    0128 932A      ST	R18,-Y
    0129 92FA      ST	R15,-Y
    012A 92EA      ST	R14,-Y
    012B 24FF      CLR	R15
    012C 24EE      CLR	R14
    012D E120      LDI	R18,0x10
    012E 0F00      LSL	R16
    012F 1CFF      ROL	R15
    0130 1CEE      ROL	R14
    0131 16E1      CP	R14,R17
    0132 F010      BCS	0x0135
    0133 1AE1      SUB	R14,R17
    0134 9503      INC	R16
    0135 952A      DEC	R18
    0136 F7B9      BNE	0x012E
    0137 F40E      BRTC	0x0139
    0138 2D0E      MOV	R16,R14
    0139 90E9      LD	R14,Y+
    013A 90F9      LD	R15,Y+
    013B 9129      LD	R18,Y+
    013C 9508      RET
pop_gset2:
    013D E0E2      LDI	R30,2
    013E 940C014C  JMP	pop
push_gset5:
    0140 92FA      ST	R15,-Y
    0141 92EA      ST	R14,-Y
push_gset4:
    0142 92DA      ST	R13,-Y
    0143 92CA      ST	R12,-Y
push_gset3:
    0144 92BA      ST	R11,-Y
    0145 92AA      ST	R10,-Y
push_gset2:
    0146 937A      ST	R23,-Y
    0147 936A      ST	R22,-Y
push_gset1:
    0148 935A      ST	R21,-Y
    0149 934A      ST	R20,-Y
    014A 9508      RET
pop_gset1:
    014B E0E1      LDI	R30,1
pop:
    014C 9149      LD	R20,Y+
    014D 9159      LD	R21,Y+
    014E FDE0      SBRC	R30,0
    014F 9508      RET
    0150 9169      LD	R22,Y+
    0151 9179      LD	R23,Y+
    0152 FDE1      SBRC	R30,1
    0153 9508      RET
    0154 90A9      LD	R10,Y+
    0155 90B9      LD	R11,Y+
    0156 FDE2      SBRC	R30,2
    0157 9508      RET
    0158 90C9      LD	R12,Y+
    0159 90D9      LD	R13,Y+
    015A FDE3      SBRC	R30,3
    015B 9508      RET
    015C 90E9      LD	R14,Y+
    015D 90F9      LD	R15,Y+
    015E 9508      RET
lsl8:
    015F 2311      TST	R17
    0160 F019      BEQ	0x0164
    0161 0F00      LSL	R16
    0162 951A      DEC	R17
    0163 CFFB      RJMP	lsl8
    0164 9508      RET

⌨️ 快捷键说明

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