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

📄 4x4key.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00D8 DB98              cbi 0x1b,3
 00DA                   .dbline 146
 00DA           ;       
 00DA           ;       if((KEY_IN&H1)==H1)      return L4_H1;
 00DA 89B3              in R24,0x19
 00DC 8071              andi R24,16
 00DE 8031              cpi R24,16
 00E0 11F4              brne L28
 00E2                   .dbline 146
 00E2 03E0              ldi R16,3
 00E4 13C0              xjmp L3
 00E6           L28:
 00E6                   .dbline 147
 00E6           ;       if((KEY_IN&H2)==H2)      return L4_H2;
 00E6 89B3              in R24,0x19
 00E8 8072              andi R24,32
 00EA 8032              cpi R24,32
 00EC 11F4              brne L30
 00EE                   .dbline 147
 00EE 07E0              ldi R16,7
 00F0 0DC0              xjmp L3
 00F2           L30:
 00F2                   .dbline 148
 00F2           ;       if((KEY_IN&H3)==H3)      return L4_H3;
 00F2 89B3              in R24,0x19
 00F4 8074              andi R24,64
 00F6 8034              cpi R24,64
 00F8 11F4              brne L32
 00FA                   .dbline 148
 00FA 0BE0              ldi R16,11
 00FC 07C0              xjmp L3
 00FE           L32:
 00FE                   .dbline 149
 00FE           ;       if((KEY_IN&H4)==H4)      return L4_H4;
 00FE 89B3              in R24,0x19
 0100 8078              andi R24,128
 0102 8038              cpi R24,128
 0104 11F4              brne L34
 0106                   .dbline 149
 0106 0FE0              ldi R16,15
 0108 01C0              xjmp L3
 010A           L34:
 010A                   .dbline 151
 010A           ; 
 010A           ;       return ON_PUSH;
 010A 0FEF              ldi R16,255
 010C                   .dbline -2
 010C           L3:
 010C                   .dbline 0 ; func end
 010C 0895              ret
 010E                   .dbend
 010E                   .dbfunc e Read_Key _Read_Key fV
                        .even
 010E           _Read_Key::
 010E 0E940000          xcall push_gset1
 0112                   .dbline -1
 0112                   .dbline 157
 0112           ;       
 0112           ; }
 0112           ; 
 0112           ; //=======================================================================
 0112           ; void Read_Key(void)
 0112           ; {
 0112                   .dbline 158
 0112           ;  switch(Key_State)
 0112 40910100          lds R20,_Key_State
 0116 5527              clr R21
 0118 4030              cpi R20,0
 011A 4507              cpc R20,R21
 011C 49F0              breq L40
 011E           X0:
 011E 4130              cpi R20,1
 0120 E0E0              ldi R30,0
 0122 5E07              cpc R21,R30
 0124 71F0              breq L43
 0126 4230              cpi R20,2
 0128 E0E0              ldi R30,0
 012A 5E07              cpc R21,R30
 012C E1F0              breq L46
 012E 21C0              xjmp L37
 0130           X1:
 0130                   .dbline 159
 0130           ;      {
 0130           L40:
 0130                   .dbline 161
 0130           ;        case 0:
 0130           ;          if(KEYDIN() != ON_PUSH)
 0130 80DF              xcall _KEYDIN
 0132 0F3F              cpi R16,255
 0134 F1F0              breq L38
 0136                   .dbline 162
 0136           ;                       {
 0136                   .dbline 163
 0136           ;                       Key_State++;
 0136 80910100          lds R24,_Key_State
 013A 8F5F              subi R24,255    ; addi 1
 013C 80930100          sts _Key_State,R24
 0140                   .dbline 164
 0140           ;                       }  
 0140                   .dbline 165
 0140           ;                break;
 0140 18C0              xjmp L38
 0142           L43:
 0142                   .dbline 167
 0142           ;        case 1:
 0142           ;          if(KEYDIN() != ON_PUSH)
 0142 77DF              xcall _KEYDIN
 0144 0F3F              cpi R16,255
 0146 49F0              breq L44
 0148                   .dbline 168
 0148           ;                   {
 0148                   .dbline 169
 0148           ;                        Key_State++;
 0148 80910100          lds R24,_Key_State
 014C 8F5F              subi R24,255    ; addi 1
 014E 80930100          sts _Key_State,R24
 0152                   .dbline 170
 0152           ;                        Key_Value=KEYDIN();
 0152 6FDF              xcall _KEYDIN
 0154 00930000          sts _Key_Value,R16
 0158                   .dbline 171
 0158           ;                       }
 0158 0CC0              xjmp L38
 015A           L44:
 015A                   .dbline 173
 015A           ;                else 
 015A           ;                   {
 015A                   .dbline 174
 015A           ;                       Key_State--;
 015A 80910100          lds R24,_Key_State
 015E 8150              subi R24,1
 0160 80930100          sts _Key_State,R24
 0164                   .dbline 175
 0164           ;                       }
 0164                   .dbline 176
 0164           ;                break;
 0164 06C0              xjmp L38
 0166           L46:
 0166                   .dbline 178
 0166           ;      case 2:
 0166           ;          if(KEYDIN() == ON_PUSH)
 0166 65DF              xcall _KEYDIN
 0168 0F3F              cpi R16,255
 016A 19F4              brne L38
 016C                   .dbline 179
 016C           ;                   {
 016C                   .dbline 180
 016C           ;                       Key_State=0;
 016C 2224              clr R2
 016E 20920100          sts _Key_State,R2
 0172                   .dbline 181
 0172           ;                       }
 0172                   .dbline 182
 0172           ;                break;
 0172           L37:
 0172           L38:
 0172                   .dbline -2
 0172           L36:
 0172 0E940000          xcall pop_gset1
 0176                   .dbline 0 ; func end
 0176 0895              ret
 0178                   .dbend
 0178                   .dbfunc e main _main fV
                        .even
 0178           _main::
 0178                   .dbline -1
 0178                   .dbline 188
 0178           ;      }
 0178           ;  
 0178           ; }
 0178           ; 
 0178           ; void main(void)
 0178           ; {
 0178                   .dbline 189
 0178           ;  KEY_Init();
 0178 43DF              xcall _KEY_Init
 017A                   .dbline 191
 017A           ;  
 017A           ;  Key_State = 0;
 017A 2224              clr R2
 017C 20920100          sts _Key_State,R2
 0180                   .dbline 192
 0180           ;  Key_Value = ON_PUSH;
 0180 8FEF              ldi R24,255
 0182 80930000          sts _Key_Value,R24
 0186                   .dbline 194
 0186           ;  
 0186           ;  Uart_Init();                 //TART初始化
 0186 0DD0              xcall _Uart_Init
 0188                   .dbline 195
 0188           ;  SEI();                       //全局中断使能
 0188 7894              sei
 018A 09C0              xjmp L51
 018C           L50:
 018C                   .dbline 198
 018C           ;  
 018C           ;  while(1)
 018C           ;      {
 018C                   .dbline 199
 018C           ;      if(Key_Value != ON_PUSH)
 018C 80910000          lds R24,_Key_Value
 0190 8F3F              cpi R24,255
 0192 29F0              breq L53
 0194                   .dbline 200
 0194           ;          {
 0194                   .dbline 201
 0194           ;            USART_TXD(Key_Value);
 0194 082F              mov R16,R24
 0196 0ED0              xcall _USART_TXD
 0198                   .dbline 202
 0198           ;                Key_Value = ON_PUSH;
 0198 8FEF              ldi R24,255
 019A 80930000          sts _Key_Value,R24
 019E                   .dbline 203
 019E           ;            }
 019E           L53:
 019E                   .dbline 204
 019E           L51:
 019E                   .dbline 197
 019E F6CF              xjmp L50
 01A0           X2:
 01A0                   .dbline -2
 01A0           L49:
 01A0                   .dbline 0 ; func end
 01A0 0895              ret
 01A2                   .dbend
 01A2                   .dbfunc e Uart_Init _Uart_Init fV
                        .even
 01A2           _Uart_Init::
 01A2                   .dbline -1
 01A2                   .dbline 209
 01A2           ;      }
 01A2           ; }
 01A2           ; 
 01A2           ; //===============================================================
 01A2           ; void Uart_Init(void)          //UART初始化
 01A2           ;   { 
 01A2                   .dbline 213
 01A2           ;      
 01A2           ;     //设置侦格式
 01A2           ;       //异步,8位数据,无奇偶校验,一个停止位,无倍速
 01A2           ;       UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
 01A2 86E8              ldi R24,134
 01A4 80BD              out 0x20,R24
 01A6                   .dbline 216
 01A6           ;       
 01A6           ;     //设置波特率
 01A6           ;     UBRRL= (F_osc/Baud_rate/16-1)%256;
 01A6 8FE2              ldi R24,47
 01A8 89B9              out 0x9,R24
 01AA                   .dbline 217
 01AA           ;     UBRRH= (F_osc/Baud_rate/16-1)/256;
 01AA 2224              clr R2
 01AC 20BC              out 0x20,R2
 01AE                   .dbline 220
 01AE           ; 
 01AE           ;       //使能接收中断,使能接收,使能发送
 01AE           ;     UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
 01AE 88E9              ldi R24,152
 01B0 8AB9              out 0xa,R24
 01B2                   .dbline -2
 01B2           L55:
 01B2                   .dbline 0 ; func end
 01B2 0895              ret
 01B4                   .dbend
 01B4                   .dbfunc e USART_TXD _USART_TXD fV
 01B4           ;           data -> R16
                        .even
 01B4           _USART_TXD::
 01B4                   .dbline -1
 01B4                   .dbline 226
 01B4           ;   }
 01B4           ;   
 01B4           ; 
 01B4           ; //===============================================================
 01B4           ; void USART_TXD(uint8 data) //发送采用查询方式
 01B4           ; {
 01B4           L57:
 01B4                   .dbline 227
 01B4           L58:
 01B4                   .dbline 227
 01B4           ;       while( !(UCSRA & BIT(UDRE)) );
 01B4 5D9B              sbis 0xb,5
 01B6 FECF              rjmp L57
 01B8                   .dbline 228
 01B8           ;       UDR=data;
 01B8 0CB9              out 0xc,R16
 01BA           L60:
 01BA                   .dbline 229
 01BA           L61:
 01BA                   .dbline 229
 01BA           ;       while( !(UCSRA & BIT(TXC )) );
 01BA 5E9B              sbis 0xb,6
 01BC FECF              rjmp L60
 01BE                   .dbline 230
 01BE           ;       UCSRA|=BIT(TXC);
 01BE 5E9A              sbi 0xb,6
 01C0                   .dbline -2
 01C0           L56:
 01C0                   .dbline 0 ; func end
 01C0 0895              ret
 01C2                   .dbsym r data 16 c
 01C2                   .dbend
                        .area vector(rom, abs)
                        .org 44
 002C 0C94E100          jmp _USART_RXC
                        .area text(rom, con, rel)
 01C2                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\4x4key\4x4key.c
 01C2                   .dbfunc e USART_RXC _USART_RXC fV
                        .even
 01C2           _USART_RXC::
 01C2                   .dbline -1
 01C2                   .dbline 237
 01C2           ; }
 01C2           ; 
 01C2           ; //=======================================================================
 01C2           ; 
 01C2           ; #pragma interrupt_handler USART_RXC:12
 01C2           ; void USART_RXC(void)
 01C2           ; {
 01C2                   .dbline -2
 01C2           L63:
 01C2                   .dbline 0 ; func end
 01C2 1895              reti
 01C4                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\4x4key\4x4key.c
 0000           _Key_Value::
 0000                   .blkb 1
 0001                   .dbsym e Key_Value _Key_Value c
 0001           _Key_State::
 0001                   .blkb 1
 0002                   .dbsym e Key_State _Key_State c

⌨️ 快捷键说明

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