?? key.lst
字號:
C51 COMPILER V7.02b KEY 01/03/2006 09:50:07 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\output\key.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c LARGE BROWSE DEBUG OBJECTEXTEND TABS(3) OBJECT(.\output\key.obj)
stmt level source
1 /************************************************************************************
2 * Copyright (c) 2004,西安銘朗電子科技有限責任公司
3 * All rights reserved.
4 *
5 * 文件名稱: key.C
6 * 文件標識: none
7 * 適用器件: C8051F040
8 *
9 * 摘 要: 本文件是鍵盤子程序;使用外部22.1184MHz晶振.
10 *
11 * 當前版本:1.2
12 * 作 者:李林利
13 * 完成日期:2005年6月19日
14 *
15 * 當前版本:1.0
16 * 作 者:盧 陽
17 * 完成日期:2004年11月14日
18 *
19 * 歷史版本:0.9
20 * 原作者 : 李林利
21 * 完成日期:2004年1月1日
22 *************************************************************************************/
23
24 /************************************************************************************/
25 // 引用外部頭文件
26
27 #include "c8051F040.h"
28 #include <INTRINS.H>
29 #include "key.h"
30 #include "Delay.h"
31
32
33 /************************************************************************************/
34
35 /************************************************************************************
36 // 常量及全局變量定義
37 *************************************************************************************/
38
39 unsigned char code Key_Value_Table[16]=
40 {0xff,0x00,0x01,0xff,0x02,0xff,0xff,0xff,
41 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff
42 };
43 bit bKeyUp_Flag;
44 sbit LED=P3^5;
45
46 /************************************************************************************
47 * key功能子程序
48 *************************************************************************************/
49
50 /***********************************************************************************
51 * 函數名稱:Key_Init;
52 *
53 * 函數功能描述:鍵盤初始化,將標志位置1;
54 *
55 * 輸入參數:none;
C51 COMPILER V7.02b KEY 01/03/2006 09:50:07 PAGE 2
56 *
57 * 返回數據:none;
58 *
59 * 注意: none;
60 ************************************************************************************/
61
62 void Key_Init(void)
63 {
64 1 bKeyUp_Flag=1;//標志位置1
65 1 }
66
67 /***********************************************************************************
68 * 函數名稱:GetScanKey;
69 *
70 * 函數功能描述:鍵盤掃描函數,得到鍵的行列位置;
71 *
72 * 輸入參數:none;
73 *
74 * 返回數據:none;
75 *
76 * 注意: none;
77 ************************************************************************************/
78
79 unsigned char GetScanKey(void)
80 {
81 1 unsigned char key, i, temp;
82 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
83 1 SFRPAGE = SFR_PAGE_F; // set SFR page F
84 1
85 1 key=0xff;
86 1
87 1 for (i=1; i<0x10; i<<=1)//i的低4位為行數位
88 1 {
89 2 Key_Scan |= 0x0f;//保留高4位,低4位置1
90 2 Delay_us(1);
91 2 Key_Scan &= ~i; //取行數位
92 2 Delay_us(1);
93 2
94 2 temp = Key_Scan; //取高4位列數位
95 2 temp = ~temp; //取反
96 2 temp>>=4; //右移4位
97 2
98 2 if (temp!=0x00) //有鍵值
99 2 {
100 3 key = i<<4; //左移4位
101 3 key|=temp; //取鍵值
102 3 break;
103 3 }
104 2 }
105 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
106 1 return key; //返回行位(高四)和列位(低四)
107 1 }
108
109 /***********************************************************************************
110 * 函數名稱:GetKey;
111 *
112 * 函數功能描述:取鍵值,長按無效;
113 *
114 * 輸入參數:none;
115 *
116 * 返回數據:none;
117 *
C51 COMPILER V7.02b KEY 01/03/2006 09:50:07 PAGE 3
118 * 注意: none;
119 ************************************************************************************/
120
121 unsigned char GetKey(void)
122 {
123 1 unsigned char key, temp;
124 1
125 1 if (!bKeyUp_Flag) //判斷標志,是1執行
126 1 {
127 2 key=GetScanKey();
128 2 if (key==0xff) //沒有按鍵,置標志位
129 2 bKeyUp_Flag=1;
130 2 else //保持按鍵
131 2 return 0xff;
132 2 }
133 1
134 1 key=GetScanKey();
135 1 if (key==0xff) //沒有按鍵
136 1 return key;
137 1 else
138 1 temp=key; //取鍵值
139 1
140 1 Delay_ms(20); //延時20ms
141 1
142 1 key=GetScanKey(); //鍵盤掃描
143 1
144 1 if(key!=temp) //判斷兩次鍵值是否相同
145 1 {
146 2 key=0xff;
147 2 return key;
148 2 }
149 1 else //取鍵值
150 1 {
151 2 temp=Key_Value_Table[key>>4];
152 2 if (temp==0xff)
153 2 {
154 3 key=0xff;
155 3 return key;
156 3 }
157 2
158 2 temp=Key_Value_Table[key&0x0f];
159 2 if (temp==0xff)
160 2 {
161 3 key=0xff;
162 3 return key;
163 3 }
164 2
165 2 key=Key_Value_Table[key>>4]*4+Key_Value_Table[key&0x0f];
166 2 if (key>15)
167 2 {
168 3 key=0xff;
169 3 return key;
170 3 }
171 2
172 2 bKeyUp_Flag=0;
173 2 return key;
174 2 }
175 1 }
176
177 /***********************************************************************************
178 * 函數名稱:Key_SPI;
179 *
C51 COMPILER V7.02b KEY 01/03/2006 09:50:07 PAGE 4
180 * 函數功能描述:鍵值到LED顯示碼轉換;
181 *
182 * 輸入參數:none;
183 *
184 * 返回數據:none;
185 *
186 * 注意: none;
187 ************************************************************************************/
188
189 unsigned char Key_SPI(unsigned char key)
190 {
191 1 switch(key)
192 1 {
193 2 case 0x00: return 0x3f;//0
194 2 case 0x01: return 0x06;//1
195 2 case 0x02: return 0x5b;//2
196 2 case 0x03: return 0x4f;//3
197 2 case 0x04: return 0x66;//4
198 2 case 0x05: return 0x6d;//5
199 2 case 0x06: return 0x7d;//6
200 2 case 0x07: return 0x07;//7
201 2 case 0x08: return 0x7f;//8
202 2 case 0x09: return 0x6f;//9
203 2 case 0x0a: return 0x77;//a
204 2 case 0x0b: return 0x7c;//b
205 2 case 0x0c: return 0x39;//c
206 2 case 0x0d: return 0x5e;//d
207 2 case 0x0e: return 0x79;//e
208 2 case 0x0f: return 0x71;//f
209 2 default: return 0x00;
210 2 }
211 1 }
212
213 /***********************************************************************************
214 * 函數名稱:Alarm;
215 *
216 * 函數功能描述:蜂鳴器開關控制 0:關閉,其他:開啟;
217 *
218 * 輸入參數:0:關閉,其他:開啟;
219 *
220 * 返回數據:none;
221 *
222 * 注意: none;
223 ************************************************************************************/
224
225 void Alarm(unsigned char flag)
226 {
227 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
228 1 SFRPAGE = SFR_PAGE_F; // set SFR page F
229 1
230 1 if(flag)
231 1 P4|=0x10;
232 1 else
233 1 P4&=0xef;
234 1
235 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
236 1 }
237
238 /***********************************************************************************
239 * 函數名稱:LED_state;
240 *
241 * 函數功能描述:LED開關控制 0:關閉,其他:開啟;
C51 COMPILER V7.02b KEY 01/03/2006 09:50:07 PAGE 5
242 *
243 * 輸入參數:0:關閉,其他:開啟;
244 *
245 * 返回數據:none;
246 *
247 * 注意: none;
248 ************************************************************************************/
249
250 void LED_state(unsigned char flag)
251 {
252 1 if(flag)
253 1 LED=1;
254 1 else
255 1 LED=0;
256 1 }
257
258 /*
259 SPI0DAT=0x3f; //顯示0
260 SPI0DAT=0x06; //顯示1
261 SPI0DAT=0x5b; //顯示2
262 SPI0DAT=0x4f; //顯示3
263 SPI0DAT=0x66; //顯示4
264 SPI0DAT=0x6d; //顯示5
265 SPI0DAT=0x7d; //顯示6
266 SPI0DAT=0x07; //顯示7
267 SPI0DAT=0x7f; //顯示8
268 SPI0DAT=0x6f; //顯示9
269 SPI0DAT=0x77; //顯示a
270 SPI0DAT=0x7c; //顯示b
271 SPI0DAT=0x39; //顯示c
272 SPI0DAT=0x5e; //顯示d
273 SPI0DAT=0x79; //顯示e
274 SPI0DAT=0x71; //顯示f
275 SPI0DAT=0x80; //顯示.
276 */
277
278 /***********************************************************************************/
279 // 文件結束
280 /***********************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 366 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- 4
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -