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

📄 keyboard1.lis

📁 AVR单片机例程
💻 LIS
字号:
                         .module keyboard1.c
                         .area lit(rom, con, rel)
 0000                 _tabel::
 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
 000A 777C              .byte 'w,124
 000C 395E              .byte 57,94
 000E 7971              .byte 'y,'q
 0010                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
 0010                   .dbsym s tabel _tabel Ac[16:16]
                         .area data(ram, con, rel)
 0000                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
 0000                 _ledbuff::
 0000                   .blkb 2
                         .area idata
 0000 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)
 0004                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
 0004                   .blkb 2
                         .area idata
 0004 3F3F              .byte 63,63
                         .area data(ram, con, rel)
 0006                   .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
 0006                   .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
 0000                 _port_init::
 0000                   .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)//端口初始化
                       ;      {
 0000                   .dbline 20
                       ;       DDRC=0x0f;
 0000 8FE0              ldi R24,15
 0002 84BB              out 0x14,R24
 0004                   .dbline 21
                       ;       DDRD=0x3f;
 0004 8FE3              ldi R24,63
 0006 81BB              out 0x11,R24
 0008                   .dbline 22
                       ;       DDRB=0xff;
 0008 8FEF              ldi R24,255
 000A 87BB              out 0x17,R24
 000C                   .dbline 23
                       ;       PORTD=0xff;
 000C 82BB              out 0x12,R24
 000E                   .dbline 24
                       ;       PORTB=0xff;
 000E 88BB              out 0x18,R24
 0010                   .dbline 25
                       ;       PORTC=0xff;
 0010 85BB              out 0x15,R24
 0012                   .dbline 26}
                       ;      }
 0012                 L1:
 0012 0895              ret
 0014                   .dbfunc s display _display fI
                       ;              i -> R20
                         .even
 0014                 _display::
 0014 00D0              rcall push_gset1
 0016                   .dbline 28{
                       ; void display(void)//六路动态扫描显示
                       ; {
 0016                   .dbline 30
                       ;  unsigned char i;
                       ;  for (i=0;i<6;i++)
 0016 4427              clr R20
 0018 16C0              rjmp L6
 001A                 L3:
 001A                   .dbline 31
 001A                   .dbline 32
 001A 80E0              ldi R24,<_ledbuff
 001C 90E0              ldi R25,>_ledbuff
 001E E42F              mov R30,R20
 0020 FF27              clr R31
 0022 E80F              add R30,R24
 0024 F91F              adc R31,R25
 0026 2080              ldd R2,z+0
 0028 28BA              out 0x18,R2
 002A                   .dbline 33
 002A 01E0              ldi R16,1
 002C 142F              mov R17,R20
 002E 00D0              rcall lsl8
 0030 202E              mov R2,R16
 0032 2094              com R2
 0034 22BA              out 0x12,R2
 0036                   .dbline 34
 0036 00D0              rcall _delay_1ms
 0038                   .dbline 35
 0038 01E0              ldi R16,1
 003A 142F              mov R17,R20
 003C 00D0              rcall lsl8
 003E 22B2              in R2,0x12
 0040 202A              or R2,R16
 0042 22BA              out 0x12,R2
 0044                   .dbline 36
 0044                 L4:
 0044                   .dbline 30
 0044 4395              inc R20
 0046                 L6:
 0046                   .dbline 30
 0046 4630              cpi R20,6
 0048 40F3              brlo L3
 004A                   .dbline 37}
                       ;   {
                       ;    PORTB=ledbuff[i];
                       ;    PORTD=~(1<<i);
                       ;    delay_1ms();
                       ;    PORTD|=(1<<i);  
                       ;   }
                       ; }
 004A                 L2:
 004A 00D0              rcall pop_gset1
 004C 0895              ret
 004E                   .dbsym r i 20 c
 004E                   .dbfunc s main _main fI
                       ;        keyval1 -> R20
                       ;        keyval2 -> R10
                       ;              i -> R22
                         .even
 004E                 _main::
 004E                   .dbline 42{
                       ; /*主程序的功能:读取键盘扫描码,转换成相应的字形码后*/
                       ; /*送入显示缓冲区进行显示,显示部分参考display.c     */
                       ; /*如果shift键按下,则全部清0                        */       
                       ; void main(void)
                       ; {
 004E                   .dbline 44
                       ;  unsigned char keyval1,keyval2; 
                       ;  unsigned char i=0;
 004E 6627              clr R22
 0050                   .dbline 45
                       ;  MCUCR=0;
 0050 2224              clr R2
 0052 25BE              out 0x35,R2
 0054                   .dbline 46
                       ;  port_init();
 0054 D5DF              rcall _port_init
 0056 4DC0              rjmp L9
 0058                 L8:
 0058                   .dbline 48
                       ;   while(1)
                       ;     { 
 0058                   .dbline 49
                       ;      keyval1=scan_key();//键盘扫描函数,不作按键释放检查
 0058 00D0              rcall _scan_key
 005A 202E              mov R2,R16
 005C 312E              mov R3,R17
 005E 422D              mov R20,R2
 0060                   .dbline 50
                       ;      if (keyval1!=0x7f)
 0060 4F37              cpi R20,127
 0062 09F4              brne X1
 0064 45C0              rjmp L11
 0066                 X1:
 0066                   .dbline 51
                       ;         { 
 0066                 L13:
 0066                   .dbline 53
                       ;           do
                       ;             { 
 0066                   .dbline 54
                       ;               keyval2=scan_key();
 0066 00D0              rcall _scan_key
 0068 202E              mov R2,R16
 006A 312E              mov R3,R17
 006C A22C              mov R10,R2
 006E                   .dbline 55
                       ;               display();
 006E D2DF              rcall _display
 0070                   .dbline 56
                       ;             }
 0070                 L14:
 0070                   .dbline 57
                       ;           while (keyval1==keyval2);//作按键释放检查 
 0070 4A15              cp R20,R10
 0072 C9F3              breq L13
 0074                   .dbline 59
                       ;          
                       ;          if ((keyval1&0x80)==0x80)
 0074 842F              mov R24,R20
 0076 8078              andi R24,128
 0078 8038              cpi R24,128
 007A B1F4              brne L16
 007C                   .dbline 60
                       ;              {
 007C                   .dbline 61
                       ;               for(i=0;i<6;i++)
 007C 6627              clr R22
 007E 11C0              rjmp L21
 0080                 L18:
 0080                   .dbline 62
 0080 80E0              ldi R24,<_ledbuff
 0082 90E0              ldi R25,>_ledbuff
 0084 E62F              mov R30,R22
 0086 FF27              clr R31
 0088 E80F              add R30,R24
 008A F91F              adc R31,R25
 008C 80E0              ldi R24,<_tabel
 008E 90E0              ldi R25,>_tabel
 0090 FA93              st -y,R31
 0092 EA93              st -y,R30
 0094 E82F              mov R30,R24
 0096 F92F              mov R31,R25
 0098 C895              lpm
 009A E991              ld R30,y+
 009C F991              ld R31,y+
 009E 0082              std z+0,R0
 00A0                 L19:
 00A0                   .dbline 61
 00A0 6395              inc R22
 00A2                 L21:
 00A2                   .dbline 61
 00A2 6630              cpi R22,6
 00A4 68F3              brlo L18
 00A6                   .dbline 63
                       ;                    ledbuff[i]=tabel[0];               
                       ;               }
 00A6 24C0              rjmp L17
 00A8                 L16:
 00A8                   .dbline 65
                       ;           else
                       ;               {for (i=0;i<5;i++)
 00A8                   .dbline 65
 00A8 6627              clr R22
 00AA 15C0              rjmp L25
 00AC                 L22:
 00AC                   .dbline 66
 00AC                   .dbline 67
 00AC 262E              mov R2,R22
 00AE 3324              clr R3
 00B0 E4E0              ldi R30,4
 00B2 F0E0              ldi R31,0
 00B4 E219              sub R30,R2
 00B6 F309              sbc R31,R3
 00B8 80E0              ldi R24,<_ledbuff
 00BA 90E0              ldi R25,>_ledbuff
 00BC E80F              add R30,R24
 00BE F91F              adc R31,R25
 00C0 2080              ldd R2,z+0
 00C2 362E              mov R3,R22
 00C4 4424              clr R4
 00C6 E5E0              ldi R30,5
 00C8 F0E0              ldi R31,0
 00CA E319              sub R30,R3
 00CC F409              sbc R31,R4
 00CE E80F              add R30,R24
 00D0 F91F              adc R31,R25
 00D2 2082              std z+0,R2
 00D4                   .dbline 68
 00D4                 L23:
 00D4                   .dbline 65
 00D4 6395              inc R22
 00D6                 L25:
 00D6                   .dbline 65
 00D6 6530              cpi R22,5
 00D8 48F3              brlo L22
 00DA                   .dbline 69
                       ;                   {
                       ;                    ledbuff[5-i]=ledbuff[4-i];//每按一次键,左移一位
                       ;                    }
                       ;                ledbuff[0]=tabel[keyval1&0x7f];     
 00DA 80E0              ldi R24,<_tabel
 00DC 90E0              ldi R25,>_tabel
 00DE E42F              mov R30,R20
 00E0 FF27              clr R31
 00E2 EF77              andi R30,127
 00E4 F070              andi R31,0
 00E6 E80F              add R30,R24
 00E8 F91F              adc R31,R25
 00EA C895              lpm
 00EC 00920000          sts _ledbuff,R0
 00F0                   .dbline 70
                       ;               }                   
 00F0                 L17:
 00F0                   .dbline 71
                       ;         }
 00F0                 L11:
 00F0                   .dbline 72
 00F0 91DF              rcall _display
 00F2                   .dbline 73
 00F2                 L9:
 00F2                   .dbline 47
 00F2 B2CF              rjmp L8
 00F4                 X0:
 00F4                   .dbline 74}
                       ;     display();
                       ;     }
                       ; }        
 00F4                 L7:
 00F4 0895              ret
 00F6                   .dbsym r keyval1 20 c
 00F6                   .dbsym r keyval2 10 c
 00F6                   .dbsym r i 22 c

⌨️ 快捷键说明

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