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

📄 keyscan.lst

📁 一个解决5个IO口扫描25个按键的解决方法,完整文件包,有参考意义,C51.
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      15 E5CF      LDI	R28,0x5F
      16 E0D4      LDI	R29,4
      17 BFCD      OUT	0x3D,R28
      18 BFDE      OUT	0x3E,R29
      19 52C0      SUBI	R28,0x20
      1A 40D0      SBCI	R29,0
      1B EA0A      LDI	R16,0xAA
      1C 8308      STD	Y+0,R16
      1D 2400      CLR	R0
      1E E6E4      LDI	R30,0x64
      1F E0F0      LDI	R31,0
      20 E010      LDI	R17,0
      21 36E4      CPI	R30,0x64
      22 07F1      CPC	R31,R17
      23 F011      BEQ	0x0026
      24 9201      ST	R0,Z+
      25 CFFB      RJMP	0x0021
      26 8300      STD	Z+0,R16
      27 E2E6      LDI	R30,0x26
      28 E0F0      LDI	R31,0
      29 E6A0      LDI	R26,0x60
      2A E0B0      LDI	R27,0
      2B E010      LDI	R17,0
      2C E000      LDI	R16,0
      2D BF0B      OUT	0x3B,R16
      2E 32EA      CPI	R30,0x2A
      2F 07F1      CPC	R31,R17
      30 F021      BEQ	0x0035
      31 95C8      LPM
      32 9631      ADIW	R30,1
      33 920D      ST	R0,X+
      34 CFF9      RJMP	0x002E
      35 D0BA      RCALL	_main
_exit:
      36 CFFF      RJMP	_exit
FILE: E:\创新实践班\按键扫描\EX_Support.c
(0001) /***********************************************************
(0002) *   函数库说明:底层硬件初始化驱动函数库                   *
(0003) *   版本:                                                 *
(0004) *   作者:                                                 *
(0005) *   创建日期:                                             *
(0006) * -------------------------------------------------------- *
(0007) *  [硬件说明]                                              *
(0008) *   处理器:                                               *
(0009) *   系统时钟:                                             *
(0010) * -------------------------------------------------------- *
(0011) *  [支 持 库]                                              *
(0012) *   支持库名称:HD_Support.h                               *
(0013) *   需要版本:  -----                                      *
(0014) *   支持库说明:底层硬件初始化声明库                       *
(0015) *                                                          *
(0016) *   支持库名称:EX_Support.h                               *
(0017) *   需要版本:  -----                                      *
(0018) *   支持库说明:底层硬件初始化驱动声明库                   *
(0019) *                                                          *
(0020) *   支持库名称:PF_Config.h                                *
(0021) *   需要版本:  -----                                      *
(0022) *   支持库说明:硬件平台配置声明库                         *
(0023) * -------------------------------------------------------- *
(0024) *  [版本更新]                                              *
(0025) *   修改:                                                 *
(0026) *   修改日期:                                             *
(0027) *   版本:                                                 *
(0028) * -------------------------------------------------------- *
(0029) *  [版本历史]                                              *
(0030) * -------------------------------------------------------- *
(0031) *  [使用说明]                                              *
(0032) ***********************************************************/
(0033) 
(0034) /********************
(0035) * 头 文 件 配 置 区 *
(0036) ********************/
(0037) # include "PF_Config.h"
(0038) # include "Ex_Support.h"
(0039) 
(0040) /********************
(0041) *   系 统 宏 定 义  *
(0042) ********************/
(0043) 
(0044) /*------------------*
(0045) *   常 数 宏 定 义  *
(0046) *------------------*/
(0047) 
(0048) /*------------------*
(0049) *   动 作 宏 定 义  *
(0050) *------------------*/
(0051) 
(0052) /********************
(0053) *  模块结构体定义区 *
(0054) ********************/
(0055) 
(0056) /********************
(0057) *   函 数 声 明 区  *
(0058) ********************/
(0059) void Insert_Timer0_OVF_ISR_Code(void);
(0060) void Driver_INIT(void);
(0061) void Delay_MS(uint16 wTime);
(0062) UINT8 Key_Scan(void);
(0063) 
(0064) /********************
(0065) *   模块函数声明区  *
(0066) ********************/
(0067) 
(0068) 
(0069) /********************
(0070) *   模块变量声明区  *
(0071) ********************/
(0072) static uint16 s_wSystemDelayTimerCounter = 0;
(0073) 
(0074) /********************
(0075) *   全局变量声明区  *
(0076) ********************/
(0077) uint16 g_wSystemTimer = 0;
(0078) 
(0079) /***********************************************************
(0080) *   函数说明:软件驱动初始化函数                           *
(0081) *   输入:    无                                           *
(0082) *   输出:    无                                           *
(0083) *   调用函数:无                                           *
(0084) ***********************************************************/
(0085) void Driver_INIT(void)
(0086) {
_Driver_INIT:
      37 9508      RET
(0087)     //*在这里插入你的各类软件驱动初始化代码*//
(0088) }
(0089) 
(0090) /***********************************************************
(0091) *   函数说明:系统毫秒延时函数                             *
(0092) *   输入:    需要延时的时间长度                           *
(0093) *   输出:    无                                           *
(0094) *   调用函数:无                                           *
(0095) ***********************************************************/
(0096) void Delay_MS(uint16 wTime)
(0097) {
(0098)     s_wSystemDelayTimerCounter = wTime;
_Delay_MS:
  wTime                --> R16
      38 9310 0061 STS	0x0061,R17
      3A 9300 0060 STS	0x0060,R16
(0099)     
(0100)     while(s_wSystemDelayTimerCounter);
      3C 9020 0060 LDS	R2,0x0060
      3E 9030 0061 LDS	R3,0x0061
      40 2022      TST	R2
      41 F7D1      BNE	0x003C
      42 2033      TST	R3
      43 F7C1      BNE	0x003C
      44 9508      RET
(0101) }
(0102) 
(0103) /***********************************************************
(0104) *   函数说明:定时器0中断处理程序代码插入函数              *
(0105) *   输入:    无                                           *
(0106) *   输出:    无                                           *
(0107) *   调用函数:无                                           *
(0108) ***********************************************************/
(0109) void Insert_Timer0_OVF_ISR_Code(void)
(0110) {
(0111)     g_wSystemTimer++;
_Insert_Timer0_OVF_ISR_Code:
      45 9180 0062 LDS	R24,g_wSystemTimer
      47 9190 0063 LDS	R25,g_wSystemTimer+1
      49 9601      ADIW	R24,1
      4A 9390 0063 STS	g_wSystemTimer+1,R25
      4C 9380 0062 STS	g_wSystemTimer,R24
(0112) 
(0113)     if (s_wSystemDelayTimerCounter)
      4E 9020 0060 LDS	R2,0x0060
      50 9030 0061 LDS	R3,0x0061
      52 2022      TST	R2
      53 F411      BNE	0x0056
      54 2033      TST	R3
      55 F031      BEQ	0x005C
(0114)     {
(0115)         s_wSystemDelayTimerCounter--;
      56 01C1      MOVW	R24,R2
      57 9701      SBIW	R24,1
      58 9390 0061 STS	0x0061,R25
      5A 9380 0060 STS	0x0060,R24
(0116)     }
      5C 9508      RET
(0117) }
(0118) 
(0119) 
(0120) 
(0121) /***********************************************************
(0122) *   函数说明:按键扫描函数                                 *
(0123) *   输入:    无                                           *
(0124) *   输出:    按键的扫描码(如果无按键返回KEY_NULL)       *
(0125) #   调用函数:无                                           *
(0126) ***********************************************************/
(0127) UINT8 Key_Scan(void)
(0128) {
(0129)    UINT8 chTempKeyCode = KEY_NULL;
_Key_Scan:
  chTempKeyCode0       --> R16
      5D EF0F      LDI	R16,0xFF
(0130)    //填写扫描代码
(0131)    
(0132)    //首先扫描A列
(0133)    CLR_A;
      5E B385      IN	R24,0x15
      5F 6388      ORI	R24,0x38
      60 BB85      OUT	0x15,R24
      61 98AB      CBI	0x15,3
(0134)    
(0135)    if (!READ_PINX)                                          //判断X是否为低电平
      62 9B99      SBIS	0x13,1
      63 C002      RJMP	0x0066
      64 E021      LDI	R18,1
      65 C001      RJMP	0x0067
      66 2722      CLR	R18
      67 2322      TST	R18
      68 F411      BNE	0x006B
(0136)    {
(0137)        chTempKeyCode = 0x00;
      69 2700      CLR	R16
(0138)    }
      6A C008      RJMP	0x0073
(0139)    else if (!READ_PINY)
      6B 9B9A      SBIS	0x13,2
      6C C002      RJMP	0x006F
      6D E021      LDI	R18,1
      6E C001      RJMP	0x0070
      6F 2722      CLR	R18
      70 2322      TST	R18
      71 F409      BNE	0x0073
(0140)    {
(0141)        chTempKeyCode = 0x03;
      72 E003      LDI	R16,3
(0142)    }
(0143)    
(0144)    CLR_B;
      73 B385      IN	R24,0x15
      74 6388      ORI	R24,0x38
      75 BB85      OUT	0x15,R24
      76 98AC      CBI	0x15,4
(0145)    if (!READ_PINX)                                          //判断X是否为低电平
      77 9B99      SBIS	0x13,1
      78 C002      RJMP	0x007B
      79 E021      LDI	R18,1
      7A C001      RJMP	0x007C
      7B 2722      CLR	R18
      7C 2322      TST	R18
      7D F411      BNE	0x0080
(0146)    {
(0147)        chTempKeyCode = 0x01;
      7E E001      LDI	R16,1
(0148)    }
      7F C008      RJMP	0x0088
(0149)    else if (!READ_PINY)
      80 9B9A      SBIS	0x13,2
      81 C002      RJMP	0x0084
      82 E021      LDI	R18,1
      83 C001      RJMP	0x0085
      84 2722      CLR	R18
      85 2322      TST	R18
      86 F409      BNE	0x0088
(0150)    {
(0151)        chTempKeyCode = 0x04;
      87 E004      LDI	R16,4
(0152)    }
(0153)    
(0154)    CLR_C;
      88 B385      IN	R24,0x15
      89 6388      ORI	R24,0x38
      8A BB85      OUT	0x15,R24
      8B 98AD      CBI	0x15,5
(0155)    if (!READ_PINX)                                          //判断X是否为低电平
      8C 9B99      SBIS	0x13,1
      8D C002      RJMP	0x0090
      8E E021      LDI	R18,1
      8F C001      RJMP	0x0091
      90 2722      CLR	R18
      91 2322      TST	R18
      92 F411      BNE	0x0095
(0156)    {
(0157)        chTempKeyCode = 0x02;
      93 E002      LDI	R16,2
(0158)    }
      94 C008      RJMP	0x009D
(0159)    else if (!READ_PINY)
      95 9B9A      SBIS	0x13,2
      96 C002      RJMP	0x0099
      97 E021      LDI	R18,1
      98 C001      RJMP	0x009A
      99 2722      CLR	R18
      9A 2322      TST	R18
      9B F409      BNE	0x009D
(0160)    {
(0161)        chTempKeyCode = 0x05;
      9C E005      LDI	R16,5
(0162)    }
(0163)    
(0164)    return chTempKeyCode;
      9D 9508      RET
FILE: E:\创新实践班\按键扫描\HD_Support.c
(0001) /***********************************************************
(0002) *   函数库说明:底层硬件初始化函数库                       *
(0003) *   版本:                                                 *
(0004) *   作者:                                                 *
(0005) *   创建日期:                                             *
(0006) * -------------------------------------------------------- *
(0007) *  [硬件说明]                                              *
(0008) *   处理器:                                               *
(0009) *   系统时钟:                                             *
(0010) * -------------------------------------------------------- *
(0011) *  [支 持 库]                                              *
(0012) *   支持库名称:HD_Support.h                               *
(0013) *   需要版本:  -----                                      *
(0014) *   支持库说明:底层硬件初始化声明库                       *
(0015) *                                                          *
(0016) *   支持库名称:PF_Config.h                                *
(0017) *   需要版本:  -----                                      *
(0018) *   支持库说明:硬件平台配置声明库                         *
(0019) * -------------------------------------------------------- *
(0020) *  [版本更新]                                              *
(0021) *   修改:                                                 *
(0022) *   修改日期:                                             *
(0023) *   版本:                                                 *
(0024) * -------------------------------------------------------- *
(0025) *  [版本历史]                                              *
(0026) * -------------------------------------------------------- *
(0027) *  [使用说明]                                              *
(0028) ***********************************************************/
(0029) 
(0030) /********************
(0031) * 头 文 件 配 置 区 *
(0032) ********************/
(0033) # include "PF_Config.h"
(0034) # include "HD_Support.h"
(0035) 
(0036) /********************
(0037) *   系 统 宏 定 义  *
(0038) ********************/
(0039) # pragma interrupt_handler Timer0_OVF_ISR:iv_TIMER0_OVF
(0040) 
(0041) /*------------------*
(0042) *   常 数 宏 定 义  *
(0043) *------------------*/
(0044) 
(0045) /*------------------*
(0046) *   动 作 宏 定 义  *
(0047) *------------------*/
(0048) #ifndef INSERT_TIMER0_OVF_ISR_CODE
(0049)     # define INSERT_TIMER0_OVF_ISR_CODE
(0050)     # warning "TIMER0_OVF_ISR haven`t been used but initialed!"
(0051) #endif
(0052) 

⌨️ 快捷键说明

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