📄 key.lst
字号:
112 *修 改 者: *
113 *版 本:0 *
114 ******************************************************************************/
115 void key_scan(void)
116 {
117 1 uint8 id;
C51 COMPILER V8.05a KEY 12/25/2007 01:05:22 PAGE 3
118 1 for(id = KEYID_MIN;id <= KEYID_MAX;id++)
119 1 {
120 2 KEYSCAN_PIN = SET; //扫描检测PIN置位
121 2 key_scanx = id; //待扫描的按键ID
122 2 XBYTE[0X0000] = (rom_bank & 0x07)|((bl_ctl & 0x01)<<3)|((rom_cs & 0x03)<<4)|((key_scanx & 0x03)<<6);
123 2 if(KEYSCAN_PIN == 0) //发现按键
124 2 {
125 3 keypress_count[id]++; //按键有效计数
126 3 if(keypress_count[id] >= KEYPRESS_COUNT_MAX) //达到最大计数值
127 3 {keypress_count[id] = KEYPRESS_COUNT_MAX;}
128 3 os_wait(K_TMO, KEYSCAN_DELAY, 0);
129 3 }
130 2 else
131 2 {
132 3 if(keypress_count[id] >= KEYPRESS_SHORT_NUM) //短按键
133 3 {
134 4 if(keypress_count[id] >= KEYPRESS_LONG_NUM)//长按键
135 4 {key_input(id|KEYPRESS_LONG_SET);}
136 4 else
137 4 {key_input(id);}
138 4 key_count = keypress_count[id];
139 4 }
140 3 keypress_count[id] = CLR;
141 3 } //继续扫描下一个按键
142 2 }
143 1 }
144
145 volatile uint8 key_read(void)
146 {
147 1 uint8 tmp;
148 1 tmp = key_value;
149 1 key_value = KEY_NULL;
150 1 return tmp;
151 1 }
152
153 volatile uint8 key_test(void)
154 {
155 1 return key_count;
156 1 }
157
158 /******************************************************************************
159 *函数名称:keyin_task *
160 *功能描述:键盘输入任务 *
161 *输 入:无 *
162 *返 回:无 *
163 *创建 人:袁杰 *
164 *创建日期:2007/4/22 *
165 *修改日期: *
166 *修 改 者: *
167 *版 本:0 *
168 ******************************************************************************/
169 void keyin_task(void)
170 {
171 1 key_scan();
172 1 }
173
174 //#define VK_LEFT 0x25
175 //#define VK_UP 0x26
176 //#define VK_RIGHT 0x27
177 //#define VK_DOWN 0x28
178 //#define VK_PAUSE 0x03
179 //#define VK_OFF 0xF0
C51 COMPILER V8.05a KEY 12/25/2007 01:05:22 PAGE 4
180 //#define KEY_NULL 0xFF
181 //scan0 ------- sw2 ------- b/l
182 //scan1 ------- sw3 ------- pause
183 //scan2 ------- sw4 ------- on/off(f1)
184 //scan3 ------- sw5 ------- f2
185
186 /******************************************************************************
187 *函数名称:keyout_task *
188 *功能描述:KEY输出任务,等待读取超时,就放弃该次键值,输出BUF中下一个 *
189 *输 入:无 *
190 *返 回:无 *
191 *创建 人:袁杰 *
192 *创建日期:2007/4/22 *
193 *修改日期: *
194 *修 改 者: *
195 *版 本:0 *
196 ******************************************************************************/
197 void keyout_task(void)
198 {
199 1 uint8 wait;
200 1 if (key_value == KEY_NULL){key_value = key_output();}
201 1 if (key_value != KEY_NULL)
202 1 {
203 2 wait = KEYREAD_TIMEOUT;
204 2 while (wait--) //等待按键读取
205 2 {
206 3 if (key_value == KEY_NULL)break;
207 3 os_wait(K_TMO, 1, 0);
208 3 }
209 2 key_value = key_read(); //内部读取,清空按键
210 2 }
211 1 }
212
213
214
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 297 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 2
IDATA SIZE = 6 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -