?? 訓練項目九:ps2鍵盤的使用1.lis
字號:
.module _訓練項目九:PS2鍵盤的使用1.c
.area text(rom, con, rel)
; i -> R20
; t -> R16,R17
.even
0000 _delay::
0000 4A93 st -y,R20
0002 ;
0002 ; /****************************************************************************
0002 ; ** File Name: PS/2鍵盤的使用
0002 ; ** Createed By: Wangchangsong
0002 ; ** Create Date: 07/24/2008
0002 ; ** Version: 1.0
0002 ; ** Descriptions:
0002 ; **
0002 ; **---------------------------------------------------------------------------
0002 ; ** Modified By:
0002 ; ** Modified Date:
0002 ; ** Version:
0002 ; ** Descriptions:
0002 ; **
0002 ; ****************************************************************************/
0002 ; #include <lcd.h>
0002 ;
0002 ; /****************************************************************************
0002 ; ** Function Name: delay
0002 ; ** Descriptions: delay time
0002 ; ** Input Parameters: t
0002 ; ** Output parameters: void
0002 ; ** Returned Value: void
0002 ; **---------------------------------------------------------------------------
0002 ; ****************************************************************************/
0002 ;
0002 ; void delay (unsigned int t) /*延時*/
0002 ; {
0002 ; unsigned char i;
0002 ; for (i=1;i<t;i++);
0002 41E0 ldi R20,1
0004 01C0 xjmp L5
0006 L2:
0006 L3:
0006 4395 inc R20
0008 L5:
0008 242E mov R2,R20
000A 3324 clr R3
000C 2016 cp R2,R16
000E 3106 cpc R3,R17
0010 D0F3 brlo L2
0012 X0:
0012 L1:
0012 .dbline 0 ; func end
0012 4991 ld R20,y+
0014 0895 ret
0016 ; p -> R20,R21
0016 ; data -> R16
.even
0016 _lcd_w::
0016 4A93 st -y,R20
0018 5A93 st -y,R21
001A ; }
001A ;
001A ; /****************************************************************************
001A ; ** Function Name: lcd_w
001A ; ** Descriptions: write date
001A ; ** Input Parameters: date
001A ; ** Output parameters: void
001A ; ** Returned Value: void
001A ; **---------------------------------------------------------------------------
001A ; ****************************************************************************/
001A ;
001A ; void lcd_w(unsigned char data)
001A ; {
001A ; unsigned char *p=(unsigned char *)(LCD);
001A 40E0 ldi R20,36864
001C 50E9 ldi R21,144
001E L7:
001E ;
001E ; while((PINE&0x80)!=0x00);
001E L8:
001E 0F99 sbic 0x1,7
0020 FECF rjmp L7
0022 X1:
0022 ; dat;
0022 C09A sbi 0x18,0
0024 ; *p=data;
0024 FA01 movw R30,R20
0026 0083 std z+0,R16
0028 ; cl_dat;
0028 C098 cbi 0x18,0
002A ; req;
002A 1E9A sbi 0x03,6
002C L10:
002C ;
002C ; while((PINE&0x80)==0x00);
002C L11:
002C 0F9B sbis 0x1,7
002E FECF rjmp L10
0030 X2:
0030 ; cl_req;
0030 1E98 cbi 0x03,6
0032 L6:
0032 .dbline 0 ; func end
0032 5991 ld R21,y+
0034 4991 ld R20,y+
0036 0895 ret
.even
0038 _lcd_init::
0038 ; }
0038 ;
0038 ; /****************************************************************************
0038 ; ** Function Name: lcd_init
0038 ; ** Descriptions:
0038 ; ** Input Parameters: void
0038 ; ** Output parameters: void
0038 ; ** Returned Value: void
0038 ; **---------------------------------------------------------------------------
0038 ; ****************************************************************************/
0038 ;
0038 ; void lcd_init (void)
0038 ; {
0038 ; MCUCR=MCUCR|0x80;
0038 85B7 in R24,0x35
003A 8068 ori R24,128
003C 85BF out 0x35,R24
003E ; DDRB|=0x01;
003E B89A sbi 0x17,0
0040 ; PORTB&=0xfe;
0040 88B3 in R24,0x18
0042 8E7F andi R24,254
0044 88BB out 0x18,R24
0046 ; DDRE=0x40;
0046 80E4 ldi R24,64
0048 82B9 out 0x2,R24
004A ; PORTE=0xff;
004A 8FEF ldi R24,255
004C 83B9 out 0x3,R24
004E ;
004E ; cl_reset;
004E AB98 cbi 0x15,3
0050 ; delay(10);
0050 0AE0 ldi R16,10
0052 10E0 ldi R17,0
0054 D5DF xcall _delay
0056 ; set_reset;
0056 AB9A sbi 0x15,3
0058 ; delay(10);
0058 0AE0 ldi R16,10
005A 10E0 ldi R17,0
005C D1DF xcall _delay
005E ; cl_req;
005E 1E98 cbi 0x03,6
0060 ; delay(10);
0060 0AE0 ldi R16,10
0062 10E0 ldi R17,0
0064 CDDF xcall _delay
0066 L13:
0066 .dbline 0 ; func end
0066 0895 ret
.even
0068 _lcd_clear::
0068 ; }
0068 ;
0068 ; /****************************************************************************
0068 ; ** Function Name: timeDelay
0068 ; ** Descriptions: delay time
0068 ; ** Input Parameters: uiTime
0068 ; ** Output parameters: void
0068 ; ** Returned Value: void
0068 ; **---------------------------------------------------------------------------
0068 ; ****************************************************************************/
0068 ;
0068 ; void lcd_clear (void)
0068 ; {
0068 ; lcd_w(0xf4);
0068 04EF ldi R16,244
006A D5DF xcall _lcd_w
006C L14:
006C .dbline 0 ; func end
006C 0895 ret
006E ; ch -> R20,R21
006E ; y -> R10
006E ; x -> R22
.even
006E _lcd_putsc::
006E 0E940000 xcall push_xgsetF00C
0072 A22E mov R10,R18
0074 602F mov R22,R16
0076 4E81 ldd R20,y+6
0078 5F81 ldd R21,y+7
007A ; }
007A ;
007A ; /****************************************************************************
007A ; ** Function Name: lcd_putsc
007A ; ** Descriptions:
007A ; ** Input Parameters: x,y,ch
007A ; ** Output parameters: void
007A ; ** Returned Value: void
007A ; **---------------------------------------------------------------------------
007A ; ****************************************************************************/
007A ; void lcd_putsc (unsigned char x,unsigned char y,unsigned char *ch)
007A ; {
007A ; x+=2;
007A 6E5F subi R22,254 ; addi 2
007C 18C0 xjmp L17
007E L16:
007E ; while (*ch!=0)
007E ; {
007E ; lcd_w(0xf0);
007E 00EF ldi R16,240
0080 CADF xcall _lcd_w
0082 ; lcd_w(x);
0082 062F mov R16,R22
0084 C8DF xcall _lcd_w
0086 ; lcd_w(y);
0086 0A2D mov R16,R10
0088 C6DF xcall _lcd_w
008A ; lcd_w(*ch-0xa0);
008A FA01 movw R30,R20
008C 0081 ldd R16,z+0
008E 005A subi R16,160
0090 C2DF xcall _lcd_w
0092 ; ch++;
0092 4F5F subi R20,255 ; offset = 1
0094 5F4F sbci R21,255
0096 ; lcd_w(*ch-0xa0);
0096 FA01 movw R30,R20
0098 0081 ldd R16,z+0
009A 005A subi R16,160
009C BCDF xcall _lcd_w
009E ; ch++;
009E 4F5F subi R20,255 ; offset = 1
00A0 5F4F sbci R21,255
00A2 ; if (x>=0x09)
00A2 6930 cpi R22,9
00A4 18F0 brlo L19
00A6 X3:
00A6 ; {
00A6 ; x=2;
00A6 62E0 ldi R22,2
00A8 ; y+=1;
00A8 A394 inc R10
00AA ; }
00AA 01C0 xjmp L20
00AC L19:
00AC ; else
00AC ; {
00AC ; x++;
00AC 6395 inc R22
00AE ; }
00AE L20:
00AE ; }
00AE L17:
00AE FA01 movw R30,R20
00B0 2080 ldd R2,z+0
00B2 2220 tst R2
00B4 21F7 brne L16
00B6 X4:
00B6 L15:
00B6 .dbline 0 ; func end
00B6 0C940000 xjmp pop_xgsetF00C
00BA ; ch -> R22,R23
00BA ; y -> R10
00BA ; x -> R20
.even
00BA _lcd_putse::
00BA 0E940000 xcall push_xgsetF00C
00BE A22E mov R10,R18
00C0 402F mov R20,R16
00C2 6E81 ldd R22,y+6
00C4 7F81 ldd R23,y+7
00C6 ; }
00C6 ;
00C6 ; /****************************************************************************
00C6 ; ** Function Name: lcd_putse
00C6 ; ** Descriptions:
00C6 ; ** Input Parameters: x,y,ch
00C6 ; ** Output parameters: void
00C6 ; ** Returned Value: void
00C6 ; **---------------------------------------------------------------------------
00C6 ; ****************************************************************************/
00C6 ;
00C6 ; void lcd_putse (unsigned char x,unsigned char y,unsigned char *ch)
00C6 ; {
00C6 ; x+=4;
00C6 4C5F subi R20,252 ; addi 4
00C8 13C0 xjmp L23
00CA L22:
00CA ; while (*ch!=0){
00CA ; lcd_w(0xf1);
00CA 01EF ldi R16,241
00CC A4DF xcall _lcd_w
00CE ; lcd_w(x);
00CE 042F mov R16,R20
00D0 A2DF xcall _lcd_w
00D2 ; lcd_w(y);
00D2 0A2D mov R16,R10
00D4 A0DF xcall _lcd_w
00D6 ; lcd_w(*ch);
00D6 FB01 movw R30,R22
00D8 0081 ldd R16,z+0
00DA 9DDF xcall _lcd_w
00DC ; ch++;
00DC 6F5F subi R22,255 ; offset = 1
00DE 7F4F sbci R23,255
00E0 ; if (x>=19){
00E0 4331 cpi R20,19
00E2 28F0 brlo L25
00E4 X5:
00E4 ; x=4;
00E4 44E0 ldi R20,4
00E6 ; y+=8;
00E6 8A2D mov R24,R10
00E8 885F subi R24,248 ; addi 8
00EA A82E mov R10,R24
00EC ; }else{
00EC 01C0 xjmp L26
00EE L25:
00EE ; x++;
00EE 4395 inc R20
00F0 ; }
00F0 L26:
00F0 ; }
00F0 L23:
00F0 FB01 movw R30,R22
00F2 2080 ldd R2,z+0
00F4 2220 tst R2
00F6 49F7 brne L22
00F8 X6:
00F8 L21:
00F8 .dbline 0 ; func end
00F8 0C940000 xjmp pop_xgsetF00C
00FC ; ch -> y+4
00FC ; y -> R10
00FC ; x -> R20
.even
00FC _lcd_putss::
00FC 0E940000 xcall push_xgset300C
0100 A22E mov R10,R18
0102 402F mov R20,R16
0104 ; }
0104 ;
0104 ; /****************************************************************************
0104 ; ** Function Name: lcd_putss
0104 ; ** Descriptions:
0104 ; ** Input Parameters: x,y,ch
0104 ; ** Output parameters: void
0104 ; ** Returned Value: void
0104 ; **---------------------------------------------------------------------------
0104 ; ****************************************************************************/
0104 ; void lcd_putss (unsigned char x,unsigned char y,unsigned char ch)
0104 ; {
0104 ; x+=4;
0104 4C5F subi R20,252 ; addi 4
0106 ; lcd_w(0xf1);
0106 01EF ldi R16,241
0108 86DF xcall _lcd_w
010A ; lcd_w(x);
010A 042F mov R16,R20
010C 84DF xcall _lcd_w
010E ; lcd_w(y);
010E 0A2D mov R16,R10
0110 82DF xcall _lcd_w
0112 ; lcd_w(ch);
0112 0C81 ldd R16,y+4
0114 80DF xcall _lcd_w
0116 L27:
0116 .dbline 0 ; func end
0116 0C940000 xjmp pop_xgset300C
011A ; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -