📄 keyscan.lst
字号:
__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 + -