📄 keydis_drv.s
字号:
.dbline 169
; if (KeyPin != KeyTmpValue) //检测按键是否依然按下
lds R2,L12
lds R3,_PortBuffer
cp R3,R2
breq L22
.dbline 170
; KeyStatu = Key_Press; //按键信号不在了,当作干扰信号丢弃
clr R2
sts L10,R2
rjmp L14
L22:
.dbline 172
; else
; KeyStatu++;
lds R24,L10
subi R24,255 ; addi 1
sts L10,R24
.dbline 173
; }
.dbline 174
; break;
rjmp L14
L24:
.dbline 178
; }
;
; case Key_Release : //等待按键松开
; {
.dbline 179
; if (KeyPin == 0xFF)
lds R24,_PortBuffer
cpi R24,255
breq X13
rjmp L14
X13:
.dbline 180
; { //若按键已经释放,则提取键值
.dbline 181
; switch (KeyTmpValue)
lds R16,L12
clr R17
cpi R16,223
ldi R30,0
cpc R17,R30
brne X14
rjmp L35
X14:
ldi R24,223
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L39
L38:
cpi R16,127
ldi R30,0
cpc R17,R30
brne X15
rjmp L37
X15:
cpi R16,127
ldi R30,0
cpc R17,R30
brge X16
rjmp L27
X16:
L40:
cpi R16,191
ldi R30,0
cpc R17,R30
brne X17
rjmp L36
X17:
rjmp L27
L39:
cpi R16,239
ldi R30,0
cpc R17,R30
breq L34
cpi R16,239
ldi R30,0
cpc R17,R30
brge X18
rjmp L27
X18:
L41:
cpi R16,247
ldi R30,0
cpc R17,R30
breq L33
cpi R16,251
ldi R30,0
cpc R17,R30
breq L32
cpi R16,253
ldi R30,0
cpc R17,R30
breq L31
cpi R16,254
ldi R30,0
cpc R17,R30
breq L30
rjmp L27
X2:
.dbline 182
; {
L30:
.dbline 184
; case 0xFE :
; {
.dbline 185
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 186
; return Key_8;
ldi R16,8
rjmp L9
X3:
.dbline 187
; break;
L31:
.dbline 191
; }
;
; case 0xFD :
; {
.dbline 192
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 193
; return Key_7;
ldi R16,7
rjmp L9
X4:
.dbline 194
; break;
L32:
.dbline 198
; }
;
; case 0xFB :
; {
.dbline 199
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 200
; return Key_6;
ldi R16,6
rjmp L9
X5:
.dbline 201
; break;
L33:
.dbline 205
; }
;
; case 0xF7 :
; {
.dbline 206
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 207
; return Key_5;
ldi R16,5
rjmp L9
X6:
.dbline 208
; break;
L34:
.dbline 212
; }
;
; case 0xEF :
; {
.dbline 213
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 214
; return Key_4;
ldi R16,4
rjmp L9
X7:
.dbline 215
; break;
L35:
.dbline 219
; }
;
; case 0xDF :
; {
.dbline 220
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 221
; return Key_3;
ldi R16,3
rjmp L9
X8:
.dbline 222
; break;
L36:
.dbline 226
; }
;
; case 0xBF :
; {
.dbline 227
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 228
; return Key_2;
ldi R16,2
rjmp L9
X9:
.dbline 229
; break;
L37:
.dbline 233
; }
;
; case 0x7F :
; {
.dbline 234
; KeyStatu = Key_Press;
clr R2
sts L10,R2
.dbline 235
; return Key_1;
ldi R16,1
rjmp L9
X10:
.dbline 236
; break;
L27:
.dbline 239
; }
; }
; KeyStatu = Key_Press; //读到的端口状态无法解析
clr R2
sts L10,R2
.dbline 240
; } //End Of "if (KeyPin == 0)"
.dbline 241
; break;
L13:
L14:
.dbline 244
; } //End Of " case Key_Release :"
; } //End Of "switch (KeyStatu)"
; return Key_Null;
clr R16
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Port_refresh _Port_refresh fV
; i -> R16
.even
_Port_refresh::
.dbline -1
.dbline 254
; }
;
; /***********************************************************
; * 函数说明:端口通讯程序 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数: *
; ***********************************************************/
; void Port_refresh (void)
; {
.dbline 257
; unsigned char i;
;
; SS_Low; //模拟#SS的下跳沿
cbi 0x5,2
.dbline 259
;
; for (i=0; i<ExtPortNum; i++)
clr R16
rjmp L46
L43:
.dbline 260
; {
.dbline 261
; SPDR = PortBuffer[i]; //刷新虚拟端口的一个字节
ldi R24,<_PortBuffer
ldi R25,>_PortBuffer
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x2e,R2
L47:
.dbline 262
L48:
.dbline 262
in R2,0x2d
sbrs R2,7
rjmp L47
.dbline 263
ldi R24,<_PortBuffer
ldi R25,>_PortBuffer
mov R30,R16
clr R31
add R30,R24
adc R31,R25
in R2,0x2e
std z+0,R2
.dbline 264
L44:
.dbline 259
inc R16
L46:
.dbline 259
cpi R16,3
brlo L43
.dbline 266
; while(!(SPSR&(1<<SPIF))); //等待通讯完成
; PortBuffer[i] = SPDR; //读回的数据返写回端口缓冲区
; }
;
; SS_High; //模拟#SS的上跳沿
sbi 0x5,2
.dbline -2
L42:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
_KeyBuffer::
.blkb 1
.dbsym e KeyBuffer _KeyBuffer c
_LEDDisBuffer::
.blkb 8
.dbsym e LEDDisBuffer _LEDDisBuffer A[8:8]c
_PortBuffer::
.blkb 3
.dbsym e PortBuffer _PortBuffer A[3:3]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -