📄 key.lst
字号:
167 1
168 1 pic=P3&0x3f;
169 1 mask=0x4;
170 1 while(pic&mask)
171 1 {
172 2 ++row;
173 2 mask=_crol_(mask,1);
174 2 }
175 1 /*等待按键释放*/
176 1
177 1 while((P3&0x3f)!=0x3f);
178 1 P1=0xff;
179 1 /*计算按键序号并将其转换成ASCII码值返回 */
C51 COMPILER V8.02 KEY 08/26/2008 16:25:31 PAGE 4
180 1 pic=row*4+col;
181 1 if(pic<10)
182 1 pic+=0x30;
183 1 else
184 1 pic+=0x31;
185 1 return (pic);
186 1 }
187
188 //---------------------------------------------------------
189 //
190 // 有无按键按下 bit kb_hit(void)
191 // 无 retrun 0
192 //
193 //----------------------------------------------------------
194 bit kb_hit(void)
195 {
196 1
197 1 P1=0x0F; /*往矩阵键盘列线 送低电平*/
198 1 if((P3&0x3f)==0x3f) /*输入并检测行线状态*/
199 1 return((bit)0);
200 1 delay(16); /*延时8MS消颤*/
201 1 if((P3&0x3f)==0x3f) /*再次输入并检测行线状态*/
202 1 return((bit)0); /*行线为高电平时返回0*/
203 1
204 1 return((bit)1);
205 1
206 1 }
207
208 //---------------------------------------------------------------
209 //
210 // void delay(int x)
211 // 延时程序
212 //---------------------------------------------------------------
213 void delay(int x)
214 {
215 1 Uchar i,y;
216 1 while(x--)
217 1 {
218 2 i=3;
219 2 while(i--)
220 2 { y=40;
221 3 while(y--);
222 3 }
223 2 }
224 1 }
225
226 /*******************************************************************************
227 函数原型 *get_str(Uchar *str,Uchar len);
228 功能: 从矩阵键盘输入长度为LEN的字符串,并将其存储在由指针STR所指向的存
229 储器空间,并返回该指针。在输入的同时滚动显示所输入的字符
230 ********************************************************************************/
231
232 Uchar *get_str(Uchar *str,Uint len)
233 {
234 1 Uchar data i;
235 1 Uchar data ch=0,temp_ch;
236 1 Uchar data keyboard_buf[14];
237 1 Uchar data *ptr;
238 1
239 1 Uchar data keybuf_pos=0;
240 1 while(keybuf_pos<len)
241 1 {
C51 COMPILER V8.02 KEY 08/26/2008 16:25:31 PAGE 5
242 2 temp_ch=get_ch();
243 2 if(!temp_ch)
244 2 return 0;
245 2
246 2 switch (temp_ch) //按键分析
247 2 {
248 3 case 0x30:addflag=1;
249 3 ch=0x41;break;
250 3 case 0x34:subflag=1;
251 3 ch=0x42;break;
252 3 case 0x38:mulflag=1;
253 3 ch=0x43;break;
254 3 case 0x3d:divflag=1;
255 3 ch=0x44;break;
256 3 case 0x33:offflag=~offflag;
257 3 ch=0x46;
258 3 break;
259 3 case 0x31:equflag=1;
260 3 ch=0x45;break;
261 3
262 3 case 0x32:ch=0; break;
263 3 case 0x35:ch=3; break;
264 3 case 0x36:ch=2; break;
265 3 case 0x37:ch=1; break;
266 3
267 3 case 0x39:ch=6; break;
268 3 case 0x3b:ch=5; break;
269 3 case 0x3c:ch=4; break;
270 3
271 3 case 0x3e:ch=9; break;
272 3 case 0x3f:ch=8; break;
273 3 case 0x40:ch=7; break;
274 3
275 3 default: break;
276 3 }
277 2 if(!offflag)
278 2
279 2 return 0;
280 2 SBUF=ch;
281 2 while(!TI);
282 2 TI=0; // 从串口发出去.
283 2 if(ch!=0x46)
284 2 {
285 3 if(ch<10)
286 3 keyboard_buf[keybuf_pos++]=ch+0x30;
287 3 else
288 3 keyboard_buf[keybuf_pos++]=ch;
289 3 }
290 2 //ch=0;
291 2 if(equflag)
292 2 break;
293 2
294 2 }
295 1
296 1 ptr=str;
297 1 for(i=0;i<keybuf_pos;i++)
298 1 {
299 2 *str=keyboard_buf[i];
300 2 str++;
301 2 }
302 1 str=ptr;/*拷贝键盘缓冲区中的输入串*/
303 1 return(str);
C51 COMPILER V8.02 KEY 08/26/2008 16:25:31 PAGE 6
304 1 }
305 //-----------------------------------------------------------------------
306 void initflag(void)
307 {
308 1 addflag=0; //加标志位
309 1 subflag=0; //减标志位
310 1 mulflag=0; //乘标志位
311 1 divflag=0; //除标志位
312 1 offflag=0; //关开键
313 1 equflag=0; //等于键
314 1
315 1 PCON=0x80 ;
316 1 SCON=0x40 ;
317 1 TMOD=0x20 ;
318 1 TL1=0xF9 ;
319 1 TH1=0xF9 ;
320 1 EA=0; //禁止中断
321 1 TR1=1;//T1启动
322 1
323 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1066 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 67
IDATA SIZE = ---- ----
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 + -