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

📄 keydis_drv.lis

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0058 00D0              rcall pop_gset1
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbsym r LocalTime 20 c
 005C                   .dbend
                        .area data(ram, con, rel)
 0001                   .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
 0001           L10:
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
 0002           L11:
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
 0000           L12:
 0000                   .blkb 1
                        .area text(rom, con, rel)
 005C                   .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
 005C                   .dbfunc e Key_service _Key_service fc
 005C                   .dbsym s KeyTmpValue L12 c
 005C                   .dbsym s KeyTimer L11 c
 005C                   .dbsym s KeyStatu L10 c
                        .even
 005C           _Key_service::
 005C                   .dbline -1
 005C                   .dbline 146
 005C           ; }
 005C           ; 
 005C           ; /***********************************************************
 005C           ; *   函数说明:按键处理程序                                 *
 005C           ; *   输入:    无                                           *
 005C           ; *   输出:    无                                           *
 005C           ; *   调用函数:                                             *
 005C           ; ***********************************************************/
 005C           ; unsigned char Key_service (void)
 005C           ; {
 005C                   .dbline 151
 005C           ;     static unsigned char KeyStatu = Key_Press;
 005C           ;     static unsigned char KeyTimer = 0;
 005C           ;     static unsigned char KeyTmpValue;
 005C           ; 
 005C           ;     switch (KeyStatu)
 005C 00910100          lds R16,L10
 0060 1127              clr R17
 0062 0030              cpi R16,0
 0064 0107              cpc R16,R17
 0066 49F0              breq L16
 0068           X0:
 0068 0130              cpi R16,1
 006A E0E0              ldi R30,0
 006C 1E07              cpc R17,R30
 006E B1F0              breq L19
 0070 0230              cpi R16,2
 0072 E0E0              ldi R30,0
 0074 1E07              cpc R17,R30
 0076 51F1              breq L24
 0078 90C0              rjmp L13
 007A           X1:
 007A                   .dbline 152
 007A           ;     {
 007A           L16:
 007A                   .dbline 154
 007A           ;         case Key_Press :                //检测按键按下
 007A           ;         {
 007A                   .dbline 155
 007A           ;             if (KeyPin != 0xFF)         //检测是否有键按下
 007A 80910A00          lds R24,_PortBuffer
 007E 8F3F              cpi R24,255
 0080 09F4              brne X11
 0082 8BC0              rjmp L14
 0084           X11:
 0084                   .dbline 156
 0084           ;             {
 0084                   .dbline 157
 0084           ;                 KeyTmpValue = KeyPin;   //暂存键值
 0084 282E              mov R2,R24
 0086 20920000          sts L12,R2
 008A                   .dbline 158
 008A           ;                 KeyStatu++;             //如检测到有键按下则翻转处理状态
 008A 80910100          lds R24,L10
 008E 8F5F              subi R24,255    ; addi 1
 0090 80930100          sts L10,R24
 0094                   .dbline 159
 0094           ;                 KeyTimer = 10;          //初始化抗抖动定时器,抗抖动时间10mS
 0094 8AE0              ldi R24,10
 0096 80930200          sts L11,R24
 009A                   .dbline 160
 009A           ;             }
 009A                   .dbline 161
 009A           ;             break;
 009A 7FC0              rjmp L14
 009C           L19:
 009C                   .dbline 165
 009C           ;         }
 009C           ; 
 009C           ;         case Key_Bounce :            //抗抖动
 009C           ;         {
 009C                   .dbline 166
 009C           ;             KeyTimer--;
 009C 80910200          lds R24,L11
 00A0 8150              subi R24,1
 00A2 80930200          sts L11,R24
 00A6                   .dbline 167
 00A6           ;             if (KeyTimer == 0)
 00A6 8823              tst R24
 00A8 09F0              breq X12
 00AA 77C0              rjmp L14
 00AC           X12:
 00AC                   .dbline 168
 00AC           ;             {
 00AC                   .dbline 169
 00AC           ;                 if (KeyPin != KeyTmpValue)      //检测按键是否依然按下
 00AC 20900000          lds R2,L12
 00B0 30900A00          lds R3,_PortBuffer
 00B4 3214              cp R3,R2
 00B6 21F0              breq L22
 00B8                   .dbline 170
 00B8           ;                     KeyStatu = Key_Press;       //按键信号不在了,当作干扰信号丢弃
 00B8 2224              clr R2
 00BA 20920100          sts L10,R2
 00BE 6DC0              rjmp L14
 00C0           L22:
 00C0                   .dbline 172
 00C0           ;                 else
 00C0           ;                     KeyStatu++;
 00C0 80910100          lds R24,L10
 00C4 8F5F              subi R24,255    ; addi 1
 00C6 80930100          sts L10,R24
 00CA                   .dbline 173
 00CA           ;             }
 00CA                   .dbline 174
 00CA           ;             break;
 00CA 67C0              rjmp L14
 00CC           L24:
 00CC                   .dbline 178
 00CC           ;         }
 00CC           ; 
 00CC           ;         case Key_Release :          //等待按键松开
 00CC           ;         {
 00CC                   .dbline 179
 00CC           ;             if (KeyPin == 0xFF)
 00CC 80910A00          lds R24,_PortBuffer
 00D0 8F3F              cpi R24,255
 00D2 09F0              breq X13
 00D4 62C0              rjmp L14
 00D6           X13:
 00D6                   .dbline 180
 00D6           ;             {                       //若按键已经释放,则提取键值
 00D6                   .dbline 181
 00D6           ;                 switch (KeyTmpValue)
 00D6 00910000          lds R16,L12
 00DA 1127              clr R17
 00DC 0F3D              cpi R16,223
 00DE E0E0              ldi R30,0
 00E0 1E07              cpc R17,R30
 00E2 09F4              brne X14
 00E4 48C0              rjmp L35
 00E6           X14:
 00E6 8FED              ldi R24,223
 00E8 90E0              ldi R25,0
 00EA 8017              cp R24,R16
 00EC 9107              cpc R25,R17
 00EE 84F0              brlt L39
 00F0           L38:
 00F0 0F37              cpi R16,127
 00F2 E0E0              ldi R30,0
 00F4 1E07              cpc R17,R30
 00F6 09F4              brne X15
 00F8 48C0              rjmp L37
 00FA           X15:
 00FA 0F37              cpi R16,127
 00FC E0E0              ldi R30,0
 00FE 1E07              cpc R17,R30
 0100 0CF4              brge X16
 0102 48C0              rjmp L27
 0104           X16:
 0104           L40:
 0104 0F3B              cpi R16,191
 0106 E0E0              ldi R30,0
 0108 1E07              cpc R17,R30
 010A 09F4              brne X17
 010C 39C0              rjmp L36
 010E           X17:
 010E 42C0              rjmp L27
 0110           L39:
 0110 0F3E              cpi R16,239
 0112 E0E0              ldi R30,0
 0114 1E07              cpc R17,R30
 0116 51F1              breq L34
 0118 0F3E              cpi R16,239
 011A E0E0              ldi R30,0
 011C 1E07              cpc R17,R30
 011E 0CF4              brge X18
 0120 39C0              rjmp L27
 0122           X18:
 0122           L41:
 0122 073F              cpi R16,247
 0124 E0E0              ldi R30,0
 0126 1E07              cpc R17,R30
 0128 E1F0              breq L33
 012A 0B3F              cpi R16,251
 012C E0E0              ldi R30,0
 012E 1E07              cpc R17,R30
 0130 99F0              breq L32
 0132 0D3F              cpi R16,253
 0134 E0E0              ldi R30,0
 0136 1E07              cpc R17,R30
 0138 51F0              breq L31
 013A 0E3F              cpi R16,254
 013C E0E0              ldi R30,0
 013E 1E07              cpc R17,R30
 0140 09F0              breq L30
 0142 28C0              rjmp L27
 0144           X2:
 0144                   .dbline 182
 0144           ;                 {
 0144           L30:
 0144                   .dbline 184
 0144           ;                     case 0xFE :
 0144           ;                     {
 0144                   .dbline 185
 0144           ;                         KeyStatu = Key_Press;
 0144 2224              clr R2
 0146 20920100          sts L10,R2
 014A                   .dbline 186
 014A           ;                         return Key_8;
 014A 08E0              ldi R16,8
 014C 27C0              rjmp L9

⌨️ 快捷键说明

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