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

📄 3x3key.lis

📁 protues_atmeg8学习之:按键篇源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00FA                   .dbline 49
 00FA           ;           case 0x30: key=0x04; 
 00FA 44E0              ldi R20,4
 00FC                   .dbline 50
 00FC           ;                   break;
 00FC 05C0              rjmp L30
 00FE           L33:
 00FE                   .dbline 51
 00FE           ;               case 0x28: key=0x05; 
 00FE 45E0              ldi R20,5
 0100                   .dbline 52
 0100           ;                   break;
 0100 03C0              rjmp L30
 0102           L34:
 0102                   .dbline 53
 0102           ;               case 0x18: key=0x06; 
 0102 46E0              ldi R20,6
 0104                   .dbline 54
 0104           ;                   break;
 0104 01C0              rjmp L30
 0106           L29:
 0106                   .dbline 55
 0106           ;               default:   key=0;
 0106 4427              clr R20
 0108                   .dbline 56
 0108           ;                   break;
 0108           L30:
 0108                   .dbline 58
 0108           ;               }
 0108           ;               DDRC=0X38;
 0108 88E3              ldi R24,56
 010A 84BB              out 0x14,R24
 010C                   .dbline 59
 010C           ;               PORTC=0X07;
 010C 87E0              ldi R24,7
 010E 85BB              out 0x15,R24
 0110                   .dbline 60
 0110           ;         break;
 0110 2AC0              rjmp L17
 0112           L37:
 0112                   .dbline 62
 0112           ;     case 0x03:  
 0112           ;           DDRC=0X07;
 0112 87E0              ldi R24,7
 0114 84BB              out 0x14,R24
 0116                   .dbline 63
 0116           ;         PORTC=0X38;
 0116 88E3              ldi R24,56
 0118 85BB              out 0x15,R24
 011A                   .dbline 64
 011A           ;               delay_us(1);
 011A 01E0              ldi R16,1
 011C 10E0              ldi R17,0
 011E 70DF              rcall _delay_us
 0120                   .dbline 65
 0120           ;         temp1=PINC;
 0120 63B3              in R22,0x13
 0122                   .dbline 66
 0122           ;               temp1&=0x38;
 0122 6873              andi R22,56
 0124                   .dbline 67
 0124           ;         switch(temp1)
 0124 7727              clr R23
 0126 6832              cpi R22,40
 0128 E0E0              ldi R30,0
 012A 7E07              cpc R23,R30
 012C 89F0              breq L42
 012E 88E2              ldi R24,40
 0130 90E0              ldi R25,0
 0132 8617              cp R24,R22
 0134 9707              cpc R25,R23
 0136 2CF0              brlt L45
 0138           L44:
 0138 6831              cpi R22,24
 013A E0E0              ldi R30,0
 013C 7E07              cpc R23,R30
 013E 51F0              breq L43
 0140 0BC0              rjmp L38
 0142           L45:
 0142 6033              cpi R22,48
 0144 E0E0              ldi R30,0
 0146 7E07              cpc R23,R30
 0148 09F0              breq L41
 014A 06C0              rjmp L38
 014C           X4:
 014C                   .dbline 68
 014C           ;               {
 014C           L41:
 014C                   .dbline 69
 014C           ;               case 0x30: key=0x07; 
 014C 47E0              ldi R20,7
 014E                   .dbline 70
 014E           ;             break;
 014E 05C0              rjmp L39
 0150           L42:
 0150                   .dbline 71
 0150           ;           case 0x28: key=0x08; 
 0150 48E0              ldi R20,8
 0152                   .dbline 72
 0152           ;                   break;
 0152 03C0              rjmp L39
 0154           L43:
 0154                   .dbline 73
 0154           ;               case 0x18: key=0x09; 
 0154 49E0              ldi R20,9
 0156                   .dbline 74
 0156           ;                   break;
 0156 01C0              rjmp L39
 0158           L38:
 0158                   .dbline 75
 0158           ;               default:   key=0;
 0158 4427              clr R20
 015A                   .dbline 76
 015A           ;                   break;
 015A           L39:
 015A                   .dbline 78
 015A           ;           }
 015A           ;               DDRC=0X38;
 015A 88E3              ldi R24,56
 015C 84BB              out 0x14,R24
 015E                   .dbline 79
 015E           ;               PORTC=0X07;
 015E 87E0              ldi R24,7
 0160 85BB              out 0x15,R24
 0162                   .dbline 80
 0162           ;         break;
 0162 01C0              rjmp L17
 0164           L16:
 0164                   .dbline 82
 0164           ;     default:
 0164           ;         key=0;
 0164 4427              clr R20
 0166                   .dbline 83
 0166           ;         break;   
 0166           L17:
 0166                   .dbline 85
 0166           ;     }
 0166           ;     return (key);
 0166 042F              mov R16,R20
 0168                   .dbline -2
 0168           L15:
 0168 00D0              rcall pop_gset3
 016A                   .dbline 0 ; func end
 016A 0895              ret
 016C                   .dbsym r temp1 22 c
 016C                   .dbsym r key 20 c
 016C                   .dbsym r temp 20 c
 016C                   .dbend
                        .area lit(rom, con, rel)
 0000           L47:
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
                        .area text(rom, con, rel)
 016C                   .dbfile F:\Learn\AVR\Pro_Mega8\KEY\3X3Key\3X3Key.C
 016C                   .dbfunc e main _main fV
 016C           ;            num -> y+0
 016C           ;         keynum -> R20
 016C           ;           temp -> R22
                        .even
 016C           _main::
 016C 2A97              sbiw R28,10
 016E                   .dbline -1
 016E                   .dbline 90
 016E           ; }
 016E           ; 
 016E           ; //主函数,扫描按键显示数据
 016E           ; void main()
 016E           ; {
 016E                   .dbline 92
 016E           ;     unsigned char temp, keynum;
 016E           ;       unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 
 016E 80E0              ldi R24,<L47
 0170 90E0              ldi R25,>L47
 0172 FE01              movw R30,R28
 0174 0AE0              ldi R16,10
 0176 10E0              ldi R17,0
 0178 FA93              st -y,R31
 017A EA93              st -y,R30
 017C 9A93              st -y,R25
 017E 8A93              st -y,R24
 0180 00D0              rcall asgncblk
 0182                   .dbline 95
 0182           ;                              0x6D, 0x7D, 0x07, 0x7F, 0x6F};
 0182           ;       //初始化端口
 0182           ;       DDRB=0xFF;        //设置B口为输出模式
 0182 8FEF              ldi R24,255
 0184 87BB              out 0x17,R24
 0186                   .dbline 96
 0186           ;       PORTB=0xFF;       //置高电平    
 0186 88BB              out 0x18,R24
 0188                   .dbline 97
 0188           ;     DDRC=0X38;
 0188 88E3              ldi R24,56
 018A 84BB              out 0x14,R24
 018C                   .dbline 98
 018C           ;     PORTC=0X07; 
 018C 87E0              ldi R24,7
 018E 85BB              out 0x15,R24
 0190 1DC0              rjmp L49
 0192           L48:
 0192                   .dbline 101
 0192           ;  
 0192           ;     while(1)
 0192           ;     { 
 0192                   .dbline 102
 0192           ;          PORTB=0x40;
 0192 80E4              ldi R24,64
 0194 88BB              out 0x18,R24
 0196                   .dbline 103
 0196           ;        temp=PINC;
 0196 63B3              in R22,0x13
 0198                   .dbline 104
 0198           ;        temp&=0x7;
 0198 6770              andi R22,7
 019A                   .dbline 105
 019A           ;        if(temp==0x7)//检测是否有按键按下       
 019A 6730              cpi R22,7
 019C 09F4              brne L51
 019E                   .dbline 106
 019E           ;              continue;
 019E 16C0              rjmp L49
 01A0           L51:
 01A0                   .dbline 107
 01A0           ;          delay_ms(10);
 01A0 0AE0              ldi R16,10
 01A2 10E0              ldi R17,0
 01A4 41DF              rcall _delay_ms
 01A6                   .dbline 108
 01A6           ;          temp=PINC;
 01A6 63B3              in R22,0x13
 01A8                   .dbline 109
 01A8           ;        temp&=0x7;
 01A8 6770              andi R22,7
 01AA                   .dbline 110
 01AA           ;        if(temp==0x7)//检测是否有按键按下       
 01AA 6730              cpi R22,7
 01AC 09F4              brne L53
 01AE                   .dbline 111
 01AE           ;              continue;
 01AE 0EC0              rjmp L49
 01B0           L53:
 01B0                   .dbline 112
 01B0           ;        keynum=ScanKey();
 01B0 48DF              rcall _ScanKey
 01B2 402F              mov R20,R16
 01B4                   .dbline 113
 01B4           ;        PORTB=num[keynum];
 01B4 CE01              movw R24,R28
 01B6 E42F              mov R30,R20
 01B8 FF27              clr R31
 01BA E80F              add R30,R24
 01BC F91F              adc R31,R25
 01BE 2080              ldd R2,z+0
 01C0 28BA              out 0x18,R2
 01C2 02C0              rjmp L56
 01C4           L55:
 01C4                   .dbline 115
 01C4                   .dbline 116
 01C4 63B3              in R22,0x13
 01C6                   .dbline 117
 01C6 6770              andi R22,7
 01C8                   .dbline 118
 01C8           L56:
 01C8                   .dbline 114
 01C8 6730              cpi R22,7
 01CA E1F7              brne L55
 01CC                   .dbline 119
 01CC           L49:
 01CC                   .dbline 100
 01CC E2CF              rjmp L48
 01CE           X6:
 01CE                   .dbline -2
 01CE                   .dbline 120
 01CE           ;          while(temp!=0x7) 
 01CE           ;          {
 01CE           ;              temp=PINC;
 01CE           ;            temp&=0x7;
 01CE           ;          }
 01CE           ;     }
 01CE           ; }
 01CE           L46:
 01CE 2A96              adiw R28,10
 01D0                   .dbline 0 ; func end
 01D0 0895              ret
 01D2                   .dbsym l num 0 A[10:10]c
 01D2                   .dbsym r keynum 20 c
 01D2                   .dbsym r temp 22 c
 01D2                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -