📄 int_key.lst
字号:
__start:
__text_start:
0033 E5CF LDI R28,0x5F
0034 E0D4 LDI R29,4
0035 BFCD OUT 0x3D,R28
0036 BFDE OUT 0x3E,R29
0037 51C0 SUBI R28,0x10
0038 40D0 SBCI R29,0
0039 EA0A LDI R16,0xAA
003A 8308 STD Y+0,R16
003B 2400 CLR R0
003C E6E0 LDI R30,0x60
003D E0F0 LDI R31,0
003E E010 LDI R17,0
003F 36E4 CPI R30,0x64
0040 07F1 CPC R31,R17
0041 F011 BEQ 0x0044
0042 9201 ST R0,Z+
0043 CFFB RJMP 0x003F
0044 8300 STD Z+0,R16
0045 E6E5 LDI R30,0x65
0046 E0F0 LDI R31,0
0047 E6A0 LDI R26,0x60
0048 E0B0 LDI R27,0
0049 E010 LDI R17,0
004A 36E5 CPI R30,0x65
004B 07F1 CPC R31,R17
004C F021 BEQ 0x0051
004D 95C8 LPM
004E 9631 ADIW R30,1
004F 920D ST R0,X+
0050 CFF9 RJMP 0x004A
0051 940E0132 CALL _main
_exit:
0053 CFFF RJMP _exit
_delay100us:
i --> R20
n --> R16
0054 940E0156 CALL push_gset1
FILE: E:\avr\2.10.5\main.c
(0001) //ICC-AVR application builder : 2007-5-23 0:45:25
(0002) // Target : M16
(0003) // Crystal: 1.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) typedef unsigned char uint8;//可移植的8位无符号变量
(0008) typedef unsigned int uint16;//可移植的16位无符号变量
(0009) #pragma data:code
(0010) const uint8 seg7_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F and "shut"
(0011) #pragma data:data
(0012) volatile uint8 seg7_led_buff[4];//禁止编译器优化,保护数组内容
(0013)
(0014) #define seg7_bitselect_port PORTD
(0015) #define seg7_bitselect_ddr DDRD
(0016) #define seg7_bit0 4
(0017) #define seg7_bit1 5
(0018) #define seg7_bit2 6
(0019) #define seg7_bit3 7
(0020) #define seg7_bit0_en() {seg7_bitselect_ddr|=(1<<seg7_bit0);seg7_bitselect_port|=(1<<seg7_bit0);}
(0021) #define seg7_bit0_dis() {seg7_bitselect_ddr|=(1<<seg7_bit0);seg7_bitselect_port&=~(1<<seg7_bit0);}
(0022) #define seg7_bit1_en() {seg7_bitselect_ddr|=(1<<seg7_bit1);seg7_bitselect_port|=(1<<seg7_bit1);}
(0023) #define seg7_bit1_dis() {seg7_bitselect_ddr|=(1<<seg7_bit1);seg7_bitselect_port&=~(1<<seg7_bit1);}
(0024) #define seg7_bit2_en() {seg7_bitselect_ddr|=(1<<seg7_bit2);seg7_bitselect_port|=(1<<seg7_bit2);}
(0025) #define seg7_bit2_dis() {seg7_bitselect_ddr|=(1<<seg7_bit2);seg7_bitselect_port&=~(1<<seg7_bit2);}
(0026) #define seg7_bit3_en() {seg7_bitselect_ddr|=(1<<seg7_bit3);seg7_bitselect_port|=(1<<seg7_bit3);}
(0027) #define seg7_bit3_dis() {seg7_bitselect_ddr|=(1<<seg7_bit3);seg7_bitselect_port&=~(1<<seg7_bit3);}
(0028) #define seg7_data_port PORTA
(0029) #define seg7_data_ddr DDRA
(0030)
(0031) void delay100us(uint8 n)
(0032) {
(0033) uint8 i;
(0034) for(i=100*n;i!=0;i--)
0056 E684 LDI R24,0x64
0057 9F80 MUL R24,R16
0058 2D40 MOV R20,R0
0059 C002 RJMP 0x005C
(0035) NOP();
005A 0000 NOP
005B 954A DEC R20
005C 2344 TST R20
005D F7E1 BNE 0x005A
005E 940E0159 CALL pop_gset1
0060 9508 RET
(0036) }
(0037)
(0038) void seg7_led_update(void)//数码管扫描
(0039) {
(0040) seg7_data_port=seg7_data[seg7_led_buff[0]];
_seg7_led_update:
0061 E584 LDI R24,0x54
0062 E090 LDI R25,0
0063 91E00060 LDS R30,seg7_led_buff
0065 27FF CLR R31
0066 0FE8 ADD R30,R24
0067 1FF9 ADC R31,R25
0068 91E4 LPM R30,0(Z)
0069 BBEB OUT 0x1B,R30
(0041) seg7_bit0_en();
006A 9A8C SBI 0x11,4
006B 9A94 SBI 0x12,4
(0042) delay100us(1);
006C E001 LDI R16,1
006D DFE6 RCALL _delay100us
(0043) seg7_bit0_dis();
006E 9A8C SBI 0x11,4
006F 9894 CBI 0x12,4
(0044) seg7_data_port=seg7_data[seg7_led_buff[1]];
0070 E584 LDI R24,0x54
0071 E090 LDI R25,0
0072 91E00061 LDS R30,seg7_led_buff+1
0074 27FF CLR R31
0075 0FE8 ADD R30,R24
0076 1FF9 ADC R31,R25
0077 91E4 LPM R30,0(Z)
0078 BBEB OUT 0x1B,R30
(0045) seg7_bit1_en();
0079 9A8D SBI 0x11,5
007A 9A95 SBI 0x12,5
(0046) delay100us(1);
007B E001 LDI R16,1
007C DFD7 RCALL _delay100us
(0047) seg7_bit1_dis();
007D 9A8D SBI 0x11,5
007E 9895 CBI 0x12,5
(0048) seg7_data_port=seg7_data[seg7_led_buff[2]];
007F E584 LDI R24,0x54
0080 E090 LDI R25,0
0081 91E00062 LDS R30,seg7_led_buff+2
0083 27FF CLR R31
0084 0FE8 ADD R30,R24
0085 1FF9 ADC R31,R25
0086 91E4 LPM R30,0(Z)
0087 BBEB OUT 0x1B,R30
(0049) seg7_bit2_en();
0088 9A8E SBI 0x11,6
0089 9A96 SBI 0x12,6
(0050) delay100us(1);
008A E001 LDI R16,1
008B DFC8 RCALL _delay100us
(0051) seg7_bit2_dis();
008C 9A8E SBI 0x11,6
008D 9896 CBI 0x12,6
(0052) seg7_data_port=seg7_data[seg7_led_buff[3]];
008E E584 LDI R24,0x54
008F E090 LDI R25,0
0090 91E00063 LDS R30,seg7_led_buff+3
0092 27FF CLR R31
0093 0FE8 ADD R30,R24
0094 1FF9 ADC R31,R25
0095 91E4 LPM R30,0(Z)
0096 BBEB OUT 0x1B,R30
(0053) seg7_bit3_en();
0097 9A8F SBI 0x11,7
0098 9A97 SBI 0x12,7
(0054) delay100us(1);
0099 E001 LDI R16,1
009A DFB9 RCALL _delay100us
(0055) seg7_bit3_dis();
009B 9A8F SBI 0x11,7
009C 9897 CBI 0x12,7
009D 9508 RET
(0056) }
(0057)
(0058) void seg7_led_init(void)//7段数码管显示初始化
(0059) {
(0060) seg7_data_ddr=0xff;
_seg7_led_init:
009E EF8F LDI R24,0xFF
009F BB8A OUT 0x1A,R24
(0061) seg7_data_port=0x00;
00A0 2422 CLR R2
00A1 BA2B OUT 0x1B,R2
(0062) seg7_bitselect_ddr|=0xf0;
00A2 B381 IN R24,0x11
00A3 6F80 ORI R24,0xF0
00A4 BB81 OUT 0x11,R24
(0063) seg7_bitselect_port|=0xf0;
00A5 B382 IN R24,0x12
00A6 6F80 ORI R24,0xF0
00A7 BB82 OUT 0x12,R24
00A8 9508 RET
_int0_isr:
tmpi --> R22
key_buf --> R20
i --> R10
00A9 940E016D CALL push_lset
00AB 940E0152 CALL push_gset3
(0064) }
(0065) #pragma interrupt_handler int0_isr:iv_INT0
(0066)
(0067) void int0_isr(void)
(0068) {
(0069) uint8 key_buf=0,i=0,tmpi=0;
00AD 2744 CLR R20
00AE 24AA CLR R10
00AF 2766 CLR R22
(0070) GICR=0x00;//关闭中断使能
00B0 2422 CLR R2
00B1 BE2B OUT 0x3B,R2
(0071) DDRB=0x0f;
00B2 E08F LDI R24,0xF
00B3 BB87 OUT 0x17,R24
(0072) PORTB&=0xf0;
00B4 B388 IN R24,0x18
00B5 7F80 ANDI R24,0xF0
00B6 BB88 OUT 0x18,R24
(0073) _NOP();
00B7 0000 NOP
(0074) if((PINB&0x0F)!=0x0F)
00B8 B386 IN R24,0x16
00B9 708F ANDI R24,0xF
00BA 308F CPI R24,0xF
00BB F409 BNE 0x00BD
00BC C06E RJMP 0x012B
(0075) { //#1
(0076) delay100us(10);
00BD E00A LDI R16,0xA
00BE DF95 RCALL _delay100us
(0077) if((PINB&0x0F)!=0x0F)
00BF B386 IN R24,0x16
00C0 708F ANDI R24,0xF
00C1 308F CPI R24,0xF
00C2 F409 BNE 0x00C4
00C3 C067 RJMP 0x012B
(0078) { //#2
(0079) if((~PINB)&0x10)
00C4 B226 IN R2,0x16
00C5 2433 CLR R3
00C6 9420 COM R2
00C7 9430 COM R3
00C8 FE24 SBRS R2,4
00C9 C001 RJMP 0x00CB
(0080) key_buf=0;
00CA C016 RJMP 0x00E1
(0081) else if((~PINB)&0x20)
00CB B226 IN R2,0x16
00CC 2433 CLR R3
00CD 9420 COM R2
00CE 9430 COM R3
00CF FE25 SBRS R2,5
00D0 C002 RJMP 0x00D3
(0082) key_buf=1;
00D1 E041 LDI R20,1
00D2 C00E RJMP 0x00E1
(0083) else if((~PINB)&0x40)
00D3 B226 IN R2,0x16
00D4 2433 CLR R3
00D5 9420 COM R2
00D6 9430 COM R3
00D7 FE26 SBRS R2,6
00D8 C002 RJMP 0x00DB
(0084) key_buf=2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -