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

📄 keyboard.lst

📁 keyboard 包含三个例子程序 keyboard.c、keyboard1.c和keyboard2.c keyboard.c :使用keypad函数
💻 LST
字号:
                         .module keyboard.c
                         .area lit(rom, con, rel)
 000D                  _tabel::
 000D  063F              .byte 63,6
 000E  4F5B              .byte 91,'O
 000F  6D66              .byte 'f,'m
 0010  077D              .byte 125,7
 0011  6F7F              .byte 127,'o
 0012  7C77              .byte 'w,124
 0013  5E39              .byte 57,94
 0014  7179              .byte 'y,'q
 0015                    .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard.c
 0015                    .dbsym s tabel _tabel Ac[16:16]
                         .area data(ram, con, rel)
--- 0000                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard.c
 0030                  _ledbuff::
 0030                    .blkb 2
                         .area idata
--- 0000 3F3F              .byte 63,63
                         .area data(ram, con, rel)
--- 0001                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard.c
--- 0001                   .blkb 2
                         .area idata
--- 0001 3F3F              .byte 63,63
                         .area data(ram, con, rel)
--- 0002                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard.c
--- 0002                   .blkb 2
                         .area idata
--- 0002 3F3F              .byte 63,63
                         .area data(ram, con, rel)
--- 0003                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard.c
--- 0003                   .dbsym s ledbuff _ledbuff Ac[6:6]
                         .area text(rom, con, rel)
--- 0000                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard.c
--- 0000                   .dbfunc s port_init _port_init fI
                         .even
 0038                  _port_init::
 0038                    .dbline 19{
                       ; /*****************************************************
                       ;             HTTP://WWW.SL.COM.CN
                       ;                    双龙电子
                       ;  使用注意:1、应包含头文件slavr.h
                       ;            2、在工程选项中的Additional Lib中填入slavr
                       ;               使用编译器使用附加库文件libslavr.a
                       ;            3、本例采用了作按键释放检查的函数,适用于显
                       ;               示电路不需频繁刷新的程序,如静态显示、LCD
                       ;               模块电路等。    
                       ; ******************************************************/
                       ; #include <io8515.h>
                       ; #include <slavr.h>
                       ; //字形表
                       ; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
                       ; //显示缓冲区
                       ; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
                       ; 
                       ; void port_init(void)//端口初始化
                       ;      {
 0038                    .dbline 20
                       ;       DDRC=0x0f;
 0038  E08F              ldi R24,15
 0039  BB84              out 0x14,R24
 003A                    .dbline 21
                       ;       DDRD=0x3f;
 003A  E38F              ldi R24,63
 003B  BB81              out 0x11,R24
 003C                    .dbline 22
                       ;       DDRB=0xff;
 003C  EF8F              ldi R24,255
 003D  BB87              out 0x17,R24
 003E                    .dbline 23
                       ;       PORTD=0xff;
 003E  BB82              out 0x12,R24
 003F                    .dbline 24
                       ;       PORTB=0xff;
 003F  BB88              out 0x18,R24
 0040                    .dbline 25
                       ;       PORTC=0xff;
 0040  BB85              out 0x15,R24
 0041                    .dbline 26}
                       ;      }
 0041                  L1:
 0041  9508              ret
 0042                    .dbfunc s display _display fI
                       ;              i -> R20
                         .even
 0042                  _display::
 0042  D114              rcall push_gset1
 0043                    .dbline 28{
                       ; void display(void)//六路动态扫描显示
                       ; {
 0043                    .dbline 30
                       ;  unsigned char i;
                       ;  for (i=0;i<6;i++)
 0043  2744              clr R20
 0044  C016              rjmp L6
 0045                  L3:
 0045                    .dbline 31
 0045                    .dbline 32
 0045  E680              ldi R24,<_ledbuff
 0046  E090              ldi R25,>_ledbuff
 0047  2FE4              mov R30,R20
 0048  27FF              clr R31
 0049  0FE8              add R30,R24
 004A  1FF9              adc R31,R25
 004B  8020              ldd R2,z+0
 004C  BA28              out 0x18,R2
 004D                    .dbline 33
 004D  E001              ldi R16,1
 004E  2F14              mov R17,R20
 004F  D12B              rcall lsl8
 0050  2E20              mov R2,R16
 0051  9420              com R2
 0052  BA22              out 0x12,R2
 0053                    .dbline 34
 0053  D058              rcall _delay_1ms
 0054                    .dbline 35
 0054  E001              ldi R16,1
 0055  2F14              mov R17,R20
 0056  D124              rcall lsl8
 0057  B222              in R2,0x12
 0058  2A20              or R2,R16
 0059  BA22              out 0x12,R2
 005A                    .dbline 36
 005A                  L4:
 005A                    .dbline 30
 005A  9543              inc R20
 005B                  L6:
 005B                    .dbline 30
 005B  3046              cpi R20,6
 005C  F340              brlo L3
 005D                    .dbline 37}
                       ;   {
                       ;    PORTB=ledbuff[i];
                       ;    PORTD=~(1<<i);
                       ;    delay_1ms();
                       ;    PORTD|=(1<<i);  
                       ;   }
                       ; }
 005D                  L2:
 005D  D0FC              rcall pop_gset1
 005E  9508              ret
 005F                    .dbsym r i 20 c
 005F                    .dbfunc s main _main fI
                       ;        keyval1 -> R20
                       ;              i -> R22
                         .even
 005F                  _main::
 005F                    .dbline 42{
                       ; /*主程序的功能:读取键盘扫描码,转换成相应的字形码后*/
                       ; /*送入显示缓冲区进行显示,显示部分参考display.c     */
                       ; /*如果shift键按下,则全部清0                        */       
                       ; void main(void)
                       ; {
 005F                    .dbline 44
                       ;  unsigned char keyval1; 
                       ;  unsigned char i=0;
 005F  2766              clr R22
 0060                    .dbline 45
                       ;  MCUCR=0;
 0060  2422              clr R2
 0061  BE25              out 0x35,R2
 0062                    .dbline 46
                       ;  port_init();
 0062  DFD5              rcall _port_init
 0063  C046              rjmp L9
 0064                  L8:
 0064                    .dbline 48
                       ;   while(1)
                       ;     { 
 0064                    .dbline 49
                       ;      keyval1=keypad();//键盘扫描函数,作按键释放检查
 0064  D0E1              rcall _keypad
 0065  2E20              mov R2,R16
 0066  2E31              mov R3,R17
 0067  2D42              mov R20,R2
 0068                    .dbline 50
                       ;      if (keyval1!=0x7f)
 0068  374F              cpi R20,127
 0069  F409              brne X1
 006A  C03E              rjmp L11
 006B                  X1:
 006B                    .dbline 51
                       ;         { 
 006B                    .dbline 52
                       ;          if ((keyval1&0x80)==0x80)
 006B  2F84              mov R24,R20
 006C  7880              andi R24,128
 006D  3880              cpi R24,128
 006E  F4B1              brne L13
 006F                    .dbline 53
                       ;              {
 006F                    .dbline 54
                       ;               for(i=0;i<6;i++)
 006F  2766              clr R22
 0070  C011              rjmp L18
 0071                  L15:
 0071                    .dbline 55
 0071  E680              ldi R24,<_ledbuff
 0072  E090              ldi R25,>_ledbuff
 0073  2FE6              mov R30,R22
 0074  27FF              clr R31
 0075  0FE8              add R30,R24
 0076  1FF9              adc R31,R25
 0077  E18A              ldi R24,<_tabel
 0078  E090              ldi R25,>_tabel
 0079  93FA              st -y,R31
 007A  93EA              st -y,R30
 007B  2FE8              mov R30,R24
 007C  2FF9              mov R31,R25
 007D  95C8              lpm
 007E  91E9              ld R30,y+
 007F  91F9              ld R31,y+
 0080  8200              std z+0,R0
 0081                  L16:
 0081                    .dbline 54
 0081  9563              inc R22
 0082                  L18:
 0082                    .dbline 54
 0082  3066              cpi R22,6
 0083  F368              brlo L15
 0084                    .dbline 56
                       ;                    ledbuff[i]=tabel[0];               
                       ;               }
 0084  C024              rjmp L14
 0085                  L13:
 0085                    .dbline 58
                       ;           else
                       ;               {for (i=0;i<5;i++)
 0085                    .dbline 58
 0085  2766              clr R22
 0086  C015              rjmp L22
 0087                  L19:
 0087                    .dbline 59
 0087                    .dbline 60
 0087  2E26              mov R2,R22
 0088  2433              clr R3
 0089  E0E4              ldi R30,4
 008A  E0F0              ldi R31,0
 008B  19E2              sub R30,R2
 008C  09F3              sbc R31,R3
 008D  E680              ldi R24,<_ledbuff
 008E  E090              ldi R25,>_ledbuff
 008F  0FE8              add R30,R24
 0090  1FF9              adc R31,R25
 0091  8020              ldd R2,z+0
 0092  2E36              mov R3,R22
 0093  2444              clr R4
 0094  E0E5              ldi R30,5
 0095  E0F0              ldi R31,0
 0096  19E3              sub R30,R3
 0097  09F4              sbc R31,R4
 0098  0FE8              add R30,R24
 0099  1FF9              adc R31,R25
 009A  8220              std z+0,R2
 009B                    .dbline 61
 009B                  L20:
 009B                    .dbline 58
 009B  9563              inc R22
 009C                  L22:
 009C                    .dbline 58
 009C  3065              cpi R22,5
 009D  F348              brlo L19
 009E                    .dbline 62
                       ;                   {
                       ;                    ledbuff[5-i]=ledbuff[4-i];//每按一次键,左移一位
                       ;                    }
                       ;                ledbuff[0]=tabel[keyval1&0x7f];     
 009E  E18A              ldi R24,<_tabel
 009F  E090              ldi R25,>_tabel
 00A0  2FE4              mov R30,R20
 00A1  27FF              clr R31
 00A2  77EF              andi R30,127
 00A3  70F0              andi R31,0
 00A4  0FE8              add R30,R24
 00A5  1FF9              adc R31,R25
 00A6  95C8              lpm
 00A7  92000060          sts _ledbuff,R0
 00A9                    .dbline 63
                       ;               }                   
 00A9                  L14:
 00A9                    .dbline 64
                       ;         }
 00A9                  L11:
 00A9                    .dbline 65
 00A9  DF98              rcall _display
 00AA                    .dbline 66
 00AA                  L9:
 00AA                    .dbline 47
 00AA  CFB9              rjmp L8
 00AB                  X0:
 00AB                    .dbline 67}
                       ;     display();
                       ;     }
                       ; }        
 00AB                  L7:
 00AB  9508              ret
 00AC                    .dbsym r keyval1 20 c
 00AC                    .dbsym r i 22 c

⌨️ 快捷键说明

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