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

📄 ir.lis

📁 单片机红外通讯控制 C语言编写 源程序。
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -