📄 ps2main.lis
字号:
.module ps2main.c
.area text(rom, con, rel)
0000 .dbfile D:/PROGRA~1/AVRTOO~1/Icc/include/delay.h
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 2
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 .dbline 3
0000 ; #include "1602.h"
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_nus _delay_nus fV
0004 ; i -> R20,R21
0004 ; n -> R22,R23
.even
0004 _delay_nus::
0004 0E940000 xcall push_gset2
0008 B801 movw R22,R16
000A .dbline -1
000A .dbline 7
000A ; #include "KeyCode.h"
000A ;
000A ; #define uchar unsigned char
000A ; #define uint unsigned int
000A .dbline 8
000A ;
000A 4427 clr R20
000C 5527 clr R21
000E .dbline 9
000E ; uchar Int_Number=0; //中断计数器;
000E 03C0 xjmp L6
0010 L3:
0010 .dbline 10
0010 F7DF xcall _delay_1us
0012 L4:
0012 .dbline 9
0012 4F5F subi R20,255 ; offset = 1
0014 5F4F sbci R21,255
0016 L6:
0016 .dbline 9
0016 4617 cp R20,R22
0018 5707 cpc R21,R23
001A D0F3 brlo L3
001C .dbline -2
001C L2:
001C 0E940000 xcall pop_gset2
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r i 20 i
0022 .dbsym r n 22 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 14
0022 ; uchar Key_Value=0; //键盘编码值;
0022 ; //extern Finish;
0022 ; //extern Key_Up;
0022 ;
0022 ; void Init()
0022 .dbline 16
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L11
0028 L8:
0028 .dbline 16
0028 L9:
0028 .dbline 16
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L11:
002C .dbline 16
002C ; {PORTD = 0x06;
002C ; DDRD = 0x00;
002C 0437 cpi R16,116
002E E4E0 ldi R30,4
0030 1E07 cpc R17,R30
0032 D0F3 brlo L8
0034 .dbline -2
0034 L7:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_nms _delay_nms fV
0036 ; i -> R20,R21
0036 ; n -> R22,R23
.even
0036 _delay_nms::
0036 0E940000 xcall push_gset2
003A B801 movw R22,R16
003C .dbline -1
003C .dbline 20
003C ; // DDRD&=~0x06; //110b,
003C ; //PORTD|=0x06; //110b,PD1,PD2输入,上拉
003C ; MCUCR=MCUCR&0xfc; //INT0低电平中断
003C ; GICR|=(1<<INT0); //INT0中断使能
003C .dbline 21
003C ; SEI();
003C 4427 clr R20
003E 5527 clr R21
0040 .dbline 22
0040 ; LCD_Init();
0040 03C0 xjmp L16
0042 L13:
0042 .dbline 23
0042 EFDF xcall _delay_1ms
0044 L14:
0044 .dbline 22
0044 4F5F subi R20,255 ; offset = 1
0046 5F4F sbci R21,255
0048 L16:
0048 .dbline 22
0048 4617 cp R20,R22
004A 5707 cpc R21,R23
004C D0F3 brlo L13
004E .dbline -2
004E L12:
004E 0E940000 xcall pop_gset2
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r i 20 i
0054 .dbsym r n 22 i
0054 .dbend
0054 .dbfile C:\DOCUME~1\wpzhao.USTC\MYDOCU~1\我的文档\我的ICC\我的PS2/1602.h
0054 .dbfunc e LCD_Write _LCD_Write fV
.even
0054 _LCD_Write::
0054 .dbline -1
0054 .dbline 49
0054 ; }
0054 ;
0054 ; void main()
0054 ; {uchar i,j;
0054 ; j=0;
0054 ; Init();
0054 ; LCD_Write_String(0,1,"Please input");
0054 ; LCD_SetXY(0,2);
0054 ; while(1){
0054 ; if(Finish) //检测到键盘输入
0054 ; {Finish=0; //清除检测标志
0054 ; i=Decode(Key_Value); //键盘译码
0054 ; if((i>=0)&&(i<=9)){//数字键处理
0054 ; LCD_Write_String(0,1,"Success! ");
0054 ; LCD_Write_Char(j,2,0x30+i);} //显示
0054 ; j++;
0054 ; if(j==16) {
0054 ; j=0;LCD_Write_String(0,2," ");}
0054 ; }}
0054 ; }
0054 ;
0054 ;
0054 ;
0054 ;
0054 ; #pragma interrupt_handler Serve1:INT0 //2
0054 ; void Serve1(void)
0054 ; {if(!Key_Up)
0054 .dbline 49
0054 DB9A sbi 0x1b,3
0056 .dbline 50
0056 ; {if ((Int_Number > 0) && (Int_Number < 9)) //接受只有一字节通码字符
0056 D4DF xcall _delay_1us
0058 .dbline 51
0058 ; {Key_Value = Key_Value >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
0058 DB98 cbi 0x1b,3
005A .dbline -2
005A L17:
005A .dbline 0 ; func end
005A 0895 ret
005C .dbend
005C .dbfunc e LCD_WriteC _LCD_WriteC fV
005C ; cmd -> R20
.even
005C _LCD_WriteC::
005C 0E940000 xcall push_gset1
0060 402F mov R20,R16
0062 .dbline -1
0062 .dbline 57
0062 ; if (PIND&0x02) Key_Value = Key_Value|0x80;} //当键盘数据线为1时为1到最高位
0062 ; if(Int_Number==10) Finish=1;//收到第10个脉冲表示一字节传送完成
0062 ; if(Int_Number==33) Int_Number=0;//收到第33个脉冲表示按键断码传送完成
0062 ; while (!(PIND&0x04)); //等待PS/2CLK拉高
0062 ; Int_Number++;}
0062 ; else
0062 .dbline 57
0062 04E1 ldi R16,20
0064 10E0 ldi R17,0
0066 CEDF xcall _delay_nus
0068 .dbline 58
0068 ; {if ((Int_Number > 0) && (Int_Number < 9)) //接受双字节通码字符
0068 DA98 cbi 0x1b,2
006A .dbline 59
006A ; {Key_Value = Key_Value >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
006A 8BB3 in R24,0x1b
006C 8F70 andi R24,15
006E 8BBB out 0x1b,R24
0070 .dbline 60
0070 ; if (PIND&0x02) Key_Value = Key_Value|0x80;} //当键盘数据线为1时为1到最高位
0070 842F mov R24,R20
0072 807F andi R24,240
0074 2BB2 in R2,0x1b
0076 282A or R2,R24
0078 2BBA out 0x1b,R2
007A .dbline 61
007A ; if(Int_Number==10) Finish=1;
007A ECDF xcall _LCD_Write
007C .dbline 62
007C ; if(Int_Number==55) {Int_Number=0;Key_Up=0;}
007C 842F mov R24,R20
007E 8F70 andi R24,#0x0F
0080 8295 swap R24
0082 482F mov R20,R24
0084 .dbline 63
0084 ; while (!(PIND&0x04)); //等待PS/2CLK拉高
0084 8BB3 in R24,0x1b
0086 8F70 andi R24,15
0088 8BBB out 0x1b,R24
008A .dbline 64
008A ; Int_Number++;}
008A 842F mov R24,R20
008C 807F andi R24,240
008E 2BB2 in R2,0x1b
0090 282A or R2,R24
0092 2BBA out 0x1b,R2
0094 .dbline 65
0094 ; }
0094 DFDF xcall _LCD_Write
0096 .dbline -2
0096 L18:
0096 0E940000 xcall pop_gset1
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r cmd 20 c
009C .dbend
009C .dbfunc e LCD_WriteD _LCD_WriteD fV
009C ; data -> R20
.even
009C _LCD_WriteD::
009C 0E940000 xcall push_gset1
00A0 402F mov R20,R16
00A2 .dbline -1
00A2 .dbline 71
00A2 ; }
00A2 ; }
00A2 ; }
00A2 ; }
00A2 ; }
00A2 ; }
00A2 .dbline 71
00A2 04E1 ldi R16,20
00A4 10E0 ldi R17,0
00A6 AEDF xcall _delay_nus
00A8 .dbline 72
00A8 ; }
00A8 DA9A sbi 0x1b,2
00AA .dbline 73
00AA ; }
00AA 8BB3 in R24,0x1b
00AC 8F70 andi R24,15
00AE 8BBB out 0x1b,R24
00B0 .dbline 74
00B0 ; }
00B0 842F mov R24,R20
00B2 807F andi R24,240
00B4 2BB2 in R2,0x1b
00B6 282A or R2,R24
00B8 2BBA out 0x1b,R2
00BA .dbline 75
00BA ; }
00BA CCDF xcall _LCD_Write
00BC .dbline 76
00BC ; }
00BC 842F mov R24,R20
00BE 8F70 andi R24,#0x0F
00C0 8295 swap R24
00C2 482F mov R20,R24
00C4 .dbline 77
00C4 ; }
00C4 8BB3 in R24,0x1b
00C6 8F70 andi R24,15
00C8 8BBB out 0x1b,R24
00CA .dbline 78
00CA ; }
00CA 842F mov R24,R20
00CC 807F andi R24,240
00CE 2BB2 in R2,0x1b
00D0 282A or R2,R24
00D2 2BBA out 0x1b,R2
00D4 .dbline 79
00D4 ; }
00D4 BFDF xcall _LCD_Write
00D6 .dbline -2
00D6 L19:
00D6 0E940000 xcall pop_gset1
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym r data 20 c
00DC .dbend
00DC .dbfunc e LCD_SetXY _LCD_SetXY fV
00DC ; add -> R20
00DC ; y -> R20
00DC ; x -> R22
.even
00DC _LCD_SetXY::
00DC 0E940000 xcall push_gset2
00E0 422F mov R20,R18
00E2 602F mov R22,R16
00E4 .dbline -1
00E4 .dbline 88
00E4 ; }
00E4 ; }
00E4 ; }
00E4 ; }
00E4 ; }
00E4 ; }
00E4 ; }
00E4 ; }
00E4 ; }
00E4 .dbline 89
00E4 ; }
00E4 4395 inc R20
00E6 .dbline 90
00E6 ; }
00E6 10E1 ldi R17,16
00E8 062F mov R16,R22
00EA 0E940000 xcall mod8u
00EE 602F mov R22,R16
00F0 .dbline 90
00F0 12E0 ldi R17,2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -