?? lesson5.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 + -