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

📄 keyboard.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 114
; 		  }
; 	  if (up==1)                           //SHIFT键开关
	lds R24,L21
	cpi R24,1
	brne L25
	.dbline 115
; 	  	  {
	.dbline 116
; 		   up=0;
	clr R2
	sts L21,R2
	.dbline 117
; 		   if ((sc==0x12)|(sc==0x59)) shift=0;
	mov R24,R12
	cpi R24,18
	brne L29
	ldi R24,1
	ldi R25,0
	movw R14,R24
	xjmp L30
L29:
	clr R14
	clr R15
L30:
	mov R24,R12
	cpi R24,89
	brne L31
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L32
L31:
	clr R10
	clr R11
L32:
	movw R2,R14
	or R2,R10
	or R3,R11
	tst R2
	brne X0
	tst R3
	brne X2
	xjmp L19
X2:
X0:
	.dbline 117
	clr R2
	sts L20,R2
	.dbline 118
; 		   return;
	xjmp L19
L25:
	.dbline 120
; 		  }	 
; 	  switch (sc)                          //检测左SHIFT键
	mov R10,R12
	clr R11
	movw R24,R10
	cpi R24,18
	ldi R30,0
	cpc R25,R30
	breq L36
	cpi R24,18
	ldi R30,0
	cpc R25,R30
	brlt L33
L56:
	movw R24,R10
	cpi R24,89
	ldi R30,0
	cpc R25,R30
	breq L37
	xjmp L33
X1:
	.dbline 121
; 	    {
L36:
	.dbline 122
; 		 case 0x12:{
	.dbline 123
; 					shift=1;		
	ldi R24,1
	sts L20,R24
	.dbline 124
; 					shiftup=1;
	sts L22,R24
	.dbline 125
; 		           }		           
L37:
	.dbline 126
; 		 case 0x59:{                        //检测右SHIFT键
	.dbline 127
; 				    shift=1;	
	ldi R24,1
	sts L20,R24
	.dbline 128
; 					shiftup=1;
	sts L22,R24
	.dbline 129
; 		           }		           
L33:
	.dbline 130
; 		 default:{
	.dbline 131
; 		          if (shift==0)
	lds R2,L20
	tst R2
	brne L38
	.dbline 132
; 					 {
	.dbline 133
	clr R10
	xjmp L43
L40:
	.dbline 133
L41:
	.dbline 133
	inc R10
L43:
	.dbline 133
; 					 for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_unshifted
	ldi R25,>_unshifted
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	cp R2,R12
	breq L44
	tst R2
	brne L40
L44:
	.dbline 134
;                      if (unshifted[i][0] == sc)
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_unshifted
	ldi R25,>_unshifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R12
	breq X3
	xjmp L39
X3:
	.dbline 135
; 						  put_kbbuff(unshifted[i][1]);	 
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_unshifted+1
	ldi R25,>_unshifted+1
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _put_kbbuff
	.dbline 136
; 					 }
	xjmp L39
L38:
	.dbline 138
; 				  else
; 				     {
	.dbline 139
	clr R10
	xjmp L51
L48:
	.dbline 139
L49:
	.dbline 139
	inc R10
L51:
	.dbline 139
; 					 for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_shifted
	ldi R25,>_shifted
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	cp R2,R12
	breq L52
	tst R2
	brne L48
L52:
	.dbline 140
;                      if (shifted[i][0] == sc)
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_shifted
	ldi R25,>_shifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R12
	brne L53
	.dbline 141
;                          {
	.dbline 142
; 						  put_kbbuff(shifted[i][1]);						  
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_shifted+1
	ldi R25,>_shifted+1
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _put_kbbuff
	.dbline 143
; 						 }	 	 						 
L53:
	.dbline 144
; 					 } 
L39:
	.dbline 145
; 		         }		         
	.dbline 146
; 		} 		
	.dbline -2
	.dbline 147
;     }
L19:
	xcall pop_gset5x
	.dbline 0 ; func end
	ret
	.dbsym r i 10 c
	.dbsym r sc 12 c
	.dbend
	.area vector(rom, abs)
	.org 8
	jmp _int1_isr
	.area text(rom, con, rel)
	.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
	.area bss(ram, con, rel)
	.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
L58:
	.blkb 1
	.area text(rom, con, rel)
	.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
	.dbfunc e int1_isr _int1_isr fV
	.dbsym s data L58 c
	.even
_int1_isr::
	xcall push_lset
	xcall push_gset3x
	.dbline -1
	.dbline 151
; #pragma interrupt_handler int1_isr:iv_INT1    
; //键盘数据读取中断程序
; void int1_isr(void)
;    {
	.dbline 153
;     static unsigned char data;   	
;     switch (bitcount)
	lds R10,_bitcount
	clr R11
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L66
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L65
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brlt L59
L71:
	movw R24,R10
	cpi R24,11
	ldi R30,0
	cpc R25,R30
	breq L62
	xjmp L59
X4:
	.dbline 154
; 	  {
L62:
	.dbline 155
; 	   case 11:{
	.dbline 156
; 	            if ((PIN_KB&(1<<DATAPIN))!=0)
	sbis 0x10,2
	rjmp L63
	.dbline 157
; 				     return;
	xjmp L57
L63:
	.dbline 159
; 			    else		 
; 	   			    bitcount--;
	lds R24,_bitcount
	subi R24,1
	sts _bitcount,R24
	.dbline 160
; 	    		break;}
	xjmp L60
L65:
	.dbline 161
; 	   case 2:{
	.dbline 162
; 	   			bitcount--;	   		   
	lds R24,_bitcount
	subi R24,1
	sts _bitcount,R24
	.dbline 163
; 			    break;}
	xjmp L60
L66:
	.dbline 164
; 	   case 1:{
	.dbline 165
; 	   			bitcount--;	 
	lds R24,_bitcount
	subi R24,1
	sts _bitcount,R24
	.dbline 166
; 				if ((PIN_KB&(1<<DATAPIN))==0)
	sbic 0x10,2
	rjmp L67
	.dbline 167
; 				    {
	.dbline 168
; 					 bitcount=11;
	ldi R24,11
	sts _bitcount,R24
	.dbline 169
; 					 return;
	xjmp L57
L67:
	.dbline 172
; 					}
; 				else
; 				   {
	.dbline 173
; 				    bitcount=11;
	ldi R24,11
	sts _bitcount,R24
	.dbline 174
; 		            decode(data);
	lds R16,L58
	xcall _decode
	.dbline 175
; 				   }	  
	.dbline 176
; 	   	        break;}
	xjmp L60
L59:
	.dbline 177
; 	   default:{
	.dbline 178
; 	   	        data = (data >> 1);
	lds R2,L58
	lsr R2
	sts L58,R2
	.dbline 179
;                 if((PIN_KB&(1<<DATAPIN))!=0)
	sbis 0x10,2
	rjmp L69
	.dbline 180
;                     data|=0x80;
	mov R24,R2
	ori R24,128
	sts L58,R24
L69:
	.dbline 181
	lds R24,_bitcount
	subi R24,1
	sts _bitcount,R24
	.dbline 182
	.dbline 183
L60:
	.dbline -2
	.dbline 184
; 				bitcount--;
; 	            }		
; 	  }		 		 	  	
;     } 
L57:
	xcall pop_gset3x
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
;            key -> R10
	.even
_main::
	.dbline -1
	.dbline 187
; //PC键盘演示程序,SHIFT键和按键同时按下时为大写
;   void main()
;   {
	.dbline 190
;   unsigned char key;
;   
;   uart_init();
	xcall _uart_init
	.dbline 191
;   init_kb();
	xcall _init_kb
	.dbline 192
;   puts("双龙电子PC键盘演示程序:");
	ldi R16,<L73
	ldi R17,>L73
	xcall _puts
	.dbline 193
;   putchar(0x0d);
	ldi R16,13
	xcall _putchar
	.dbline 194
;   putchar(0x0d);
	ldi R16,13
	xcall _putchar
	xjmp L75
L74:
	.dbline 196
;   while(1)
;        {
	.dbline 198
; 	  
;        key=get_char();
	xcall _get_char
	mov R10,R16
	.dbline 199
;        if (key!=0)
	tst R16
	breq L77
	.dbline 200
;             {
	.dbline 201
;             if (key==0x0d)
	cpi R16,13
	brne L79
	.dbline 202
;                 {
	.dbline 203
;                 putchar('\n');
	ldi R16,10
	xcall _putchar
	.dbline 204
;                 putchar(key);
	mov R16,R10
	xcall _putchar
	.dbline 205
;                 }
	xjmp L80
L79:
	.dbline 207
;             else
;                 putchar(key);
	mov R16,R10
	xcall _putchar
L80:
	.dbline 208
;             }
L77:
	.dbline 209
L75:
	.dbline 195
	xjmp L74
X5:
	.dbline -2
	.dbline 210
;          }
;   }
L72:
	.dbline 0 ; func end
	ret
	.dbsym r key 10 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
_kb_buffer::
	.blkb 64
	.dbsym e kb_buffer _kb_buffer A[64:64]c
_bitcount::
	.blkb 1
	.dbsym e bitcount _bitcount c
	.area data(ram, con, rel)
	.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
L73:
	.blkb 24
	.area idata
	.byte 203,171,193,250,181,231,215,211,'P,'C,188,252,197,204,209,221
	.byte 202,190,179,204,208,242,58,0
	.area data(ram, con, rel)
	.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c

⌨️ 快捷键说明

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