📄 键盘.lst
字号:
__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 + -