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

📄 jianpan.lst

📁 实现3*3 键盘的控制。从而实现用键盘来对单片机进行控制。
💻 LST
📖 第 1 页 / 共 4 页
字号:
    025A E010      LDI	R17,0
    025B DE03      RCALL	_delay
(0283)     			break;
(0284)    }
(0285) }
    025C 940E04B5  CALL	pop_gset2
    025E 9508      RET
_num_bit:
  bit                  --> R20
  Val                  --> R16
    025F 940E04BB  CALL	push_gset1
(0286) 
(0287) uchar num_bit( uint Val )
(0288) {
(0289) 	uchar bit;
(0290) 	if(Val>=10000) 		{ bit = 5; }
    0261 3100      CPI	R16,0x10
    0262 E2E7      LDI	R30,0x27
    0263 071E      CPC	R17,R30
    0264 F010      BCS	0x0267
    0265 E045      LDI	R20,5
    0266 C018      RJMP	0x027F
(0291) 	else if(Val>=1000) 	{ bit = 4; }
    0267 3E08      CPI	R16,0xE8
    0268 E0E3      LDI	R30,3
    0269 071E      CPC	R17,R30
    026A F010      BCS	0x026D
    026B E044      LDI	R20,4
    026C C012      RJMP	0x027F
(0292) 	else if(Val>=100 )	{ bit = 3; }
    026D 3604      CPI	R16,0x64
    026E E0E0      LDI	R30,0
    026F 071E      CPC	R17,R30
    0270 F010      BCS	0x0273
    0271 E043      LDI	R20,3
    0272 C00C      RJMP	0x027F
(0293) 	else if(Val>=10 )	{ bit = 2; }
    0273 300A      CPI	R16,0xA
    0274 E0E0      LDI	R30,0
    0275 071E      CPC	R17,R30
    0276 F010      BCS	0x0279
    0277 E042      LDI	R20,2
    0278 C006      RJMP	0x027F
(0294) 	else if( Val )		{ bit = 1; }
    0279 3000      CPI	R16,0
    027A 0701      CPC	R16,R17
    027B F011      BEQ	0x027E
    027C E041      LDI	R20,1
    027D C001      RJMP	0x027F
(0295) 	else { bit = 1; }
    027E E041      LDI	R20,1
(0296) 	return ( bit );
    027F 2F04      MOV	R16,R20
    0280 940E04BE  CALL	pop_gset1
    0282 9508      RET
(0297) }
(0298) //
(0299) void init_transbuf(void)
(0300) {
(0301) 	uchar tmp;
(0302) 	for(tmp=0;tmp<20;tmp++)
_init_transbuf:
  tmp                  --> R16
    0283 2700      CLR	R16
    0284 C009      RJMP	0x028E
(0303) 	 trans_buf[tmp]=0xff;
    0285 E881      LDI	R24,0x81
    0286 E090      LDI	R25,0
    0287 2FE0      MOV	R30,R16
    0288 27FF      CLR	R31
    0289 0FE8      ADD	R30,R24
    028A 1FF9      ADC	R31,R25
    028B EF8F      LDI	R24,0xFF
    028C 8380      STD	Z+0,R24
    028D 9503      INC	R16
    028E 3104      CPI	R16,0x14
    028F F3A8      BCS	0x0285
(0304) 	}
    0290 9508      RET
_edit:
  KeyIndex             --> R20
  flag                 --> R22
  i                    --> R10
    0291 940E04DE  CALL	push_gset5
(0305) //
(0306) void edit(void)
(0307) {
(0308) 	uchar flag=STATE;
    0293 E06F      LDI	R22,0xF
(0309) 	uchar i;
(0310) 	init_transbuf();
    0294 DFEE      RCALL	_init_transbuf
(0311) 	numL=0;
    0295 2422      CLR	R2
    0296 2433      CLR	R3
    0297 92300066  STS	0x66,R3
    0299 92200065  STS	0x65,R2
    029B C130      RJMP	0x03CC
(0312) 	while(flag!=0xff)
(0313) 	{
(0314) 	if( !(PIND&BIT(PD2)) )	// 检测按键状态
    029C 9982      SBIC	0x10,2
    029D C12D      RJMP	0x03CB
(0315) 	{ 
(0316) 		display();					//延时
    029E DE96      RCALL	_display
(0317) 		display();					//延时
    029F DE95      RCALL	_display
(0318) 		if( !(PIND & BIT(PD2)) )	//再次检测按键状态
    02A0 9982      SBIC	0x10,2
    02A1 C129      RJMP	0x03CB
(0319) 	  	{
(0320) 			uchar KeyIndex = scan_key();	// 读取扫描序号
    02A2 DDFB      RCALL	_scan_key
    02A3 2F40      MOV	R20,R16
    02A4 C002      RJMP	0x02A7
(0321) 			while( !(PIND & BIT(PD2)) ) { WDR(); display(); };	//等待按键松开
    02A5 95A8      WDR
    02A6 DE8E      RCALL	_display
    02A7 9B82      SBIS	0x10,2
    02A8 CFFC      RJMP	0x02A5
(0322) 			for( i = 0; i < 5; i ++ ) { display(); }		//延时
    02A9 24AA      CLR	R10
    02AA C002      RJMP	0x02AD
    02AB DE89      RCALL	_display
    02AC 94A3      INC	R10
    02AD 2D8A      MOV	R24,R10
    02AE 3085      CPI	R24,5
    02AF F3D8      BCS	0x02AB
(0323) 			//backspace
(0324) 			if((KeySet[KeyIndex]==1|(KeySet[KeyIndex]==2))&&(flag==STATE))
    02B0 E584      LDI	R24,0x54
    02B1 E090      LDI	R25,0
    02B2 2FE4      MOV	R30,R20
    02B3 27FF      CLR	R31
    02B4 0FE8      ADD	R30,R24
    02B5 1FF9      ADC	R31,R25
    02B6 91E4      LPM	R30,0(Z)
    02B7 30E1      CPI	R30,1
    02B8 F421      BNE	0x02BD
    02B9 E081      LDI	R24,1
    02BA E090      LDI	R25,0
    02BB 016C      MOVW	R12,R24
    02BC C002      RJMP	0x02BF
    02BD 24CC      CLR	R12
    02BE 24DD      CLR	R13
    02BF E584      LDI	R24,0x54
    02C0 E090      LDI	R25,0
    02C1 2FE4      MOV	R30,R20
    02C2 27FF      CLR	R31
    02C3 0FE8      ADD	R30,R24
    02C4 1FF9      ADC	R31,R25
    02C5 91E4      LPM	R30,0(Z)
    02C6 30E2      CPI	R30,2
    02C7 F421      BNE	0x02CC
    02C8 E081      LDI	R24,1
    02C9 E090      LDI	R25,0
    02CA 015C      MOVW	R10,R24
    02CB C002      RJMP	0x02CE
    02CC 24AA      CLR	R10
    02CD 24BB      CLR	R11
    02CE 0116      MOVW	R2,R12
    02CF 282A      OR	R2,R10
    02D0 283B      OR	R3,R11
    02D1 2022      TST	R2
    02D2 F411      BNE	0x02D5
    02D3 2033      TST	R3
    02D4 F0D9      BEQ	0x02F0
    02D5 306F      CPI	R22,0xF
    02D6 F4C9      BNE	0x02F0
(0325) 			{
(0326) 			 trans_buf[0]=KeySet[KeyIndex];
(0327) 			 flag=1;
(0328) 			 numH=10*KeySet[KeyIndex]+flag;
(0329) 			 NumBitH=num_bit(numH);
    02D7 E584      LDI	R24,0x54
    02D8 E090      LDI	R25,0
    02D9 2E24      MOV	R2,R20
    02DA 2433      CLR	R3
    02DB 0E28      ADD	R2,R24
    02DC 1E39      ADC	R3,R25
    02DD 01F1      MOVW	R30,R2
    02DE 91E4      LPM	R30,0(Z)
    02DF 93E00081  STS	_trans_buf,R30
    02E1 E061      LDI	R22,1
    02E2 01F1      MOVW	R30,R2
    02E3 91E4      LPM	R30,0(Z)
    02E4 E08A      LDI	R24,0xA
    02E5 9F8E      MUL	R24,R30
    02E6 2C20      MOV	R2,R0
    02E7 0E26      ADD	R2,R22
    02E8 92200067  STS	0x67,R2
    02EA 2D02      MOV	R16,R2
    02EB 2711      CLR	R17
    02EC DF72      RCALL	_num_bit
    02ED 9300006A  STS	0x6A,R16
(0330) 			}
    02EF C0DB      RJMP	0x03CB
(0331) 			else if(KeySet[KeyIndex]==3&&(flag==STATE))
    02F0 E584      LDI	R24,0x54
    02F1 E090      LDI	R25,0
    02F2 2FE4      MOV	R30,R20
    02F3 27FF      CLR	R31
    02F4 0FE8      ADD	R30,R24
    02F5 1FF9      ADC	R31,R25
    02F6 91E4      LPM	R30,0(Z)
    02F7 30E3      CPI	R30,3
    02F8 F461      BNE	0x0305
    02F9 306F      CPI	R22,0xF
    02FA F451      BNE	0x0305
(0332) 			{
(0333) 			 trans_buf[0]=KeySet[KeyIndex];
(0334) 			 transmit();
    02FB 2FE4      MOV	R30,R20
    02FC 27FF      CLR	R31
    02FD 0FE8      ADD	R30,R24
    02FE 1FF9      ADC	R31,R25
    02FF 91E4      LPM	R30,0(Z)
    0300 93E00081  STS	_trans_buf,R30
    0302 DDC1      RCALL	_transmit
(0335) 			 flag=0xff;
    0303 EF6F      LDI	R22,0xFF
(0336) 			}
    0304 C0C6      RJMP	0x03CB
(0337) 			else if((flag>=PAR1)&&(flag<=PAR7)&&( KeySet[KeyIndex]!=ENTER)&&( KeySet[KeyIndex]!=CANCEL))
    0305 3061      CPI	R22,1
    0306 F160      BCS	0x0333
    0307 E087      LDI	R24,7
    0308 1786      CP	R24,R22
    0309 F148      BCS	0x0333
    030A E584      LDI	R24,0x54
    030B E090      LDI	R25,0
    030C 2FE4      MOV	R30,R20
    030D 27FF      CLR	R31
    030E 0FE8      ADD	R30,R24
    030F 1FF9      ADC	R31,R25
    0310 9024      LPM	R2,0(Z)
    0311 2433      CLR	R3
    0312 2D82      MOV	R24,R2
    0313 308F      CPI	R24,0xF
    0314 F0F1      BEQ	0x0333
    0315 308C      CPI	R24,0xC
    0316 F0E1      BEQ	0x0333
(0338) 			{
(0339) 			 numL=10*numL+KeySet[KeyIndex];
(0340) 			 NumBitL=num_bit(numL);
    0317 E584      LDI	R24,0x54
    0318 E090      LDI	R25,0
    0319 2FE4      MOV	R30,R20
    031A 27FF      CLR	R31
    031B 0FE8      ADD	R30,R24
    031C 1FF9      ADC	R31,R25
    031D 9024      LPM	R2,0(Z)
    031E 2433      CLR	R3
    031F 91200065  LDS	R18,0x65
    0321 91300066  LDS	R19,0x66
    0323 E00A      LDI	R16,0xA
    0324 E010      LDI	R17,0
    0325 940E04A5  CALL	empy16s
    0327 0128      MOVW	R4,R16
    0328 0C42      ADD	R4,R2
    0329 1C53      ADC	R5,R3
    032A 92500066  STS	0x66,R5
    032C 92400065  STS	0x65,R4
    032E 0182      MOVW	R16,R4
    032F DF2F      RCALL	_num_bit
    0330 93000069  STS	0x69,R16
(0341) 			}
    0332 C098      RJMP	0x03CB
(0342) 			else if(KeySet[KeyIndex]==CANCEL)
    0333 E584      LDI	R24,0x54
    0334 E090      LDI	R25,0
    0335 2FE4      MOV	R30,R20
    0336 27FF      CLR	R31
    0337 0FE8      ADD	R30,R24
    0338 1FF9      ADC	R31,R25
    0339 91E4      LPM	R30,0(Z)
    033A 30EC      CPI	R30,0xC
    033B F481      BNE	0x034C
(0343) 			{
(0344) 			 numL = numL/10;
(0345) 			 NumBitL = num_bit(numL);
    033C E02A      LDI	R18,0xA
    033D E030      LDI	R19,0
    033E 91000065  LDS	R16,0x65
    0340 91100066  LDS	R17,0x66
    0342 940E0473  CALL	div16u
    0344 93100066  STS	0x66,R17
    0346 93000065  STS	0x65,R16
    0348 DF16      RCALL	_num_bit
    0349 93000069  STS	0x69,R16
(0346) 			}
    034B C07F      RJMP	0x03CB
(0347) 			else if(KeySet[KeyIndex]==ENTER)
    034C E584      LDI	R24,0x54
    034D E090      LDI	R25,0
    034E 2FE4      MOV	R30,R20
    034F 27FF      CLR	R31
    0350 0FE8      ADD	R30,R24
    0351 1FF9      ADC	R31,R25
    0352 91E4      LPM	R30,0(Z)
    0353 30EF      CPI	R30,0xF
    0354 F009      BEQ	0x0356
    0355 C03C      RJMP	0x0392
(0348) 			{
(0349) 			 trans_buf[flag]=numL;
    0356 E881      LDI	R24,0x81
    0357 E090      LDI	R25,0
    0358 2FE6      MOV	R30,R22
    0359 27FF      CLR	R31
    035A 0FE8      ADD	R30,R24
    035B 1FF9      ADC	R31,R25
    035C 90200065  LDS	R2,0x65
    035E 90300066  LDS	R3,0x66
    0360 8220      STD	Z+0,R2
(0350) 			 flag++;
(0351) 			 numH++;
(0352) 			 numL=0;
(0353) 			 NumBitL=0;
(0354) 			 if ((flag==Model1_flag)&&(numH/10==1))//模式1参数个数Model1_flag
    0361 9563      INC	R22
    0362 91800067  LDS	R24,0x67
    0364 5F8F      SUBI	R24,0xFF
    0365 93800067  STS	0x67,R24
    0367 2422      CLR	R2
    0368 2433      CLR	R3
    0369 92300066  STS	0x66,R3
    036B 92200065  STS	0x65,R2
    036D 92200069  STS	0x69,R2
    036F 3068      CPI	R22,0x8
    0370 F471      BNE	0x037F
    0371 E01A      LDI	R17,0xA
    0372 2F08      MOV	R16,R24
    0373 940E048F  CALL	div8u
    0375 3001      CPI	R16,1
    0376 F441      BNE	0x037F
(0355) 			 {
(0356) 			  flag=0xff;
(0357) 			  transmit();
    0377 EF6F      LDI	R22,0xFF
    0378 DD4B      RCALL	_transmit
(0358) 			  numH=0;
(0359) 			  NumBitH=0;
    0379 2422      CLR	R2
    037A 92200067  STS	0x67,R2
    037C 9220006A  STS	0x6A,R2
(0360) 			 }
    037E C04C      RJMP	0x03CB
(0361) 			 else if ((flag==Model2_flag)&&(numH/10==2))//模式2参数个数Model2_flag
    037F 3064      CPI	R22,4
    0380 F009      BEQ	0x0382
    0381 C049      RJMP	0x03CB
    0382 E01A      LDI	R17,0xA
    0383 91000067  LDS	R16,0x67
    0385 940E048F  CALL	div8u
    0387 3002      CPI	R16,2
    0388 F009      BEQ	0x038A
    0389 C041      RJMP	0x03CB
(0362) 			 {
(0363) 			  flag=0xff;
(0364) 			  transmit();
    038A EF6F      LDI	R22,0xFF
    038B DD38      RCALL	_transmit
(0365) 			  numH=0;
(0366) 			  NumBitH=0;
    038C 2422      CLR	R2
    038D 92200067  STS	0x67,R2
    038F 9220006A  STS	0x6A,R2
(0367) 			 }
(0368) 			}
    0391 C039      RJMP	0x03CB
(0369) 			else if(((KeySet[KeyIndex]!=1)|(KeySet[KeyIndex]!=2)|(KeySet[KeyIndex]!=3))&&(flag==STATE)) {edit();}
    0392 E584      LDI	R24,0x54
    0393 E090      LDI	R25,0
    0394 2FE4      MOV	R30,R20
    0395 27FF      CLR	R31
    0396 0FE8      ADD	R30,R24
    0397 1FF9      ADC	R31,R25
    0398 91E4      LPM	R30,0(Z)
    0399 30E1      CPI	R30,1
    039A F021      BEQ	0x039F
    039B E081      LDI	R24,1
    039C E090      LDI	R25,0
    039D 017C      MOVW	R14,R24
    039E C002      RJMP	0x03A1
    039F 24EE      CLR	R14
    03A0 24FF      CLR	R15
    03A1 E584      LDI	R24,0x54
    03A2 E090      LDI	R25,0

⌨️ 快捷键说明

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