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

📄 训练项目九:ps2键盘的使用1.s

📁 长沙理工自己的实验程序
💻 S
字号:
	.module _训练项目九:PS2键盘的使用1.c
	.area text(rom, con, rel)
;              i -> R20
;              t -> R16,R17
	.even
_delay::
	st -y,R20
; 
; /****************************************************************************
; ** File Name:          PS/2键盘的使用
; ** Createed By:        Wangchangsong
; ** Create Date:        07/24/2008
; ** Version:            1.0
; ** Descriptions:       
; **
; **---------------------------------------------------------------------------
; ** Modified By:
; ** Modified Date:
; ** Version:
; ** Descriptions:
; **
; ****************************************************************************/
; #include <lcd.h>
; 
; /****************************************************************************
; ** Function Name:      delay     
; ** Descriptions:       delay time
; ** Input Parameters:   t
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; 
; void delay (unsigned int t)                      /*延时*/
; {
;     unsigned char i;
;     for (i=1;i<t;i++);
	ldi R20,1
	xjmp L5
L2:
L3:
	inc R20
L5:
	mov R2,R20
	clr R3
	cp R2,R16
	cpc R3,R17
	brlo L2
X0:
L1:
	.dbline 0 ; func end
	ld R20,y+
	ret
;              p -> R20,R21
;           data -> R16
	.even
_lcd_w::
	st -y,R20
	st -y,R21
; }
; 
; /****************************************************************************
; ** Function Name:      lcd_w     
; ** Descriptions:       write date
; ** Input Parameters:   date
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; 
; void lcd_w(unsigned char data)
; {
;     unsigned char *p=(unsigned char *)(LCD);
	ldi R20,36864
	ldi R21,144
L7:
; 	
;     while((PINE&0x80)!=0x00);
L8:
	sbic 0x1,7
	rjmp L7
X1:
;     dat;
	sbi 0x18,0
;     *p=data;
	movw R30,R20
	std z+0,R16
;     cl_dat;
	cbi 0x18,0
;     req;
	sbi 0x03,6
L10:
; 	
;     while((PINE&0x80)==0x00);
L11:
	sbis 0x1,7
	rjmp L10
X2:
;     cl_req;
	cbi 0x03,6
L6:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.even
_lcd_init::
; }
; 
; /****************************************************************************
; ** Function Name:      lcd_init     
; ** Descriptions:       
; ** Input Parameters:   void
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; 
; void lcd_init (void)
; {
;     MCUCR=MCUCR|0x80;
	in R24,0x35
	ori R24,128
	out 0x35,R24
;     DDRB|=0x01;
	sbi 0x17,0
;     PORTB&=0xfe;
	in R24,0x18
	andi R24,254
	out 0x18,R24
;     DDRE=0x40;
	ldi R24,64
	out 0x2,R24
;     PORTE=0xff;
	ldi R24,255
	out 0x3,R24
; 	
;     cl_reset;
	cbi 0x15,3
;     delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
; 	set_reset;
	sbi 0x15,3
;     delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
;     cl_req;
	cbi 0x03,6
;     delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
L13:
	.dbline 0 ; func end
	ret
	.even
_lcd_clear::
; }
; 
; /****************************************************************************
; ** Function Name:      timeDelay       
; ** Descriptions:       delay time
; ** Input Parameters:   uiTime
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; 
; void lcd_clear (void)
; {
;     lcd_w(0xf4);
	ldi R16,244
	xcall _lcd_w
L14:
	.dbline 0 ; func end
	ret
;             ch -> R20,R21
;              y -> R10
;              x -> R22
	.even
_lcd_putsc::
	xcall push_xgsetF00C
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
; }
; 
; /****************************************************************************
; ** Function Name:      lcd_putsc  
; ** Descriptions:       
; ** Input Parameters:   x,y,ch
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; void lcd_putsc (unsigned char x,unsigned char y,unsigned char *ch)
; {
;     x+=2;
	subi R22,254    ; addi 2
	xjmp L17
L16:
;     while (*ch!=0)
; 	{
;         lcd_w(0xf0);
	ldi R16,240
	xcall _lcd_w
;         lcd_w(x);
	mov R16,R22
	xcall _lcd_w
;         lcd_w(y);
	mov R16,R10
	xcall _lcd_w
;         lcd_w(*ch-0xa0);
	movw R30,R20
	ldd R16,z+0
	subi R16,160
	xcall _lcd_w
;         ch++;
	subi R20,255  ; offset = 1
	sbci R21,255
;         lcd_w(*ch-0xa0);
	movw R30,R20
	ldd R16,z+0
	subi R16,160
	xcall _lcd_w
;         ch++;
	subi R20,255  ; offset = 1
	sbci R21,255
;         if (x>=0x09)
	cpi R22,9
	brlo L19
X3:
; 		{
;             x=2;
	ldi R22,2
;             y+=1;
	inc R10
;         }
	xjmp L20
L19:
; 		else
; 		{ 
;             x++;
	inc R22
; 		}
L20:
;     }
L17:
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L16
X4:
L15:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
;             ch -> R22,R23
;              y -> R10
;              x -> R20
	.even
_lcd_putse::
	xcall push_xgsetF00C
	mov R10,R18
	mov R20,R16
	ldd R22,y+6
	ldd R23,y+7
; }
; 
; /****************************************************************************
; ** Function Name:      lcd_putse       
; ** Descriptions:      
; ** Input Parameters:   x,y,ch
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; 
; void lcd_putse (unsigned char x,unsigned char y,unsigned char *ch)
; {
;     x+=4;
	subi R20,252    ; addi 4
	xjmp L23
L22:
;     while (*ch!=0){
;         lcd_w(0xf1);
	ldi R16,241
	xcall _lcd_w
;         lcd_w(x);
	mov R16,R20
	xcall _lcd_w
;         lcd_w(y);
	mov R16,R10
	xcall _lcd_w
;         lcd_w(*ch);
	movw R30,R22
	ldd R16,z+0
	xcall _lcd_w
;         ch++;
	subi R22,255  ; offset = 1
	sbci R23,255
;         if (x>=19){
	cpi R20,19
	brlo L25
X5:
;             x=4;
	ldi R20,4
;             y+=8;
	mov R24,R10
	subi R24,248    ; addi 8
	mov R10,R24
;         }else{ 
	xjmp L26
L25:
;             x++;
	inc R20
; 		}
L26:
;     }
L23:
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L22
X6:
L21:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
;             ch -> y+4
;              y -> R10
;              x -> R20
	.even
_lcd_putss::
	xcall push_xgset300C
	mov R10,R18
	mov R20,R16
; }
; 
; /****************************************************************************
; ** Function Name:      lcd_putss       
; ** Descriptions:      
; ** Input Parameters:   x,y,ch
; ** Output parameters:  void
; ** Returned Value:     void
; **---------------------------------------------------------------------------
; ****************************************************************************/
; void lcd_putss (unsigned char x,unsigned char y,unsigned char ch)
; {
;     x+=4;
	subi R20,252    ; addi 4
;     lcd_w(0xf1);
	ldi R16,241
	xcall _lcd_w
;     lcd_w(x);
	mov R16,R20
	xcall _lcd_w
;     lcd_w(y);
	mov R16,R10
	xcall _lcd_w
;     lcd_w(ch);
	ldd R16,y+4
	xcall _lcd_w
L27:
	.dbline 0 ; func end
	xjmp pop_xgset300C
; }

⌨️ 快捷键说明

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