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

📄 键盘.lst

📁 基于AVR实验平台下ATMega128芯片实习作业
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    048F EFCF      LDI	R28,0xFF
    0490 E1D0      LDI	R29,0x10
    0491 BFCD      OUT	0x3D,R28
    0492 BFDE      OUT	0x3E,R29
    0493 51C0      SUBI	R28,0x10
    0494 40D0      SBCI	R29,0
    0495 EA0A      LDI	R16,0xAA
    0496 8308      STD	Y+0,R16
    0497 2400      CLR	R0
    0498 E5E9      LDI	R30,0x59
    0499 E0F9      LDI	R31,0x9
    049A E019      LDI	R17,0x9
    049B 35E9      CPI	R30,0x59
    049C 07F1      CPC	R31,R17
    049D F011      BEQ	0x04A0
    049E 9201      ST	R0,Z+
    049F CFFB      RJMP	0x049B
    04A0 8300      STD	Z+0,R16
    04A1 ECE4      LDI	R30,0xC4
    04A2 E0F0      LDI	R31,0
    04A3 E0A0      LDI	R26,0
    04A4 E0B1      LDI	R27,1
    04A5 E019      LDI	R17,0x9
    04A6 31ED      CPI	R30,0x1D
    04A7 07F1      CPC	R31,R17
    04A8 F021      BEQ	0x04AD
    04A9 95C8      LPM
    04AA 9631      ADIW	R30,1
    04AB 920D      ST	R0,X+
    04AC CFF9      RJMP	0x04A6
    04AD 940E0629  CALL	_main
_exit:
    04AF CFFF      RJMP	_exit
_delay:
  i                    --> R20
  t                    --> R16
    04B0 940E0745  CALL	push_gset1
FILE: C:\DOCUME~1\user\MYDOCU~1\李智(正)\键盘\键盘.c
(0001) #include <iom128v.h>
(0002) #define req asm("sbi 0x03,6")
(0003) #define cl_req asm("cbi 0x03,6")
(0004) #define dat asm("sbi 0x18,0")
(0005) #define cl_dat asm("cbi 0x18,0")
(0006) #define cl_reset asm("cbi 0x15,3")
(0007) #define set_reset asm("sbi 0x15,3")
(0008) #define LCD 0x9000
(0009) 
(0010) void delay (unsigned int t)
(0011) {
(0012) unsigned char i;
(0013) for (i=1;i<t;i++);
    04B2 E041      LDI	R20,1
    04B3 C001      RJMP	0x04B5
    04B4 9543      INC	R20
    04B5 2E24      MOV	R2,R20
    04B6 2433      CLR	R3
    04B7 1620      CP	R2,R16
    04B8 0631      CPC	R3,R17
    04B9 F3D0      BCS	0x04B4
    04BA 940E0748  CALL	pop_gset1
    04BC 9508      RET
(0014) }
(0015) void delay_1ms(void)                
(0016)   {
(0017)    unsigned int i;
(0018)    for (i=0;i<2286;i++);
_delay_1ms:
  i                    --> R16
    04BD 2700      CLR	R16
    04BE 2711      CLR	R17
    04BF C002      RJMP	0x04C2
    04C0 5F0F      SUBI	R16,0xFF
    04C1 4F1F      SBCI	R17,0xFF
    04C2 3E0E      CPI	R16,0xEE
    04C3 E0E8      LDI	R30,0x8
    04C4 071E      CPC	R17,R30
    04C5 F3D0      BCS	0x04C0
    04C6 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    04C7 940E0743  CALL	push_gset2
    04C9 01B8      MOVW	R22,R16
(0019)   }
(0020) void delay_nms(unsigned int n)      
(0021)   {
(0022)    unsigned int i=0;
    04CA 2744      CLR	R20
    04CB 2755      CLR	R21
(0023)    for (i=0;i<n;i++)
    04CC C003      RJMP	0x04D0
(0024)    delay_1ms();
    04CD DFEF      RCALL	_delay_1ms
    04CE 5F4F      SUBI	R20,0xFF
    04CF 4F5F      SBCI	R21,0xFF
    04D0 1746      CP	R20,R22
    04D1 0757      CPC	R21,R23
    04D2 F3D0      BCS	0x04CD
    04D3 940E0734  CALL	pop_gset2
    04D5 9508      RET
(0025)   }
(0026)   
(0027) void l_delay()                                     /* 延时  */
(0028) {
(0029)     unsigned char i=33;
_l_delay:
  i                    --> R16
    04D6 E201      LDI	R16,0x21
    04D7 C001      RJMP	0x04D9
(0030) 	
(0031)     while(i!=0)
(0032)     {
(0033) 	i--;
    04D8 950A      DEC	R16
    04D9 2300      TST	R16
    04DA F7E9      BNE	0x04D8
    04DB 9508      RET
(0034) 	}
(0035) }
(0036) 
(0037) void s_delay()                                      /* 延时  */
(0038) {
(0039)     unsigned char i=11;
_s_delay:
  i                    --> R16
    04DC E00B      LDI	R16,0xB
    04DD C001      RJMP	0x04DF
(0040) 	
(0041)     while(i!=0)
(0042)     {
(0043)     i--;
    04DE 950A      DEC	R16
    04DF 2300      TST	R16
    04E0 F7E9      BNE	0x04DE
    04E1 9508      RET
_move:
  i                    --> R20
    04E2 940E0745  CALL	push_gset1
(0044)     }
(0045) }  
(0046) 
(0047) void move()
(0048) {int i;
(0049)  for(i=0;i<128;i++)
    04E4 2744      CLR	R20
    04E5 2755      CLR	R21
(0050) {lcd_w(0xf8);
    04E6 EF08      LDI	R16,0xF8
    04E7 E010      LDI	R17,0
    04E8 D01F      RCALL	_lcd_w
(0051) delay_nms(2);}
    04E9 E002      LDI	R16,2
    04EA E010      LDI	R17,0
    04EB DFDB      RCALL	_delay_nms
    04EC 5F4F      SUBI	R20,0xFF
    04ED 4F5F      SBCI	R21,0xFF
    04EE 3840      CPI	R20,0x80
    04EF E0E0      LDI	R30,0
    04F0 075E      CPC	R21,R30
    04F1 F3A4      BLT	0x04E6
    04F2 940E0748  CALL	pop_gset1
    04F4 9508      RET
_move1:
  i                    --> R20
    04F5 940E0745  CALL	push_gset1
(0052)   }
(0053)   
(0054) void move1()
(0055) {int i;
(0056)  for(i=0;i<64;i++)
    04F7 2744      CLR	R20
    04F8 2755      CLR	R21
(0057) {lcd_w(0xf6);
    04F9 EF06      LDI	R16,0xF6
    04FA E010      LDI	R17,0
    04FB D00C      RCALL	_lcd_w
(0058) delay_nms(2);}
    04FC E002      LDI	R16,2
    04FD E010      LDI	R17,0
    04FE DFC8      RCALL	_delay_nms
    04FF 5F4F      SUBI	R20,0xFF
    0500 4F5F      SBCI	R21,0xFF
    0501 3440      CPI	R20,0x40
    0502 E0E0      LDI	R30,0
    0503 075E      CPC	R21,R30
    0504 F3A4      BLT	0x04F9
    0505 940E0748  CALL	pop_gset1
    0507 9508      RET
_lcd_w:
  p                    --> R20
  data                 --> R16
    0508 940E0745  CALL	push_gset1
(0059)   }
(0060) void lcd_w(unsigned char data)
(0061) {unsigned char *p=(unsigned char *)(LCD);
    050A E040      LDI	R20,0
    050B E950      LDI	R21,0x90
(0062) while((PINE&0x80)!=0x00);
    050C B181      IN	R24,0x01
    050D 7880      ANDI	R24,0x80
    050E F7E9      BNE	0x050C
(0063) dat;
    050F 9AC0      SBI	0x18,0
(0064) *p=data;
    0510 01FA      MOVW	R30,R20
    0511 8300      STD	Z+0,R16
(0065) cl_dat;
    0512 98C0      CBI	0x18,0
(0066) ;;
(0067) req;
    0513 9A1E      SBI	0x03,6
(0068) ;;
(0069) while((PINE&0x80)==0x00);
    0514 B181      IN	R24,0x01
    0515 7880      ANDI	R24,0x80
    0516 F3E9      BEQ	0x0514
(0070) cl_req;
    0517 981E      CBI	0x03,6
    0518 940E0748  CALL	pop_gset1
    051A 9508      RET
(0071) }
(0072) void lcd_init (void)
(0073) {
(0074) MCUCR=MCUCR|0x80;
_lcd_init:
    051B B785      IN	R24,0x35
    051C 6880      ORI	R24,0x80
    051D BF85      OUT	0x35,R24
(0075) DDRB|=0x01;
    051E 9AB8      SBI	0x17,0
(0076) PORTB&=0xfe;
    051F B388      IN	R24,0x18
    0520 7F8E      ANDI	R24,0xFE
    0521 BB88      OUT	0x18,R24
(0077) DDRE=0x40;
    0522 E480      LDI	R24,0x40
    0523 B982      OUT	0x02,R24
(0078) PORTE=0xff;
    0524 EF8F      LDI	R24,0xFF
    0525 B983      OUT	0x03,R24
(0079) cl_reset;
    0526 98AB      CBI	0x15,3
(0080) delay(10);
    0527 E00A      LDI	R16,0xA
    0528 E010      LDI	R17,0
    0529 DF86      RCALL	_delay
(0081) set_reset;
    052A 9AAB      SBI	0x15,3
(0082) delay(10);
    052B E00A      LDI	R16,0xA
    052C E010      LDI	R17,0
    052D DF82      RCALL	_delay
(0083) cl_req;
    052E 981E      CBI	0x03,6
(0084) delay(10);
    052F E00A      LDI	R16,0xA
    0530 E010      LDI	R17,0
    0531 DF7E      RCALL	_delay
    0532 9508      RET
(0085) }
(0086) void lcd_clear (void)
(0087) {
(0088) lcd_w(0xf4);
_lcd_clear:
    0533 EF04      LDI	R16,0xF4
    0534 DFD3      RCALL	_lcd_w
    0535 9508      RET
_lcd_putsc:
  ch                   --> R20
  y                    --> R22
  x                    --> R10
    0536 940E0741  CALL	push_gset3
    0538 2F62      MOV	R22,R18
    0539 2EA0      MOV	R10,R16
    053A 814E      LDD	R20,Y+6
    053B 815F      LDD	R21,Y+7
(0089) }
(0090) 
(0091) 
(0092) void lcd_putsc (unsigned char x,unsigned char y,unsigned char *ch)
(0093) {
(0094) x+=2;
    053C 2D8A      MOV	R24,R10
    053D 5F8E      SUBI	R24,0xFE
    053E 2EA8      MOV	R10,R24
    053F C01A      RJMP	0x055A
(0095) while (*ch!=0)
(0096) {
(0097) lcd_w(0xf0);
    0540 EF00      LDI	R16,0xF0
    0541 DFC6      RCALL	_lcd_w
(0098) lcd_w(x);
    0542 2D0A      MOV	R16,R10
    0543 DFC4      RCALL	_lcd_w
(0099) lcd_w(y);
    0544 2F06      MOV	R16,R22
    0545 DFC2      RCALL	_lcd_w
(0100) lcd_w(*ch-0xa0);
    0546 01FA      MOVW	R30,R20
    0547 8100      LDD	R16,Z+0
    0548 5A00      SUBI	R16,0xA0
    0549 DFBE      RCALL	_lcd_w
(0101) ch++;
    054A 5F4F      SUBI	R20,0xFF
    054B 4F5F      SBCI	R21,0xFF
(0102) lcd_w(*ch-0xa0);
    054C 01FA      MOVW	R30,R20
    054D 8100      LDD	R16,Z+0
    054E 5A00      SUBI	R16,0xA0
    054F DFB8      RCALL	_lcd_w
(0103) ch++;
    0550 5F4F      SUBI	R20,0xFF
    0551 4F5F      SBCI	R21,0xFF
(0104) if (x>=0x09)
    0552 2D8A      MOV	R24,R10
    0553 3089      CPI	R24,0x9
    0554 F020      BCS	0x0559
(0105) {
(0106) x=2;
    0555 E082      LDI	R24,2
    0556 2EA8      MOV	R10,R24
(0107) y+=1;
    0557 9563      INC	R22
(0108) }
    0558 C001      RJMP	0x055A
(0109) else 
(0110) x++;
    0559 94A3      INC	R10
    055A 01FA      MOVW	R30,R20
    055B 8020      LDD	R2,Z+0
    055C 2022      TST	R2
    055D F711      BNE	0x0540
    055E 940E0737  CALL	pop_gset3
    0560 9508      RET
_lcd_putsm:
  i                    --> R20
  ch                   --> R22
  y                    --> R10
  x                    --> R12
    0561 940E073F  CALL	push_gset4
    0563 2EA2      MOV	R10,R18
    0564 2EC0      MOV	R12,R16
    0565 8568      LDD	R22,Y+8
    0566 8579      LDD	R23,Y+9
(0111) }
(0112) }
(0113) 
(0114) void lcd_putsm(unsigned char x,unsigned char y,unsigned char *ch)
(0115) {int i;
(0116) x+=2;
    0567 2D8C      MOV	R24,R12
    0568 5F8E      SUBI	R24,0xFE
    0569 2EC8      MOV	R12,R24
    056A C01F      RJMP	0x058A
(0117) while (*ch!=0)
(0118) {
(0119) lcd_w(0xf0);
    056B EF00      LDI	R16,0xF0
    056C DF9B      RCALL	_lcd_w
(0120) lcd_w(x);
    056D 2D0C      MOV	R16,R12
    056E DF99      RCALL	_lcd_w
(0121) lcd_w(y);
    056F 2D0A      MOV	R16,R10
    0570 DF97      RCALL	_lcd_w
(0122) lcd_w(*ch-0xa0);
    0571 01FB      MOVW	R30,R22
    0572 8100      LDD	R16,Z+0
    0573 5A00      SUBI	R16,0xA0
    0574 DF93      RCALL	_lcd_w
(0123) ch++;
    0575 5F6F      SUBI	R22,0xFF
    0576 4F7F      SBCI	R23,0xFF
(0124) lcd_w(*ch-0xa0);
    0577 01FB      MOVW	R30,R22
    0578 8100      LDD	R16,Z+0
    0579 5A00      SUBI	R16,0xA0
    057A DF8D      RCALL	_lcd_w
(0125) ch++;
    057B 5F6F      SUBI	R22,0xFF
    057C 4F7F      SBCI	R23,0xFF
(0126) for(i=0;i<16;i++)
    057D 2744      CLR	R20
    057E 2755      CLR	R21
(0127) {lcd_w(0xf8);
    057F EF08      LDI	R16,0xF8
    0580 DF87      RCALL	_lcd_w
(0128) delay_nms(2);}
    0581 E002      LDI	R16,2
    0582 E010      LDI	R17,0
    0583 DF43      RCALL	_delay_nms
    0584 5F4F      SUBI	R20,0xFF
    0585 4F5F      SBCI	R21,0xFF
    0586 3140      CPI	R20,0x10
    0587 E0E0      LDI	R30,0
    0588 075E      CPC	R21,R30
    0589 F3AC      BLT	0x057F
    058A 01FB      MOVW	R30,R22
    058B 8020      LDD	R2,Z+0

⌨️ 快捷键说明

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