?? keys.lst
字號:
ARM COMPILER V2.50a, KEYS 28/08/06 09:18:55 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 DEBUG TABS(4)
stmt level source
1 /**********************************************************************************************
2 KEYS.c file
3
4 按鍵處理程序
5
6 作者:Computer-lov
7 建立日期:2006-4-11
8 修改日期:2006-5-12
9 最后修改時間:2006-08-25
10 版本:V1.0
11 版權所有,盜版必究。
12 任何技術問題可到我的博客上留言: http://computer00.21ic.org
13 Copyright(C) Computer-lov 2006-2016
14 All rights reserved
15 **********************************************************************************************/
16
17
18 #include "CPU.H"
19
20 #include "KEYS.h"
21
22 KEYBoard Key; //定義一個Key結構體。
23
24 /*********************************************************************************************/
25 void KEYBoardInit(void)
26 {
27 1 PINSEL1 &= ~0xFFF; //將按鍵對對應的IO口設置為GPIO口. P0.16--P0.21
28 1
29 1 IO0DIR &= ~0x001F0000; //將按鍵對應的IO設置為輸入口
30 1
31 1 Key.Value=0; //Key初始化
32 1 Key.OldValue=0;
33 1 Key.NewValue=0;
34 1 Key.PressedTime=0;
35 1 }
36 ///////////////////////////////////////////////////////////////////////////////////////////////
37
38 /**********************************************************************************************
39 功能:延時x毫秒。
40 入口參數(shù):x。要延時的毫秒數(shù)。
41 返回:無。
42 備注:純軟件延時,不同的指令執(zhí)行速度,運行結果會不一樣。
43 **********************************************************************************************/
44 void DelayXms(uint32 x)
45 {
46 1 uint32 i;
47 1 while(x--)
48 1 {
49 2 i=9000;
50 2 while(i--);
51 2 }
52 1 }
53 ///////////////////////////////////////////////////////////////////////////////////////////////
54
55
56 /**********************************************************************************************
57 功能:鍵盤掃描程序。
58 入口參數(shù):無。
59 返回:無。
ARM COMPILER V2.50a, KEYS 28/08/06 09:18:55 PAGE 2
60 備注:按鍵相關信息保存在Key中。請參看KEYBoard結構體。
61 **********************************************************************************************/
62 void ScanKey(void) //鍵盤掃描
63 {
64 1 if(Key.Value)return; //如果上次按鍵還未處理,則直接返回,不掃描新的按鍵
65 1
66 1 if(KEY1IN && KEY2IN && KEY3IN && KEY4IN && KEY5IN && KEY6IN) //如果輸入全部是高,則按鍵處于釋放狀態(tài)
67 1 {
68 2 if(!(Key.OldValue)) //如果上次無按鍵按下
69 2 {
70 3 return; //返回
71 3 }
72 2 else //如果上次有按鍵按下
73 2 {
74 3 if(Key.PressedTime>100) //按鍵時間超過一秒,長按鍵碼
75 3 {
76 4 Key.Value=Key.OldValue+0x80; //長按鍵碼等于普通按鍵碼加0x80
77 4 }
78 3 else if(Key.PressedTime>1)
79 3 {
80 4 Key.Value=Key.OldValue; //按鍵值
81 4 }
82 3 Key.OldValue=0;
83 3 }
84 2 return;
85 2 }
86 1 else //按鍵按下
87 1 {
88 2 Key.NewValue=0;
89 2 if(!KEY1IN)Key.NewValue=KEY1; //KEY1鍵按下
90 2 if(!KEY2IN)Key.NewValue=KEY2; //KEY2鍵按下
91 2 if(!KEY3IN)Key.NewValue=KEY3; //KEY3鍵按下
92 2 if(!KEY4IN)Key.NewValue=KEY4; //KEY4鍵按下
93 2 if(!KEY5IN)Key.NewValue=KEY5; //KEY5鍵按下
94 2 if(!KEY6IN)Key.NewValue=KEY6; //KEY6鍵按下
95 2
96 2 if(Key.NewValue==Key.OldValue) //如果連續(xù)兩次掃描到一樣的鍵,即按鍵按下長于10ms
97 2 {
98 3 if(Key.PressedTime>200) //如果按鍵按下超過2s
99 3 {
100 4 Key.PressedTime-=4; //則自動按鍵。相當于每隔50ms按一次
101 4 Key.Value=Key.NewValue;
102 4 return;
103 4 }
104 3 else
105 3 {
106 4 Key.PressedTime++; //按鍵按下計時加一
107 4 }
108 3 }
109 2 else
110 2 {
111 3 Key.PressedTime=0; //如果本次按下跟上次按下不一樣,則按鍵按下時間清零
112 3 }
113 2 Key.OldValue=Key.NewValue; //保存本次按鍵值
114 2 }
115 1 }
116 ///////////////////////////////////////////////////////////////////////////////////////////////
117
ARM COMPILER V2.50a, KEYS 28/08/06 09:18:55 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** PUBLICS:
PUBLIC ScanKey?T
PUBLIC KEYBoardInit?T
PUBLIC DelayXms?T
PUBLIC Key
*** DATA SEGMENT '?DT0?KEYS':
00000000 Key:
00000000 DS 16
*** CODE SEGMENT '?PR?KEYBoardInit?T?KEYS':
27: PINSEL1 &= ~0xFFF; //將按鍵對對應的IO口設置為GPIO口. P0.16--P0.21
00000000 4800 LDR R2,=0xFFFFF000
00000002 4800 LDR R0,=0xE002C004
00000004 6801 LDR R1,[R0,#0x0]
00000006 4011 AND R1,R2
00000008 6001 STR R1,[R0,#0x0]
29: IO0DIR &= ~0x001F0000; //將按鍵對應的IO設置為輸入口
0000000A 4800 LDR R2,=0x1F0000
0000000C 4800 LDR R0,=0xE0028008
0000000E 6801 LDR R1,[R0,#0x0]
00000010 4391 BIC R1,R2
00000012 6001 STR R1,[R0,#0x0]
31: Key.Value=0; //Key初始化
00000014 2100 MOV R1,#0x0
00000016 4800 LDR R0,=Key ; Key
00000018 6001 STR R1,[R0,#0x0] ; Key
32: Key.OldValue=0;
0000001A 4800 LDR R0,=Key + 0x4 ; Key+4
0000001C 6001 STR R1,[R0,#0x0] ; Key+4
33: Key.NewValue=0;
0000001E 4800 LDR R0,=Key + 0x8 ; Key+8
00000020 6001 STR R1,[R0,#0x0] ; Key+8
34: Key.PressedTime=0;
00000022 4800 LDR R0,=Key + 0xC ; Key+12
00000024 6001 STR R1,[R0,#0x0] ; Key+12
35: }
00000026 4770 BX R14
00000028 ENDP ; 'KEYBoardInit?T'
*** CODE SEGMENT '?PR?DelayXms?T?KEYS':
44: void DelayXms(uint32 x)
00000000 ---- Variable 'x' assigned to Register 'R0' ----
45: {
00000000 ; SCOPE-START
47: while(x--)
00000000 E004 B L_1 ; T=0x0000000C
00000002 L_3:
49: i=9000;
00000002 4800 LDR R1,=0x2328
00000004 ---- Variable 'i' assigned to Register 'R1' ----
50: while(i--);
00000004 L_5:
00000004 1C0A MOV R2,R1 ; i
00000006 3901 SUB R1,#0x1
00000008 2A00 CMP R2,#0x0 ; i
0000000A D1FB BNE L_5 ; T=0x00000004
51: }
0000000C L_1:
0000000C 1C01 MOV R1,R0 ; x
0000000E 3801 SUB R0,#0x1
00000010 2900 CMP R1,#0x0 ; x
00000012 D1F6 BNE L_3 ; T=0x00000002
00000014 ; SCOPE-END
ARM COMPILER V2.50a, KEYS 28/08/06 09:18:55 PAGE 4
52: }
00000014 4770 BX R14
00000016 ENDP ; 'DelayXms?T'
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -