📄 ir.lis
字号:
0074 ; asm("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop"); //t=1,校准用,参数:c
0074 ; }
0074 ; /************************************************
0074 ; 函 数 名: key_decode (uchar data)
0074 ; 功 能: 键值扫描码是无规律的,我们只能通过switch来获得键值。
0074 ; 输入参数: 扫描码
0074 ; 输出参数: 翻译后的键值,并显示
0074 ; 描 述: 本处也可以通过数组实现。
0074 ; ***********************************************/
0074 ; void key_decode (uchar data) //译码键值
0074 ; {
0074 .dbline 94
0074 ; switch (data) //判断扫描码data
0074 5527 clr R21
0076 4030 cpi R20,0
0078 E0E0 ldi R30,0
007A 5E07 cpc R21,R30
007C 0CF4 brge X3
007E 4EC0 rjmp L14
0080 X3:
0080 82E1 ldi R24,18
0082 90E0 ldi R25,0
0084 8417 cp R24,R20
0086 9507 cpc R25,R21
0088 0CF4 brge X4
008A 48C0 rjmp L14
008C X4:
008C 02E0 ldi R16,2
008E 10E0 ldi R17,0
0090 9A01 movw R18,R20
0092 00D0 rcall empy16s
0094 F801 movw R30,R16
0096 80E0 ldi R24,<L45
0098 90E0 ldi R25,>L45
009A E80F add R30,R24
009C F91F adc R31,R25
009E 0590 lpm R0,Z+
00A0 1490 lpm R1,Z
00A2 F001 movw R30,R0
00A4 0994 ijmp
00A6 X2:
00A6 .dbline 95
00A6 ; {
00A6 L16:
00A6 .dbline 96
00A6 ; case 0: PORTC=Table[1];break; //1
00A6 20900100 lds R2,_Table+1
00AA 25BA out 0x15,R2
00AC .dbline 96
00AC 37C0 rjmp L14
00AE L18:
00AE .dbline 97
00AE ; case 1: PORTC=Table[2];break; //2
00AE 20900200 lds R2,_Table+2
00B2 25BA out 0x15,R2
00B4 .dbline 97
00B4 33C0 rjmp L14
00B6 L20:
00B6 .dbline 98
00B6 ; case 2: PORTC=Table[3];break; //3
00B6 20900300 lds R2,_Table+3
00BA 25BA out 0x15,R2
00BC .dbline 98
00BC 2FC0 rjmp L14
00BE L22:
00BE .dbline 99
00BE ; case 4: PORTC=Table[4];break; //4
00BE 20900400 lds R2,_Table+4
00C2 25BA out 0x15,R2
00C4 .dbline 99
00C4 2BC0 rjmp L14
00C6 L24:
00C6 .dbline 100
00C6 ; case 5: PORTC=Table[5];break; //5
00C6 20900500 lds R2,_Table+5
00CA 25BA out 0x15,R2
00CC .dbline 100
00CC 27C0 rjmp L14
00CE L26:
00CE .dbline 101
00CE ; case 6: PORTC=Table[6];break; //6
00CE 20900600 lds R2,_Table+6
00D2 25BA out 0x15,R2
00D4 .dbline 101
00D4 23C0 rjmp L14
00D6 L28:
00D6 .dbline 102
00D6 ; case 8: PORTC=Table[7];break; //7
00D6 20900700 lds R2,_Table+7
00DA 25BA out 0x15,R2
00DC .dbline 102
00DC 1FC0 rjmp L14
00DE L30:
00DE .dbline 103
00DE ; case 9: PORTC=Table[8];break; //8
00DE 20900800 lds R2,_Table+8
00E2 25BA out 0x15,R2
00E4 .dbline 103
00E4 1BC0 rjmp L14
00E6 L32:
00E6 .dbline 104
00E6 ; case 10: PORTC=Table[9];break; //9
00E6 20900900 lds R2,_Table+9
00EA 25BA out 0x15,R2
00EC .dbline 104
00EC 17C0 rjmp L14
00EE L34:
00EE .dbline 105
00EE ; case 12: PORTC=Table[10];break; //*
00EE 20900A00 lds R2,_Table+10
00F2 25BA out 0x15,R2
00F4 .dbline 105
00F4 13C0 rjmp L14
00F6 L36:
00F6 .dbline 106
00F6 ; case 13: PORTC=Table[0];break; //0
00F6 20900000 lds R2,_Table
00FA 25BA out 0x15,R2
00FC .dbline 106
00FC 0FC0 rjmp L14
00FE L37:
00FE .dbline 107
00FE ; case 14: PORTC=Table[11];break; //#
00FE 20900B00 lds R2,_Table+11
0102 25BA out 0x15,R2
0104 .dbline 107
0104 0BC0 rjmp L14
0106 L39:
0106 .dbline 108
0106 ; case 16: PORTC=Table[12];break; //E
0106 20900C00 lds R2,_Table+12
010A 25BA out 0x15,R2
010C .dbline 108
010C 07C0 rjmp L14
010E L41:
010E .dbline 109
010E ; case 17: PORTC=Table[13];break; //A
010E 20900D00 lds R2,_Table+13
0112 25BA out 0x15,R2
0114 .dbline 109
0114 03C0 rjmp L14
0116 L43:
0116 .dbline 110
0116 20900E00 lds R2,_Table+14
011A 25BA out 0x15,R2
011C .dbline 110
011C .dbline 111
011C L14:
011C .dbline -2
011C L12:
011C 00D0 rcall pop_gset1
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbsym r data 20 c
0120 .dbend
0120 .dbfunc e spk _spk fV
0120 ; i -> R20
.even
0120 _spk::
0120 00D0 rcall push_gset1
0122 402F mov R20,R16
0124 .dbline -1
0124 .dbline 122
0124 ; case 18: PORTC=Table[14];break; //C
0124 ; default: break;
0124 ; }
0124 ; }
0124 ; /************************************************
0124 ; 函 数 名: spk()
0124 ; 功 能: 蜂鸣器鸣叫一声函数
0124 ; 输入参数:
0124 ; 输出参数:
0124 ; 描 述: /
0124 ; ***********************************************/
0124 ; void spk (uchar i)
0124 ; {
0124 .dbline 123
0124 ; PORTA &= ~(1<<PA2); //蜂鸣器响
0124 DA98 cbi 0x1b,2
0126 .dbline 124
0126 ; DelaymS (i); //延迟
0126 042F mov R16,R20
0128 1127 clr R17
012A 6ADF rcall _DelaymS
012C .dbline 125
012C ; PORTA |= (1<<PA2); //蜂鸣器关闭
012C DA9A sbi 0x1b,2
012E .dbline -2
012E L46:
012E 00D0 rcall pop_gset1
0130 .dbline 0 ; func end
0130 0895 ret
0132 .dbsym r i 20 c
0132 .dbend
0132 .dbfunc e Init_mcu _Init_mcu fV
.even
0132 _Init_mcu::
0132 .dbline -1
0132 .dbline 135
0132 ; }
0132 ; /************************************************
0132 ; 函 数 名: Init_mcu()
0132 ; 功 能: 单片机初始化函数
0132 ; 输入参数: /
0132 ; 输出参数: /
0132 ; 描 述: 相关口方向的设置等
0132 ; ***********************************************/
0132 ; void Init_mcu(void)
0132 ; {
0132 .dbline 136
0132 ; DDRC = 0xff; //PC口为推挽1输出
0132 8FEF ldi R24,255
0134 84BB out 0x14,R24
0136 .dbline 137
0136 ; DDRD = 0b11110111; //PD3(INT1)接蜂鸣器为输入,其余为输出。
0136 87EF ldi R24,247
0138 81BB out 0x11,R24
013A .dbline 138
013A ; PORTD = 0b10001111; //红外输入端需要使用内部上拉电阻,只使用第一位数码管。
013A 8FE8 ldi R24,143
013C 82BB out 0x12,R24
013E .dbline 139
013E ; DDRA = 0xff; //PA口为输出,PA4接蜂鸣器
013E 8FEF ldi R24,255
0140 8ABB out 0x1a,R24
0142 .dbline 140
0142 ; PORTA = 0xff; //默认蜂鸣器不响
0142 8BBB out 0x1b,R24
0144 .dbline -2
0144 L47:
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbend
0146 .dbfunc e init_int1 _init_int1 fV
.even
0146 _init_int1::
0146 .dbline -1
0146 .dbline 150
0146 ; }
0146 ; /************************************************
0146 ; 函 数 名: Init_int1()
0146 ; 功 能: 外部中断1初始化函数
0146 ; 输入参数: /
0146 ; 输出参数: /
0146 ; 描 述: 设置外部中断1为下降沿触发
0146 ; ***********************************************/
0146 ; void init_int1 (void) //外部中断1初始化
0146 ; {
0146 .dbline 151
0146 ; MCUCR |= (1<<ISC11); //设置为下降沿中断触发
0146 85B7 in R24,0x35
0148 8860 ori R24,8
014A 85BF out 0x35,R24
014C .dbline 152
014C ; MCUCR &= ~(1<<ISC10); //设置为下降沿中断触发
014C 85B7 in R24,0x35
014E 8B7F andi R24,251
0150 85BF out 0x35,R24
0152 .dbline 153
0152 ; GICR |= (1<<INT1); //通用中断控制寄存器,中断使能
0152 8BB7 in R24,0x3b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -