📄 22.lst
字号:
208 2 E = 1;
209 2 temp_ramaddr = P1;
210 2 E = 0;
211 2 }
212 1
213 1 RS = 1;
214 1 RW = 0;
215 1 P1 = data_data;
216 1 E = 1;
217 1 E = 0;
218 1 }
219
220
221
222 //*********** 写指令子程序 *****
223 void LCD_write_instruction(char data_instruction)
224 {
225 1 BF = 1;
226 1
227 1 RS = 0;
228 1 RW = 1;
229 1 while(BF)
230 1 {
231 2 P1 = 0xFF;
232 2 E = 1;
233 2 temp_ramaddr = P1;
234 2 E = 0;
C51 COMPILER V8.02 22 07/18/2007 12:34:07 PAGE 5
235 2 }
236 1
237 1 RW = 0;
238 1 P1 = data_instruction;
239 1 E = 1;
240 1 E = 0;
241 1 }
242
243
244 //************ LCD初始化 ********
245 void LCD_initial()
246 {
247 1
248 1 delay_half_1s(1);
249 1
250 1 LCD_write_instruction(0x01);
251 1 delay_155us();
252 1
253 1 LCD_write_instruction(0x30);
254 1 delay_155us();
255 1
256 1 LCD_write_instruction(0x0E);
257 1 delay_155us();
258 1
259 1 LCD_write_instruction(0x01);
260 1 delay_8ms(5);
261 1
262 1 LCD_write_instruction(0x06);
263 1 delay_155us();
264 1
265 1 }
266
267
268 /* 延时t毫秒 */
269 void delay(uint t)
270 {
271 1 uint i;
272 1 while(t--)
273 1 {
274 2 /* 对于12M时钟,约延时1ms */
275 2 for (i=0;i<125;i++)
276 2 {}
277 2 }
278 1 }
279
280 void keyscan(void) //键盘扫描子程序
281 {
282 1 uchar scancode, rowcode;
283 1 P3=0xf0; //向行扫描输出口发全0,查询列信号
284 1 if((P3&0xf0)!=0xf0)//若有键按下
285 1 {
286 2 delay(50); //延时消抖
287 2 if((P3&0xf0)!=0xf0)
288 2 {
289 3 scancode=0xfe;
290 3 while((scancode&0x10)!=0) //逐行扫描
291 3 {
292 4 P3=scancode; //输出行扫描码
293 4 if((P3&0xf0)!=0xf0) //若本行有键按下
294 4 {
295 5 rowcode=(P3&0xf0)|0x0f;
296 5 keycode=((~scancode)+(~rowcode));
C51 COMPILER V8.02 22 07/18/2007 12:34:07 PAGE 6
297 5 KeyDisplay();
298 5 }
299 4
300 4 else
301 4 { scancode=(scancode<<1)|0x01;}
302 4 }
303 3 }
304 2
305 2 }
306 1
307 1 }
308
309
310 uchar getkey(uchar keycode) //获取键值子程序
311 {
312 1 int kb;
313 1 switch(keycode)
314 1 {
315 2 case 0x11:kb=4;break;
316 2 case 0x21:kb=3;break;
317 2 case 0x41:kb=2;break;
318 2 case 0x81:kb=1;break;
319 2
320 2 case 0x12:kb=8;break;
321 2 case 0x22:kb=7;break;
322 2 case 0x42:kb=6;break;
323 2 case 0x82:kb=5;break;
324 2
325 2 case 0x14:kb=12;break;
326 2 case 0x24:kb=11;break;
327 2 case 0x44:kb=10;break;
328 2 case 0x84:kb=9;break;
329 2
330 2 case 0x18:kb=16;break;
331 2 case 0x28:kb=15;break;
332 2 case 0x48:kb=14;break;
333 2 case 0x88:kb=13;break;
334 2
335 2 default: kb=0x00;break;
336 2 }
337 1 return(kb);
338 1 }
339
340 void KeyDisplay(void)
341 {
342 1 int keydata;
343 1 keydata=getkey(keycode);
344 1 delay(250);
345 1 switch(keydata)
346 1 {
347 2 case 1:
348 2 case 2:
349 2 case 3:
350 2 case 4:
351 2 case 5:
352 2 case 6:
353 2 case 7:
354 2 case 8:
355 2 case 9:
356 2 case 10:
357 2 case 12:if(numbit<5)
358 2 {
C51 COMPILER V8.02 22 07/18/2007 12:34:07 PAGE 7
359 3 if(keydata==12)
360 3 keydata=11;
361 3 if(trace==2)
362 3 {
363 4 for(i=0;i<16;i++)
364 4 {
365 5 peak_digit[4][i]=peak_digit[3][i];
366 5 peak_digit[3][i]=peak_digit[2][i];
367 5 peak_digit[2][i]=peak_digit[1][i];
368 5 peak_digit[1][i]=peak_digit[0][i];
369 5 peak_digit[0][i]=number[keydata-1][i];
370 5 }
371 4 LCD_write_picture();
372 4 LCD_write_instruction(0x96);
373 4 }
374 3 if(trace==4)
375 3 {
376 4 for(i=0;i<16;i++)
377 4 {
378 5 frequency_digit[4][i]=frequency_digit[3][i];
379 5 frequency_digit[3][i]=frequency_digit[2][i];
380 5 frequency_digit[2][i]=frequency_digit[1][i];
381 5 frequency_digit[1][i]=frequency_digit[0][i];
382 5 frequency_digit[0][i]=number[keydata-1][i];
383 5 }
384 4 LCD_write_picture();
385 4 LCD_write_instruction(0x8E);
386 4 }
387 3 ++numbit;
388 3 }
389 2 break;
390 2 case 11:switch(trace)
391 2 {
392 3 case 1:trace=5;LCD_write_picture();LCD_write_instruction(0x8F);break;
393 3 case 2:trace=1;LCD_write_picture();LCD_write_instruction(0x87);break;
394 3 case 3:trace=2;LCD_write_picture();LCD_write_instruction(0x96);break;
395 3 case 4:trace=3;LCD_write_picture();LCD_write_instruction(0x97);break;
396 3 case 5:trace=4;LCD_write_picture();LCD_write_instruction(0x8E);break;
397 3 default:break;
398 3 }
399 2 numbit=0;
400 2 break;
401 2 case 13:break;
402 2 case 14:switch(trace)
403 2 {
404 3 case 1:switch(picture_data)
405 3 {
406 4 case 1:
407 4 picture_data=3;
408 4 LCD_write_picture();
409 4 break;
410 4 case 2:
411 4 picture_data=1;
412 4 LCD_write_picture();
413 4 break;
414 4 case 3:
415 4 picture_data=2;
416 4 LCD_write_picture();
417 4 break;
418 4 default:break;
419 4 }
420 3 LCD_write_instruction(0x87);
C51 COMPILER V8.02 22 07/18/2007 12:34:07 PAGE 8
421 3
422 3 break;
423 3 case 3:if(peak_data==1)
424 3 {
425 4 peak_data=2;
426 4 LCD_write_picture();
427 4 }
428 3 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -