📄 keys.lst
字号:
ARM COMPILER V2.50a, KEYS 12/04/06 12:37:10 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE KEYS
OBJECT MODULE PLACED IN KEYS.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe KEYS.C THUMB BROWSE DEBUG TABS(4)
stmt level source
1 /**********************************************************************************************
2 KEYS.c file
3
4 按键处理程序
5
6 作者:Computer-lov
7 建立日期:2006-4-11
8 修改日期:2006-4-12
9 版本:V1.0
10 版权所有,盗版必究。
11 任何技术问题可到我的博客上留言: http://computer00.21ic.org
12 Copyright(C) Computer-lov 2006-2016
13 All rights reserved
14 **********************************************************************************************/
15
16 #include "KEYS.h"
17 #include <ADuC7027.H>
18
19 KEYBoard Key;
20
21 /*********************************************************************************************/
22 void KEYBoardInit(void)
23 {
24 1 GP0CON &= ~(0x00330000); //将按键对对应的IO口设置为GPIO口
25 1 GP1CON &= ~(0x00330000);
26 1
27 1 GP0DAT &= ~(0x30000000); //将按键对应的IO设置为输入口
28 1 GP1DAT &= ~(0x30000000);
29 1
30 1 GP0PAR &= ~(0x00110000); //打开按键对应的IO口的上拉电阻
31 1 GP1PAR &= ~(0x00110000);
32 1
33 1 Key.Value=0; //Key初始化
34 1 Key.OldValue=0;
35 1 Key.NewValue=0;
36 1 Key.PressedTime=0;
37 1 }
38 ///////////////////////////////////////////////////////////////////////////////////////////////
39
40 /*********************************************************************************************/
41 void ScanKey(void) //键盘扫描
42 {
43 1 if(Key.Value)return; //如果上次按键还未处理,则直接返回,不扫描新的按键
44 1
45 1 if(KEY1IN && KEY2IN && KEY3IN && KEY4IN) //如果输入全部是高,则按键处于释放状态
46 1 {
47 2 if(!(Key.OldValue)) //如果上次无按键按下
48 2 {
49 3 return; //返回
50 3 }
51 2 else //如果上次有按键按下
52 2 {
53 3 if(Key.PressedTime>100) //按键时间超过一秒,长按键码
54 3 {
55 4 Key.Value=Key.OldValue+0x80; //长按键码等于普通按键码加0x80
56 4 }
57 3 else if(Key.PressedTime>1)
58 3 {
59 4 Key.Value=Key.OldValue; //按键值
ARM COMPILER V2.50a, KEYS 12/04/06 12:37:10 PAGE 2
60 4 }
61 3 Key.OldValue=0;
62 3 }
63 2 return;
64 2 }
65 1 else //按键按下
66 1 {
67 2 Key.NewValue=0;
68 2 if(!KEY1IN)Key.NewValue=KEY1; //KEY1键按下
69 2 if(!KEY2IN)Key.NewValue=KEY2; //KEY2键按下
70 2 if(!KEY3IN)Key.NewValue=KEY3; //KEY3键按下
71 2 if(!KEY4IN)Key.NewValue=KEY4; //KEY4键按下
72 2
73 2 if(Key.NewValue==Key.OldValue) //如果连续两次扫描到一样的键,即按键按下长于10ms
74 2 {
75 3 if(Key.PressedTime>200) //如果按键按下超过2s
76 3 {
77 4 Key.PressedTime-=4; //则自动按键。相当于每隔50ms按一次
78 4 Key.Value=Key.NewValue;
79 4 return;
80 4 }
81 3 else
82 3 {
83 4 Key.PressedTime++; //按键按下计时加一
84 4 }
85 3 }
86 2 else
87 2 {
88 3 Key.PressedTime=0; //如果本次按下跟上次按下不一样,则按键按下时间清零
89 3 }
90 2 Key.OldValue=Key.NewValue; //保存本次按键值
91 2 }
92 1 }
93 ///////////////////////////////////////////////////////////////////////////////////////////////
94
ARM COMPILER V2.50a, KEYS 12/04/06 12:37:10 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** PUBLICS:
PUBLIC ScanKey?T
PUBLIC KEYBoardInit?T
PUBLIC Key
*** DATA SEGMENT '?DT0?KEYS':
00000000 Key:
00000000 DS 16
*** CODE SEGMENT '?PR?KEYBoardInit?T?KEYS':
24: GP0CON &= ~(0x00330000); //将按键对对应的IO口设置为GPIO口
00000000 4800 LDR R2,=0x330000
00000002 4800 LDR R0,=0xFFFFF400
00000004 6801 LDR R1,[R0,#0x0]
00000006 4391 BIC R1,R2
00000008 6001 STR R1,[R0,#0x0]
25: GP1CON &= ~(0x00330000);
0000000A 4800 LDR R0,=0xFFFFF404
0000000C 6801 LDR R1,[R0,#0x0]
0000000E 4391 BIC R1,R2
00000010 6001 STR R1,[R0,#0x0]
27: GP0DAT &= ~(0x30000000); //将按键对应的IO设置为输入口
00000012 4800 LDR R2,=0x30000000
00000014 4800 LDR R0,=0xFFFFF420
00000016 6801 LDR R1,[R0,#0x0]
00000018 4391 BIC R1,R2
0000001A 6001 STR R1,[R0,#0x0]
28: GP1DAT &= ~(0x30000000);
0000001C 4800 LDR R0,=0xFFFFF430
0000001E 6801 LDR R1,[R0,#0x0]
00000020 4391 BIC R1,R2
00000022 6001 STR R1,[R0,#0x0]
30: GP0PAR &= ~(0x00110000); //打开按键对应的IO口的上拉电阻
00000024 4800 LDR R2,=0x110000
00000026 4800 LDR R0,=0xFFFFF42C
00000028 6801 LDR R1,[R0,#0x0]
0000002A 4391 BIC R1,R2
0000002C 6001 STR R1,[R0,#0x0]
31: GP1PAR &= ~(0x00110000);
0000002E 4800 LDR R0,=0xFFFFF43C
00000030 6801 LDR R1,[R0,#0x0]
00000032 4391 BIC R1,R2
00000034 6001 STR R1,[R0,#0x0]
33: Key.Value=0; //Key初始化
00000036 2100 MOV R1,#0x0
00000038 4800 LDR R0,=Key ; Key
0000003A 6001 STR R1,[R0,#0x0] ; Key
34: Key.OldValue=0;
0000003C 4800 LDR R0,=Key + 0x4 ; Key+4
0000003E 6001 STR R1,[R0,#0x0] ; Key+4
35: Key.NewValue=0;
00000040 4800 LDR R0,=Key + 0x8 ; Key+8
00000042 6001 STR R1,[R0,#0x0] ; Key+8
36: Key.PressedTime=0;
00000044 4800 LDR R0,=Key + 0xC ; Key+12
00000046 6001 STR R1,[R0,#0x0] ; Key+12
37: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -