📄 lcd.lst
字号:
300 1 LCD_Disp_Word(85,2,WLib_9_5x8,1,5);
301 1 LCD_Disp_Word(90,2,WLib_7_5x8,1,5);
302 1 LCD_Disp_Word(95,2,WLib_line_6x8,1,6);
303 1 LCD_Disp_Word(101,2,WLib_8_5x8,1,5);
C51 COMPILER V7.02b LCD 03/06/2006 15:41:23 PAGE 6
304 1 LCD_Disp_Word(106,2,WLib_0_5x8,1,5);
305 1 LCD_Disp_Word(111,2,WLib_2_5x8,1,5);
306 1 }
307
308 /***********************************************************************************
309 * 函数名称:dis_clr;
310 *
311 * 函数功能描述: 清屏;
312 *
313 * 输入参数:none;
314 *
315 * 返回数据:none;
316 *
317 * 注意: none;
318 ************************************************************************************/
319
320 void dis_clr(void)
321 {
322 1 unsigned char x,y;
323 1 for(y=0;y<8;y++)
324 1 {
325 2 for(x=0;x<128;x++)
326 2 lcd_wrda(x,y,0x00);
327 2 }
328 1 }
329
330 /***********************************************************************************
331 * 函数名称:dis_full;
332 *
333 * 函数功能描述: 写满屏;
334 *
335 * 输入参数:none;
336 *
337 * 返回数据:none;
338 *
339 * 注意: none;
340 ************************************************************************************/
341
342 void dis_full(void)
343 {
344 1 unsigned char x,y;
345 1 for(y=0;y<8;y++)
346 1 {
347 2 for(x=0;x<128;x++)
348 2 lcd_wrda(x,y,0xff);
349 2 }
350 1 }
351
352 /***********************************************************************************
353 * 函数名称:checkbusy;
354 *
355 * 函数功能描述: 判断LCD忙等待;
356 *
357 * 输入参数:none;
358 *
359 * 返回数据:none;
360 *
361 * 注意: none;
362 ************************************************************************************/
363
364 void checkbusy(void)
365 {
C51 COMPILER V7.02b LCD 03/06/2006 15:41:23 PAGE 7
366 1 addr=0x980e;
367 1
368 1 _nop_();_nop_();
369 1 _nop_();_nop_();
370 1
371 1 do
372 1 {
373 2 tp=addr;
374 2 }while((*tp&0x80)==0x80);
375 1
376 1 addr=0x180f;
377 1 }
378
379 /***********************************************************************************
380 * 函数名称:lcd_wrct;
381 *
382 * 函数功能描述: 向LCD写命令;
383 *
384 * 输入参数:none;
385 *
386 * 返回数据:none;
387 *
388 * 注意: none;
389 ************************************************************************************/
390
391 void lcd_wrct(unsigned char dd)
392 {
393 1 DISABLE_INTERRUPTS;
394 1
395 1 addr=0x980c;
396 1 tp=addr;
397 1 *tp=dd;
398 1
399 1 addr=0x180c;
400 1
401 1 _nop_();_nop_();
402 1 _nop_();_nop_();
403 1
404 1 addr=0x180d;
405 1
406 1 ENABLE_INTERRUPTS;
407 1 }
408
409 /***********************************************************************************
410 * 函数名称:set_xy;
411 *
412 * 函数功能描述: LCD读写位置变换;
413 *
414 * 输入参数:unsigned char类型坐标x,y;
415 *
416 * 返回数据:none;
417 *
418 * 注意: none;
419 ************************************************************************************/
420
421 void set_xy(unsigned char x,unsigned char y)
422 {
423 1 DISABLE_INTERRUPTS;
424 1
425 1 checkbusy();
426 1
427 1 y&=0x07;
C51 COMPILER V7.02b LCD 03/06/2006 15:41:23 PAGE 8
428 1 y|=0xB8;
429 1 lcd_wrct(y);
430 1
431 1 x&=0x3F;
432 1 x|=0x40;
433 1 lcd_wrct(x);
434 1
435 1 ENABLE_INTERRUPTS;
436 1 }
437
438 /***********************************************************************************
439 * 函数名称:lcd_wrda;
440 *
441 * 函数功能描述:向LCD写数据;
442 *
443 * 输入参数:unsigned char类型坐标x,y, unsigned char类型写入数据dd;
444 *
445 * 返回数据:none;
446 *
447 * 注意: none;
448 ************************************************************************************/
449
450 void lcd_wrda(unsigned char x,unsigned char y,unsigned char dd)
451 {
452 1
453 1 DISABLE_INTERRUPTS;
454 1 set_xy(x,y);
455 1 checkbusy();
456 1 if(x<64)
457 1 {
458 2 addr=0x9805;
459 2 tp=0x9805;
460 2 }
461 1 else
462 1 {
463 2 addr=0x9809;
464 2 tp=0x9809;
465 2 }
466 1
467 1
468 1 *tp=dd;
469 1
470 1 ENABLE_INTERRUPTS;
471 1 }
472
473 /***********************************************************************************
474 * 函数名称:lcd_rdda;
475 *
476 * 函数功能描述:从LCD中读数据;
477 *
478 * 输入参数:unsigned char类型坐标x,y,
479 *
480 * 返回数据:unsigned char类型读出数据;
481 *
482 * 注意: none;
483 ************************************************************************************/
484
485 unsigned char lcd_rdda(unsigned char x,unsigned char y)
486 {
487 1 unsigned char xdata readdata;
488 1
489 1 set_xy(x,y);
C51 COMPILER V7.02b LCD 03/06/2006 15:41:23 PAGE 9
490 1 checkbusy();
491 1 if(x<64)
492 1 {
493 2 addr=0x9807;
494 2
495 2 tp=addr;
496 2 addr=0x1805;
497 2 }
498 1 else
499 1 {
500 2 addr=0x980b;
501 2
502 2 tp=addr;
503 2 addr=0x1809;
504 2 }
505 1 readdata=*tp;
506 1 checkbusy();
507 1 if(x<64)
508 1 {
509 2 addr=0x9807;
510 2
511 2 tp=addr;
512 2 addr=0x1805;
513 2 }
514 1 else
515 1 {
516 2 addr=0x980b;
517 2
518 2 tp=addr;
519 2 addr=0x1809;
520 2 }
521 1 readdata=*tp;
522 1 return readdata;
523 1 }
524
525 /***********************************************************************************
526 * 函数名称:dis_start;
527 *
528 * 函数功能描述:显示开机画面;
529 *
530 * 输入参数:none;
531 *
532 * 返回数据:none;
533 *
534 * 注意: none;
535 ************************************************************************************/
536
537 void dis_start(void)
538 {
539 1 unsigned char x,y;
540 1 for(y=0;y<8;y++)
541 1 {
542 2 for(x=0;x<128;x++)
543 2 {
544 3 _nop_();_nop_();
545 3 lcd_wrda(x,y,0xAA); _nop_();_nop_();
546 3 lcd_wrda(x+1,y,0x55);_nop_();_nop_();
547 3 x+=1;
548 3 }
549 2 }
550 1 }
551
C51 COMPILER V7.02b LCD 03/06/2006 15:41:23 PAGE 10
552 /***********************************************************************************
553 * 函数名称:LCD_Draw_dot;
554 *
555 * 函数功能描述:画点(x,y);
556 *
557 * 输入参数:BYTE类型坐标x,y; bool类型标识flag;
558 *
559 * 返回数据:none;
560 *
561 * 注意: none;
562 ************************************************************************************/
563
564 void LCD_Draw_dot(unsigned char x,unsigned char y,bool flag)
565 {
566 1 R_BYTE temp,bit_x;
567 1
568 1 bit_x=7-y%8;
569 1
570 1 y=7-y/8;
571 1
572 1 temp=lcd_rdda(x,y);
573 1 if (flag)
574 1 temp|=(1<<bit_x);
575 1 else
576 1 temp&=~(1<<bit_x);
577 1
578 1 lcd_wrda(x,y,temp);
579 1 }
580
581 /***********************************************************************************
582 * 函数名称:LCD_Draw_line;
583 *
584 * 函数功能描述:(x1,y1)--(x2,y2)处划线;
585 *
586 * 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
587 *
588 * 返回数据:none;
589 *
590 * 注意: none;
591 ************************************************************************************/
592
593 bool LCD_Draw_line(unsigned char x1,y1,x2,y2,bool flag)
594 {
595 1 R_BYTE i,temp;
596 1 float data k,b;
597 1
598 1 if ((x1>=MAX_BIT_X)||(x2>=MAX_BIT_X)||(y1>=MAX_BIT_Y)||(y2>=MAX_BIT_Y))
599 1 return false;
600 1
601 1 if (y1==y2)
602 1 {
603 2 if (x1>x2)
604 2 {
605 3 temp=x1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -