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

📄 key.lst

📁 键盘的控制的运用
💻 LST
字号:
__start:
__text_start:
    0011 E5CF      LDI	R28,0x5F
    0012 E0D2      LDI	R29,2
    0013 BFCD      OUT	0x3D,R28
    0014 BFDE      OUT	0x3E,R29
    0015 51C0      SUBI	R28,0x10
    0016 40D0      SBCI	R29,0
    0017 EA0A      LDI	R16,0xAA
    0018 8308      STD	Y+0,R16
    0019 2400      CLR	R0
    001A E6E0      LDI	R30,0x60
    001B E0F0      LDI	R31,0
    001C E010      LDI	R17,0
    001D 36E1      CPI	R30,0x61
    001E 07F1      CPC	R31,R17
    001F F011      BEQ	0x0022
    0020 9201      ST	R0,Z+
    0021 CFFB      RJMP	0x001D
    0022 8300      STD	Z+0,R16
    0023 E2E2      LDI	R30,0x22
    0024 E0F0      LDI	R31,0
    0025 E6A0      LDI	R26,0x60
    0026 E0B0      LDI	R27,0
    0027 E010      LDI	R17,0
    0028 32E2      CPI	R30,0x22
    0029 07F1      CPC	R31,R17
    002A F021      BEQ	0x002F
    002B 95C8      LPM
    002C 9631      ADIW	R30,1
    002D 920D      ST	R0,X+
    002E CFF9      RJMP	0x0028
    002F D047      RCALL	_main
_exit:
    0030 CFFF      RJMP	_exit
FILE: E:\zh\avr\8515板\PS2KEY~1\PS2KEY.C
(0001) //ps2 keyboard
(0002) //clk=pd2,dat=pb3
(0003) #include<io8515v.h>
(0004) #include<macros.h>
(0005) #define uchar unsigned char
(0006) #define uint  unsigned int
(0007) unsigned char KeyCode;          //键盘键值
(0008) void data()
(0009) {
(0010)  uchar num;                     //位数
(0011)  DDRD=0X00;
_data:
  num                  --> R16
    0031 2422      CLR	R2
    0032 BA21      OUT	0x11,R2
(0012)  while((PIND|0XFB)==0XFF);      // 等待键盘把时钟第一次拉低
    0033 B380      IN	R24,0x10
    0034 6F8B      ORI	R24,0xFB
    0035 3F8F      CPI	R24,0xFF
    0036 F3E1      BEQ	0x0033
(0013)  for(num=8;num!=0;num--)        // 把起始位算入
    0037 E008      LDI	R16,0x8
    0038 C018      RJMP	0x0051
(0014)    {DDRD=0X00;
    0039 2422      CLR	R2
    003A BA21      OUT	0x11,R2
(0015)     while((PIND|0XFB)!=0XFF);   // 等待一个有效的下跳沿
    003B B380      IN	R24,0x10
    003C 6F8B      ORI	R24,0xFB
    003D 3F8F      CPI	R24,0xFF
    003E F7E1      BNE	0x003B
(0016) 	while((PIND|0XFB)==0XFF);
    003F B380      IN	R24,0x10
    0040 6F8B      ORI	R24,0xFB
    0041 3F8F      CPI	R24,0xFF
    0042 F3E1      BEQ	0x003F
(0017)     KeyCode>>=1;                // 按照PS2格式,数据低位在前
    0043 90200060  LDS	R2,KeyCode
    0045 9426      LSR	R2
    0046 92200060  STS	KeyCode,R2
(0018)     if((PINB|0XF7)==0XFF)
    0048 B386      IN	R24,0x16
    0049 6F87      ORI	R24,0xF7
    004A 3F8F      CPI	R24,0xFF
    004B F421      BNE	0x0050
(0019)     {
(0020)       KeyCode|=0x80;          // 得到有效的数据位
    004C 2D82      MOV	R24,R2
    004D 6880      ORI	R24,0x80
    004E 93800060  STS	KeyCode,R24
    0050 950A      DEC	R16
    0051 2300      TST	R16
    0052 F731      BNE	0x0039
(0021)     }
(0022)   }
(0023)   DDRD=0X00; 
    0053 2422      CLR	R2
    0054 BA21      OUT	0x11,R2
(0024)   while((PIND|0XFB)!=0XFF);   
    0055 B380      IN	R24,0x10
    0056 6F8B      ORI	R24,0xFB
    0057 3F8F      CPI	R24,0xFF
    0058 F7E1      BNE	0x0055
(0025)   while((PIND|0XFB)==0XFF);  
    0059 B380      IN	R24,0x10
    005A 6F8B      ORI	R24,0xFB
    005B 3F8F      CPI	R24,0xFF
    005C F3E1      BEQ	0x0059
(0026)   while((PIND|0XFB)!=0XFF);   
    005D B380      IN	R24,0x10
    005E 6F8B      ORI	R24,0xFB
    005F 3F8F      CPI	R24,0xFF
    0060 F7E1      BNE	0x005D
(0027)   while((PIND|0XFB)==0XFF);
    0061 B380      IN	R24,0x10
    0062 6F8B      ORI	R24,0xFB
    0063 3F8F      CPI	R24,0xFF
    0064 F3E1      BEQ	0x0061
(0028)   while((PIND|0XFB)!=0XFF);
    0065 B380      IN	R24,0x10
    0066 6F8B      ORI	R24,0xFB
    0067 3F8F      CPI	R24,0xFF
    0068 F7E1      BNE	0x0065
    0069 9508      RET
(0029) }
(0030) void m8515_init()
(0031) {
(0032)  DDRA=0XFF;
_m8515_init:
    006A EF8F      LDI	R24,0xFF
    006B BB8A      OUT	0x1A,R24
(0033)  PORTA=0X00;
    006C 2422      CLR	R2
    006D BA2B      OUT	0x1B,R2
(0034)  DDRB=0X00;
    006E BA27      OUT	0x17,R2
(0035)  PORTB=0XFF;
    006F BB88      OUT	0x18,R24
(0036)  DDRC=0X00;
    0070 BA24      OUT	0x14,R2
(0037)  PORTC=0XFF;
    0071 BB85      OUT	0x15,R24
(0038)  DDRD=0X04;  //clk=1
    0072 E084      LDI	R24,4
    0073 BB81      OUT	0x11,R24
(0039)  PORTD=0XFF;
    0074 EF8F      LDI	R24,0xFF
    0075 BB82      OUT	0x12,R24
    0076 9508      RET
(0040) }
(0041) void main()
(0042) {
(0043)  m8515_init();
_main:
    0077 DFF2      RCALL	_m8515_init
    0078 C009      RJMP	0x0082
(0044)  while(1)
(0045)   { 
(0046)    data();
    0079 DFB7      RCALL	_data
(0047)    if(KeyCode==0xe0) 
    007A 91800060  LDS	R24,KeyCode
    007C 3E80      CPI	R24,0xE0
    007D F409      BNE	0x007F
(0048)    {data();}
    007E DFB2      RCALL	_data
(0049)    PORTA=KeyCode;
FILE: <library>
    007F 90200060  LDS	R2,KeyCode
    0081 BA2B      OUT	0x1B,R2
    0082 CFF6      RJMP	0x0079
    0083 9508      RET

⌨️ 快捷键说明

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