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

📄 key4x4.lst

📁 此为4*4扩展键盘程序
💻 LST
字号:
__start:
__text_start:
      46 EFCF      LDI	R28,0xFF
      47 E1D0      LDI	R29,0x10
      48 BFCD      OUT	0x3D,R28
      49 BFDE      OUT	0x3E,R29
      4A 51CE      SUBI	R28,0x1E
      4B 40D0      SBCI	R29,0
      4C EA0A      LDI	R16,0xAA
      4D 8308      STD	Y+0,R16
      4E 2400      CLR	R0
      4F E0E0      LDI	R30,0
      50 E0F1      LDI	R31,1
      51 E011      LDI	R17,1
      52 30E0      CPI	R30,0
      53 07F1      CPC	R31,R17
      54 F011      BEQ	0x0057
      55 9201      ST	R0,Z+
      56 CFFB      RJMP	0x0052
      57 8300      STD	Z+0,R16
      58 E8EC      LDI	R30,0x8C
      59 E0F0      LDI	R31,0
      5A E0A0      LDI	R26,0
      5B E0B1      LDI	R27,1
      5C E010      LDI	R17,0
      5D E000      LDI	R16,0
      5E BF0B      OUT	0x3B,R16
      5F 38EC      CPI	R30,0x8C
      60 07F1      CPC	R31,R17
      61 F021      BEQ	0x0066
      62 95C8      LPM
      63 9631      ADIW	R30,1
      64 920D      ST	R0,X+
      65 CFF9      RJMP	0x005F
      66 940E 00A5 CALL	_main
_exit:
      68 CFFF      RJMP	_exit
FILE: E:\产品\开发板\mega128-board\待完成\扩展4x4键盘输入\key4x4.h
(0001) //延时
(0002) void s_ms(unsigned int t)
(0003) {
(0004)     for(;t>1;t--)
_s_ms:
  t                    --> R16
      69 C002      RJMP	0x006C
      6A 5001      SUBI	R16,1
      6B 4010      SBCI	R17,0
      6C E081      LDI	R24,1
      6D E090      LDI	R25,0
      6E 1780      CP	R24,R16
      6F 0791      CPC	R25,R17
      70 F3C8      BCS	0x006A
      71 9508      RET
_key_value:
  i                    --> Y,+1
  tem2                 --> R10
  rem                  --> R20
  tem1                 --> R22
      72 940E 00B3 CALL	push_xgsetF00C
(0005)     {
(0006)     }
(0007) }
(0008) 
(0009) //读取键盘
(0010) //PC口作为键盘输入
(0011) unsigned char key_value()
(0012) {
(0013)     unsigned char tem1,tem2,rem,i ;
(0014)     rem=0 ;
      74 2744      CLR	R20
(0015)     //不清零会返回一个不可预知的数
(0016)     DDRC=0xf0 ;
      75 EF80      LDI	R24,0xF0
      76 BB84      OUT	0x14,R24
(0017)     //c口高四位输出 低四位输入
(0018)     PORTC=0x0f ;
      77 E08F      LDI	R24,0xF
      78 BB85      OUT	0x15,R24
(0019)     //输入有上拉电阻
(0020)     s_ms(30);
      79 E10E      LDI	R16,0x1E
      7A E010      LDI	R17,0
      7B DFED      RCALL	_s_ms
(0021)     tem1=PINC ;
      7C B363      IN	R22,0x13
(0022)     //读取端口c
(0023)     tem1=tem1&0x0f ;
      7D 706F      ANDI	R22,0xF
(0024)     //判断是否有键被按下
(0025)     if(tem1!=0x0f)
      7E 306F      CPI	R22,0xF
      7F F0E1      BEQ	0x009C
(0026)     {
(0027)         s_ms(800);
      80 E200      LDI	R16,0x20
      81 E013      LDI	R17,3
      82 DFE6      RCALL	_s_ms
(0028)         //延时
(0029)         tem2=PINC ;
      83 B2A3      IN	R10,0x13
(0030)         //读取端口c
(0031)         tem2=tem2&0x0f ;
      84 2D8A      MOV	R24,R10
      85 708F      ANDI	R24,0xF
      86 2EA8      MOV	R10,R24
(0032)         //判断是否为干扰
(0033)         if(tem1==tem2)
      87 1768      CP	R22,R24
      88 F499      BNE	0x009C
(0034)         {
(0035)             DDRC=0x0f ;
      89 E08F      LDI	R24,0xF
      8A BB84      OUT	0x14,R24
(0036)             //c口高四位输入 低四位输出
(0037)             PORTC=0xf0 ;
      8B EF80      LDI	R24,0xF0
      8C BB85      OUT	0x15,R24
(0038)             //反相输出
(0039)             s_ms(1);
      8D E001      LDI	R16,1
      8E E010      LDI	R17,0
      8F DFD9      RCALL	_s_ms
(0040)             //换向后要延时
(0041)             rem=PINC ;
      90 B343      IN	R20,0x13
(0042)             //读取端口c
(0043)             rem=rem&0xf0 ;
      91 7F40      ANDI	R20,0xF0
(0044)             //取高四位 
(0045)             rem=rem+tem1 ;
      92 0F46      ADD	R20,R22
(0046)             //合并
(0047)             rem=~rem ;
      93 9540      COM	R20
(0048)             //反向输出
(0049)             //判断按键是否被释放
(0050)             do 
(0051)             {
(0052)                 PORTC=0xf0 ;
      94 EF80      LDI	R24,0xF0
      95 BB85      OUT	0x15,R24
(0053)                 s_ms(3000);
      96 EB08      LDI	R16,0xB8
      97 E01B      LDI	R17,0xB
      98 DFD0      RCALL	_s_ms
(0054)             }
(0055)             while(PINC!=0xf0);
      99 B383      IN	R24,0x13
      9A 3F80      CPI	R24,0xF0
      9B F7C1      BNE	0x0094
(0056)         }
(0057)     }
(0058)     s_ms(6000);
      9C E700      LDI	R16,0x70
      9D E117      LDI	R17,0x17
      9E DFCA      RCALL	_s_ms
(0059)     s_ms(6000);
      9F E700      LDI	R16,0x70
      A0 E117      LDI	R17,0x17
      A1 DFC7      RCALL	_s_ms
(0060)     return(rem);
      A2 2F04      MOV	R16,R20
      A3 940C 00BA JMP	pop_xgsetF00C
FILE: E:\产品\开发板\mega128-board\待完成\扩展4x4键盘输入\key4x4.c
(0001) #include<iom128v.h>
(0002) #include"key4x4.h"
(0003) #define uchar unsigned char 
(0004) #define uint unsigned int 
(0005) 
(0006) //主函数
(0007) main()
(0008) {
(0009) uchar key;
(0010) DDRA=0xff;
_main:
  key                  --> R10
      A5 EF8F      LDI	R24,0xFF
      A6 BB8A      OUT	0x1A,R24
(0011) DDRC=0xff;
      A7 BB84      OUT	0x14,R24
(0012) PORTA=0xff;
      A8 BB8B      OUT	0x1B,R24
      A9 C007      RJMP	0x00B1
(0013) while(1)
(0014)      {
(0015) 	 key=key_value(); //读取4x4键盘
      AA DFC7      RCALL	_key_value
      AB 2EA0      MOV	R10,R16
(0016) 	 if(key!=0)       //有按键被按下
      AC 2300      TST	R16
      AD F019      BEQ	0x00B1
(0017) 	   {
(0018) 	   PORTA=~key;    //显示键值
FILE: <library>
      AE 2C2A      MOV	R2,R10
      AF 9420      COM	R2
      B0 BA2B      OUT	0x1B,R2
      B1 CFF8      RJMP	0x00AA
      B2 9508      RET
push_xgsetF00C:
      B3 937A      ST	R23,-Y
      B4 936A      ST	R22,-Y
      B5 935A      ST	R21,-Y
      B6 934A      ST	R20,-Y
      B7 92BA      ST	R11,-Y
      B8 92AA      ST	R10,-Y
      B9 9508      RET
pop_xgsetF00C:
      BA 90A9      LD	R10,Y+
      BB 90B9      LD	R11,Y+
      BC 9149      LD	R20,Y+
      BD 9159      LD	R21,Y+
      BE 9169      LD	R22,Y+
      BF 9179      LD	R23,Y+
      C0 9508      RET

⌨️ 快捷键说明

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