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

📄 keyboard.lis

📁 AVR单片机开发的键盘处理程序C源代码希望对单片机初学选手有点帮助
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01CE           _init_devices::
 01CE                   .dbline -1
 01CE                   .dbline 154
 01CE           ; }
 01CE           ; 
 01CE           ; //call this routine to initialise all peripherals
 01CE           ; void init_devices(void)
 01CE           ; {
 01CE                   .dbline 156
 01CE           ;       //stop errant interrupts until set up
 01CE           ;       CLI(); //disable all interrupts
 01CE F894              cli
 01D0                   .dbline 157
 01D0           ;       port_init();
 01D0 B3DF              xcall _port_init
 01D2                   .dbline 158
 01D2           ;       timer0_init(); 
 01D2 C0DF              xcall _timer0_init
 01D4                   .dbline 159
 01D4           ;       uart0_init();
 01D4 EEDF              xcall _uart0_init
 01D6                   .dbline 162
 01D6           ;       //watchdog_init();
 01D6           ;  
 01D6           ;       MCUCR = 0x00;
 01D6 2224              clr R2
 01D8 25BE              out 0x35,R2
 01DA                   .dbline 163
 01DA           ;       GICR  = 0x00;
 01DA 2BBE              out 0x3b,R2
 01DC                   .dbline 164
 01DC           ;       TIMSK = 0x01; //timer interrupt sources
 01DC 81E0              ldi R24,1
 01DE 89BF              out 0x39,R24
 01E0                   .dbline 165
 01E0           ;       SEI(); //re-enable interrupts
 01E0 7894              sei
 01E2                   .dbline -2
 01E2           L73:
 01E2                   .dbline 0 ; func end
 01E2 0895              ret
 01E4                   .dbend
 01E4                   .dbfunc e send_num _send_num fV
 01E4           ;            num -> R20
 01E4           ;          index -> R22
                        .even
 01E4           _send_num::
 01E4 0E940000          xcall push_gset2
 01E8 422F              mov R20,R18
 01EA 602F              mov R22,R16
 01EC                   .dbline -1
 01EC                   .dbline 171
 01EC           ;       //all peripherals are now initialised
 01EC           ; }
 01EC           ; 
 01EC           ; //显示
 01EC           ; void send_num( uchar index, uchar num )
 01EC           ; {
 01EC                   .dbline 172
 01EC           ;       PORTB = ~BIT( index ); 
 01EC 01E0              ldi R16,1
 01EE 162F              mov R17,R22
 01F0 0E940000          xcall lsl8
 01F4 202E              mov R2,R16
 01F6 2094              com R2
 01F8 28BA              out 0x18,R2
 01FA                   .dbline 173
 01FA           ;       if( index <= 7 ) { PORTA = num_table[num]; }
 01FA 87E0              ldi R24,7
 01FC 8617              cp R24,R22
 01FE 48F0              brlo L75
 0200                   .dbline 173
 0200                   .dbline 173
 0200 80E0              ldi R24,<_num_table
 0202 90E0              ldi R25,>_num_table
 0204 E42F              mov R30,R20
 0206 FF27              clr R31
 0208 E80F              add R30,R24
 020A F91F              adc R31,R25
 020C E491              lpm R30,Z
 020E EBBB              out 0x1b,R30
 0210                   .dbline 173
 0210 01C0              xjmp L76
 0212           L75:
 0212                   .dbline 174
 0212           ;       else { PORTA = num; }
 0212                   .dbline 174
 0212 4BBB              out 0x1b,R20
 0214                   .dbline 174
 0214           L76:
 0214                   .dbline 175
 0214           ;       delay( 1 );
 0214 01E0              ldi R16,1
 0216 10E0              ldi R17,0
 0218 F3DE              xcall _delay
 021A                   .dbline -2
 021A           L74:
 021A 0E940000          xcall pop_gset2
 021E                   .dbline 0 ; func end
 021E 0895              ret
 0220                   .dbsym r num 20 c
 0220                   .dbsym r index 22 c
 0220                   .dbend
 0220                   .dbfunc e send_char _send_char fV
 0220           ;             ch -> R20
 0220           ;          index -> R22
                        .even
 0220           _send_char::
 0220 0E940000          xcall push_gset2
 0224 422F              mov R20,R18
 0226 602F              mov R22,R16
 0228                   .dbline -1
 0228                   .dbline 179
 0228           ; }
 0228           ; 
 0228           ; void send_char( uchar index, uchar ch )
 0228           ; {
 0228                   .dbline 180
 0228           ;       PORTB = ~BIT( index );
 0228 01E0              ldi R16,1
 022A 162F              mov R17,R22
 022C 0E940000          xcall lsl8
 0230 202E              mov R2,R16
 0232 2094              com R2
 0234 28BA              out 0x18,R2
 0236                   .dbline 181
 0236           ;       PORTA = ch;
 0236 4BBB              out 0x1b,R20
 0238                   .dbline 182
 0238           ;       delay(1);
 0238 01E0              ldi R16,1
 023A 10E0              ldi R17,0
 023C E1DE              xcall _delay
 023E                   .dbline -2
 023E           L77:
 023E 0E940000          xcall pop_gset2
 0242                   .dbline 0 ; func end
 0242 0895              ret
 0244                   .dbsym r ch 20 c
 0244                   .dbsym r index 22 c
 0244                   .dbend
 0244                   .dbfunc e display _display fV
                        .even
 0244           _display::
 0244                   .dbline -1
 0244                   .dbline 186
 0244           ; }
 0244           ; 
 0244           ; void display( void )
 0244           ; {
 0244                   .dbline 187
 0244           ;       l_des_speed = ( rbuf[2] << 8 ) + rbuf[1];
 0244 20900700          lds R2,_rbuf+1
 0248 30900800          lds R3,_rbuf+2
 024C 30920500          sts _l_des_speed+1,R3
 0250 20920400          sts _l_des_speed,R2
 0254                   .dbline 188
 0254           ;       r_des_speed = ( rbuf[5] << 8 ) + rbuf[4];
 0254 20900A00          lds R2,_rbuf+4
 0258 30900B00          lds R3,_rbuf+5
 025C 30920300          sts _r_des_speed+1,R3
 0260 20920200          sts _r_des_speed,R2
 0264                   .dbline 189
 0264           ;       if ( rbuf[0] == 1 ){
 0264 80910600          lds R24,_rbuf
 0268 8130              cpi R24,1
 026A 19F4              brne L83
 026C                   .dbline 189
 026C                   .dbline 190
 026C           ;               send_char( 7, 0x40 );   //显示'-'
 026C 20E4              ldi R18,64
 026E 07E0              ldi R16,7
 0270 D7DF              xcall _send_char
 0272                   .dbline 191
 0272           ;       }
 0272           L83:
 0272                   .dbline 192
 0272           ;       if ( ( l_des_speed > 99 ) && ( l_des_speed < 999 ) ){
 0272 83E6              ldi R24,99
 0274 90E0              ldi R25,0
 0276 20900400          lds R2,_l_des_speed
 027A 30900500          lds R3,_l_des_speed+1
 027E 8215              cp R24,R2
 0280 9305              cpc R25,R3
 0282 88F4              brsh L85
 0284 C101              movw R24,R2
 0286 873E              cpi R24,231
 0288 E3E0              ldi R30,3
 028A 9E07              cpc R25,R30
 028C 60F4              brsh L85
 028E                   .dbline 192
 028E                   .dbline 193
 028E           ;               send_num( 6, l_des_speed / 100 % 10 );
 028E 24E6              ldi R18,100
 0290 30E0              ldi R19,0
 0292 8C01              movw R16,R24
 0294 0E940000          xcall div16u
 0298 2AE0              ldi R18,10
 029A 30E0              ldi R19,0
 029C 0E940000          xcall mod16u
 02A0 202F              mov R18,R16
 02A2 06E0              ldi R16,6
 02A4 9FDF              xcall _send_num
 02A6                   .dbline 194
 02A6           ;       }
 02A6           L85:
 02A6                   .dbline 195
 02A6           ;       send_num( 5, (l_des_speed / 10) % 10 );
 02A6 2AE0              ldi R18,10
 02A8 30E0              ldi R19,0
 02AA 00910400          lds R16,_l_des_speed
 02AE 10910500          lds R17,_l_des_speed+1
 02B2 0E940000          xcall div16u
 02B6 2AE0              ldi R18,10
 02B8 30E0              ldi R19,0
 02BA 0E940000          xcall mod16u
 02BE 202F              mov R18,R16
 02C0 05E0              ldi R16,5
 02C2 90DF              xcall _send_num
 02C4                   .dbline 196
 02C4           ;       send_num( 4, l_des_speed % 10 );
 02C4 2AE0              ldi R18,10
 02C6 30E0              ldi R19,0
 02C8 00910400          lds R16,_l_des_speed
 02CC 10910500          lds R17,_l_des_speed+1
 02D0 0E940000          xcall mod16u
 02D4 202F              mov R18,R16
 02D6 04E0              ldi R16,4
 02D8 85DF              xcall _send_num
 02DA                   .dbline 197
 02DA           ;       if ( rbuf[3] == 1 ){
 02DA 80910900          lds R24,_rbuf+3
 02DE 8130              cpi R24,1
 02E0 19F4              brne L87
 02E2                   .dbline 197
 02E2                   .dbline 198
 02E2           ;               send_char( 3, 0x40 );   //显示'-'
 02E2 20E4              ldi R18,64
 02E4 03E0              ldi R16,3
 02E6 9CDF              xcall _send_char
 02E8                   .dbline 199
 02E8           ;       }
 02E8           L87:
 02E8                   .dbline 200
 02E8           ;       if ( ( r_des_speed > 99 ) && ( r_des_speed < 999 ) ){
 02E8 83E6              ldi R24,99
 02EA 90E0              ldi R25,0
 02EC 20900200          lds R2,_r_des_speed
 02F0 30900300          lds R3,_r_des_speed+1
 02F4 8215              cp R24,R2
 02F6 9305              cpc R25,R3
 02F8 88F4              brsh L90
 02FA C101              movw R24,R2
 02FC 873E              cpi R24,231
 02FE E3E0              ldi R30,3
 0300 9E07              cpc R25,R30
 0302 60F4              brsh L90
 0304                   .dbline 200
 0304                   .dbline 201
 0304           ;               send_num( 2, r_des_speed / 100 % 10 );
 0304 24E6              ldi R18,100
 0306 30E0              ldi R19,0
 0308 8C01              movw R16,R24
 030A 0E940000          xcall div16u
 030E 2AE0              ldi R18,10
 0310 30E0              ldi R19,0
 0312 0E940000          xcall mod16u
 0316 202F              mov R18,R16
 0318 02E0              ldi R16,2
 031A 64DF              xcall _send_num
 031C                   .dbline 202
 031C           ;       }
 031C           L90:
 031C                   .dbline 203
 031C           ;       send_num( 1, (r_des_speed / 10) % 10 );
 031C 2AE0              ldi R18,10
 031E 30E0              ldi R19,0
 0320 00910200          lds R16,_r_des_speed
 0324 10910300          lds R17,_r_des_speed+1
 0328 0E940000          xcall div16u
 032C 2AE0              ldi R18,10
 032E 30E0              ldi R19,0
 0330 0E940000          xcall mod16u
 0334 202F              mov R18,R16
 0336 01E0              ldi R16,1
 0338 55DF              xcall _send_num
 033A                   .dbline 204
 033A           ;       send_num( 0, r_des_speed % 10 );
 033A 2AE0              ldi R18,10
 033C 30E0              ldi R19,0
 033E 00910200          lds R16,_r_des_speed
 0342 10910300          lds R17,_r_des_speed+1
 0346 0E940000          xcall mod16u
 034A 202F              mov R18,R16
 034C 0027              clr R16
 034E 4ADF              xcall _send_num
 0350                   .dbline -2
 0350           L78:
 0350                   .dbline 0 ; func end
 0350 0895              ret
 0352                   .dbend
 0352                   .dbfunc e reset_ctrl _reset_ctrl fV
 0352           ;              i -> R16
                        .even
 0352           _reset_ctrl::
 0352                   .dbline -1
 0352                   .dbline 208
 0352           ; }

⌨️ 快捷键说明

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