📄 cgm12864b.lst
字号:
376 void LCD_WaitReady(void) //判断LCD控制芯片ST7920是否忙
377 {
378 1 LCD_DATA=0xff;
379 1 _nop_();
380 1 LCD_RW=1;
381 1 LCD_RS=0;
382 1 LCD_E=1;
383 1 while (LCD_DATA&0x80);
384 1 }
385
386 //-------------------------------------------------------------------------
387 //函数名称: void LCD_WriteCommand1(char ch)
388 //函数功能: 向LCD控制芯片ST7920发送控制命令
389 //入口参数: char ch 控制命令参数
390 //出口参数: 无
391 //全局变量引用: 无
392 //调用模块: LCD_WaitReady1()
393 //----------------------------------------------------------------------
394
395 void LCD_WriteCommand(char ch)
396 {
397 1 LCD_WaitReady(); //判断LCD是否处于忙状态
398 1 LCD_RW=0;
399 1 delay(10);
400 1 LCD_RS=0;
401 1 delay(10);
402 1 LCD_DATA=ch;
403 1 delay(10);
404 1 LCD_E=1;
405 1 delay(30);
406 1 LCD_E=0;
407 1 }
408 //-------------------------------------------------------------------------
409 //函数名称: void LCD_WriteData1(char ch)
410 //函数功能: 向LCD控制芯片KS0108发送数据
411 //入口参数: char ch 数据参数
412 //出口参数: 无
413 //全局变量引用: 无
414 //调用模块: LCD_WaitReady1()
415 //----------------------------------------------------------------------
416 void LCD_WriteData(char ch)
417 {
418 1 LCD_WaitReady(); //判断LCD是否处于忙状态
419 1 LCD_RW=0;
420 1 LCD_RS=1;
421 1 LCD_DATA=ch;
422 1 LCD_E=1;
423 1 delay(30);
424 1 LCD_E=0;
425 1 }
426 void LCD_WriteData2(uint ch) //连续写两个汉字
427 {
C51 COMPILER V8.02 CGM12864B 05/07/2009 22:41:02 PAGE 8
428 1 uchar a,b;
429 1 a=0;
430 1 b=0;
431 1 a|=ch;
432 1 ch>>=8;
433 1 b|=ch;
434 1 LCD_WriteData(b);
435 1 LCD_WriteData(a);
436 1 }
437
438 void Char_Set_XY(uchar x, uchar y, uchar *p) //X代表列,Y代表行,写字符串
439 {
440 1 switch(y)
441 1 {
442 2 case 0:
443 2 {
444 3 LCD_WriteCommand(0x80+x);
445 3 break;
446 3 }
447 2 case 1:
448 2 {
449 3 LCD_WriteCommand(0x90+x);
450 3 break;
451 3 }
452 2 case 2:
453 2 {
454 3 LCD_WriteCommand(0x88+x);
455 3 break;
456 3 }
457 2 case 3:
458 2 {
459 3 LCD_WriteCommand(0x98+x);
460 3 break;
461 3 }
462 2 }
463 1
464 1 while(*p != '\0')
465 1 {
466 2 LCD_WriteData(*p++);
467 2 }
468 1 }
469
470
471 //-------------------------------------------------------------------------
472 //函数名称: void InitLCD(void)
473 //函数功能: 初始化液晶并清屏
474 //入口参数: 无
475 //出口参数: 无
476 //全局变量引用: 无
477 //调用模块: Delay1ms(1);LCD_WriteCommand1(); LCD_WriteCommand2();
478 // LCD_WriteData1(); LCD_WriteData1();
479 //----------------------------------------------------------------------
480 void InitLCD(void)
481 {
482 1 //LCD_RST=0;
483 1 //delay(10);
484 1 //LCD_RST=1;
485 1 LCD_WriteCommand(0x30);
486 1 LCD_WriteCommand(0x0c); //开显示
487 1 LCD_WriteCommand(0x01);
488 1 LCD_WriteCommand(0x06);
489 1 }
C51 COMPILER V8.02 CGM12864B 05/07/2009 22:41:02 PAGE 9
490 //-------------------------------------------------------------------------
491 //函数名称: void SYSCLK_Init (void)
492 //函数功能: 系统时钟初始化;使能外部时钟:11.0592MHz
493 //入口参数: 无
494 //出口参数: 无
495 //全局变量引用: 无
496 //调用模块: 无
497 //----------------------------------------------------------------------
498 /*void SYSCLK_Init (void)
499 {
500 int i; // delay counter
501 OSCXCN = 0x67; // start external oscillator with
502 // 18.432MHz crystal
503 for (i=0; i < 256; i++) ; // Wait for osc. to start up
504 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
505 OSCICN = 0x88; // select external oscillator as SYSCLK
506 } */ // source and enable missing clock
507 // detector
508 /*displaybmp(uchar * x)
509 {
510 uchar i=0;
511 while(x[i]!='\0')
512 {
513 LCD_WriteData(x[i]);
514 i++;
515 }
516 } */
517 //-------------------------------------------------------------------------
518 //函数名称: PORT_Init ()
519 //函数功能: 端口初始化;使能交叉开关
520 //入口参数: 无
521 //出口参数: 无
522 //全局变量引用: 无
523 //调用模块: 无
524 //----------------------------------------------------------------------
525
526 /*void PORT_Init (void)
527 {
528 XBR2 = 0x40; // Enable crossbar and weak pull-ups
529 P74OUT = 0XFf;
530 P2MDOUT = 0xff;
531 } */
532 /*void WriteCGRAM(uchar * p,uchar CgramAdress) //造字
533 {
534 uchar i;
535 LCD_WriteCommand(CgramAdress);
536 for(i=0;i<16;i++)
537 {
538 LCD_WriteCommand(CgramAdress+i);
539 LCD_WriteData(p[i*2]);
540 LCD_WriteData(p[i*2+1]);
541 delay(50);
542 }
543 }
544 void ReadCGRAM(DdramAdress,CgramCode)
545 {
546 LCD_WriteCommand(DdramAdress);
547 LCD_WriteData(0x00);
548 LCD_WriteData(CgramCode);
549 } */
550 void SetDraw() //绘图设置
551 {
C51 COMPILER V8.02 CGM12864B 05/07/2009 22:41:02 PAGE 10
552 1 LCD_WriteCommand(0x01);
553 1 delay(100);
554 1 LCD_WriteCommand(0x34); //8位数据接口,扩充指令集
555 1 delay(100);
556 1 }
557
558 //---------------------------------------------------------------------------
559 // 主程序
560 //----------------------------------------------------------------------------
561
562 void Draw_Pic(uchar x, uchar y, const uchar *Draw) //绘图函数
563 {
564 1 uchar i, j, temp_x, temp_y;
565 1 temp_x = x;
566 1 temp_y = y;
567 1 temp_x |= 0x80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -