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

📄 keydis_drv.s

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -