📄 keydis_drv.lis
字号:
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 + -