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

📄 keyboard1.lst

📁 keyboard 包含三个例子程序 keyboard.c、keyboard1.c和keyboard2.c keyboard.c :使用keypad函数
💻 LST
字号:
                         .module keyboard1.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\keyboard1.c
 0015                    .dbsym s tabel _tabel Ac[16:16]
                         .area data(ram, con, rel)
--- 0000                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.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\keyboard1.c
--- 0001                   .blkb 2
                         .area idata
--- 0001 3F3F              .byte 63,63
                         .area data(ram, con, rel)
--- 0002                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
--- 0002                   .blkb 2
                         .area idata
--- 0002 3F3F              .byte 63,63
                         .area data(ram, con, rel)
--- 0003                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
--- 0003                   .dbsym s ledbuff _ledbuff Ac[6:6]
                         .area text(rom, con, rel)
--- 0000                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.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、本例采用了不作按键释放检查的函数,适用于显
                       ;               示电路需要频繁刷新 或占用CPU时间较多的程序
                       ;               ,如动态显示电路。
                       ; ******************************************************/
                       ; #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  D10A              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  D121              rcall lsl8
 0050  2E20              mov R2,R16
 0051  9420              com R2
 0052  BA22              out 0x12,R2
 0053                    .dbline 34
 0053  D05F              rcall _delay_1ms
 0054                    .dbline 35
 0054  E001              ldi R16,1
 0055  2F14              mov R17,R20
 0056  D11A              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  D0F2              rcall pop_gset1
 005E  9508              ret
 005F                    .dbsym r i 20 c
 005F                    .dbfunc s main _main fI
                       ;        keyval1 -> R20
                       ;        keyval2 -> R10
                       ;              i -> R22
                         .even
 005F                  _main::
 005F                    .dbline 42{
                       ; /*主程序的功能:读取键盘扫描码,转换成相应的字形码后*/
                       ; /*送入显示缓冲区进行显示,显示部分参考display.c     */
                       ; /*如果shift键按下,则全部清0                        */       
                       ; void main(void)
                       ; {
 005F                    .dbline 44
                       ;  unsigned char keyval1,keyval2; 
                       ;  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  C04D              rjmp L9
 0064                  L8:
 0064                    .dbline 48
                       ;   while(1)
                       ;     { 
 0064                    .dbline 49
                       ;      keyval1=scan_key();//键盘扫描函数,不作按键释放检查
 0064  D066              rcall _scan_key
 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  C045              rjmp L11
 006B                  X1:
 006B                    .dbline 51
                       ;         { 
 006B                  L13:
 006B                    .dbline 53
                       ;           do
                       ;             { 
 006B                    .dbline 54
                       ;               keyval2=scan_key();
 006B  D05F              rcall _scan_key
 006C  2E20              mov R2,R16
 006D  2E31              mov R3,R17
 006E  2CA2              mov R10,R2
 006F                    .dbline 55
                       ;               display();
 006F  DFD2              rcall _display
 0070                    .dbline 56
                       ;             }
 0070                  L14:
 0070                    .dbline 57
                       ;           while (keyval1==keyval2);//作按键释放检查 
 0070  154A              cp R20,R10
 0071  F3C9              breq L13
 0072                    .dbline 59
                       ;          
                       ;          if ((keyval1&0x80)==0x80)
 0072  2F84              mov R24,R20
 0073  7880              andi R24,128
 0074  3880              cpi R24,128
 0075  F4B1              brne L16
 0076                    .dbline 60
                       ;              {
 0076                    .dbline 61
                       ;               for(i=0;i<6;i++)
 0076  2766              clr R22
 0077  C011              rjmp L21
 0078                  L18:
 0078                    .dbline 62
 0078  E680              ldi R24,<_ledbuff
 0079  E090              ldi R25,>_ledbuff
 007A  2FE6              mov R30,R22
 007B  27FF              clr R31
 007C  0FE8              add R30,R24
 007D  1FF9              adc R31,R25
 007E  E18A              ldi R24,<_tabel
 007F  E090              ldi R25,>_tabel
 0080  93FA              st -y,R31
 0081  93EA              st -y,R30
 0082  2FE8              mov R30,R24
 0083  2FF9              mov R31,R25
 0084  95C8              lpm
 0085  91E9              ld R30,y+
 0086  91F9              ld R31,y+
 0087  8200              std z+0,R0
 0088                  L19:
 0088                    .dbline 61
 0088  9563              inc R22
 0089                  L21:
 0089                    .dbline 61
 0089  3066              cpi R22,6
 008A  F368              brlo L18
 008B                    .dbline 63
                       ;                    ledbuff[i]=tabel[0];               
                       ;               }
 008B  C024              rjmp L17
 008C                  L16:
 008C                    .dbline 65
                       ;           else
                       ;               {for (i=0;i<5;i++)
 008C                    .dbline 65
 008C  2766              clr R22
 008D  C015              rjmp L25
 008E                  L22:
 008E                    .dbline 66
 008E                    .dbline 67
 008E  2E26              mov R2,R22
 008F  2433              clr R3
 0090  E0E4              ldi R30,4
 0091  E0F0              ldi R31,0
 0092  19E2              sub R30,R2
 0093  09F3              sbc R31,R3
 0094  E680              ldi R24,<_ledbuff
 0095  E090              ldi R25,>_ledbuff
 0096  0FE8              add R30,R24
 0097  1FF9              adc R31,R25
 0098  8020              ldd R2,z+0
 0099  2E36              mov R3,R22
 009A  2444              clr R4
 009B  E0E5              ldi R30,5
 009C  E0F0              ldi R31,0
 009D  19E3              sub R30,R3
 009E  09F4              sbc R31,R4
 009F  0FE8              add R30,R24
 00A0  1FF9              adc R31,R25
 00A1  8220              std z+0,R2
 00A2                    .dbline 68
 00A2                  L23:
 00A2                    .dbline 65
 00A2  9563              inc R22
 00A3                  L25:
 00A3                    .dbline 65
 00A3  3065              cpi R22,5
 00A4  F348              brlo L22
 00A5                    .dbline 69
                       ;                   {
                       ;                    ledbuff[5-i]=ledbuff[4-i];//每按一次键,左移一位
                       ;                    }
                       ;                ledbuff[0]=tabel[keyval1&0x7f];     
 00A5  E18A              ldi R24,<_tabel
 00A6  E090              ldi R25,>_tabel
 00A7  2FE4              mov R30,R20
 00A8  27FF              clr R31
 00A9  77EF              andi R30,127
 00AA  70F0              andi R31,0
 00AB  0FE8              add R30,R24
 00AC  1FF9              adc R31,R25
 00AD  95C8              lpm
 00AE  92000060          sts _ledbuff,R0
 00B0                    .dbline 70
                       ;               }                   
 00B0                  L17:
 00B0                    .dbline 71
                       ;         }
 00B0                  L11:
 00B0                    .dbline 72
 00B0  DF91              rcall _display
 00B1                    .dbline 73
 00B1                  L9:
 00B1                    .dbline 47
 00B1  CFB2              rjmp L8
 00B2                  X0:
 00B2                    .dbline 74}
                       ;     display();
                       ;     }
                       ; }        
 00B2                  L7:
 00B2  9508              ret
 00B3                    .dbsym r keyval1 20 c
 00B3                    .dbsym r keyval2 10 c
 00B3                    .dbsym r i 22 c

⌨️ 快捷键说明

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