📄 main.lst
字号:
360 void ClearScreen(void)
361 {
362 1 unsigned char i,j;
363 1 COM_2(0x00,0x00,0x24);//图形地址指针设置
364 1 for(i=0;i<128;i++)//128行
365 1 {
C51 COMPILER V8.08 MAIN 04/26/2008 18:12:39 PAGE 7
366 2 for(j=0;j<30;j++)//每行30个字节
367 2 {
368 3 COM_1(0x00,0xC0);//数据写,地址指针加1
369 3 }
370 2 }
371 1 COM_2(0x00,0x10,0x24);//文本地址指针设置
372 1 for(i=0;i<128;i++)
373 1 {
374 2 for(j=0;j<30;j++)
375 2 {
376 3 COM_1(0x00,0xC0);//数据写,地址指针加1
377 3
378 3 }
379 2 }
380 1 }
381
382 void initlcd(void) //初始化
383 {
384 1 rst=0; //reset
385 1 delay(10); //delay 10ms
386 1 rst=1;
387 1 COM_0(0x90);//显示关
388 1 COM_2(0x00,0x10,0x40); //设置文本区首地址
389 1 COM_2(0x1E,0x00,0x41); //设置文本区域(宽度)
390 1 COM_2(0x00,0x00,0x42); //设置图形首地址
391 1 COM_2(0x1E,0x00,0x43); //设置图形区域(宽度)
392 1 COM_0(0x88); //CGRAM方式,OR模式
393 1 //COM_2(0x10,0x06,0x21); //设置光标指针
394 1 //COM_2(0x00,0x00,0x22); //CGRAM偏置地址寄存器设置
395 1 //COM_2(0x00,0x00,0x24); //地址指针设置,设置将要进行操作的显示缓冲区(RAM)的一个单元地址
396 1 //COM_0(0xA0); //设置光标一行
397 1 COM_0(0x9F); //图形显示开,文本显示开,光标显示开,光标闪烁开
398 1 }
399
400
401
402 void ShowHZB(unsigned char line,unsigned char column,unsigned char indexB) //正显示16*16
403 {
404 1 unsigned char add_h,add_l;
405 1 unsigned int addr;
406 1 unsigned int StartAddr;
407 1 StartAddr=line*30+column; //定位起始行
408 1 addr=indexB*16; //code 储存地址,即字符代码地址
409 1
410 1 while(addr<(indexB+2)*16) //每次写32个字节
411 1 {
412 2 add_l=StartAddr%(0x0100); //低位地址
413 2 add_h=StartAddr/(0x0100); //高位地址
414 2 COM_2(add_l,add_h,0x24); //定位当前操作位置
415 2 COM_1(HZ2[addr],0xc0); //向当前操作位置写入要显示的内容,左半部分
416 2 COM_1(HZ2[addr+1],0xc0); //向当前操作位置写入要显示的内容,右半部分
417 2 COM_0(0x9F); //图形显示开,文本显示开,光标显示开,光标闪烁开
418 2 addr++;
419 2 addr++; //使字符代码指针指向下一要写入的字节
420 2 StartAddr=StartAddr+30; //每行30个字节,本指令使指针指向将要写入汉字(显示缓存)的下一行
421 2 }
422 1 StartAddr=0; //写完一个汉字(16行)后,起始行复0
423 1 }
424
425 void R_ShowHZB(unsigned char line,unsigned char column,unsigned char indexB) //反显示16*16
426 {
427 1 unsigned char add_h,add_l,dat;
C51 COMPILER V8.08 MAIN 04/26/2008 18:12:39 PAGE 8
428 1 unsigned int addr;
429 1 unsigned int StartAddr;
430 1 StartAddr=line*30+column; //定位起始行
431 1 addr=indexB*16; //code 储存地址
432 1 while(addr<(indexB+2)*16)
433 1 {
434 2 add_l=StartAddr%(0x0100); //低位地址
435 2 add_h=StartAddr/(0x0100); //高位地址
436 2 COM_2(add_l,add_h,0x24); //定位当前操作位置
437 2 dat=HZ2[addr];
438 2 dat=~dat;
439 2 COM_1(dat,0xc0);
440 2 dat=HZ2[addr+1];
441 2 dat=~dat;
442 2 COM_1(dat,0xc0);
443 2 COM_0(0x9F); //图形显示开,文本显示开,光标显示开,光标闪烁开
444 2 addr++;
445 2 addr++;
446 2 StartAddr=StartAddr+30;
447 2 }
448 1 StartAddr=0;
449 1 }
450
451 void Showchar(unsigned char line,unsigned char column,unsigned char index) //显示字符8*16
452 {
453 1 unsigned char add_h,add_l;
454 1 unsigned int addr;
455 1 unsigned int StartAddr;
456 1 StartAddr=line*30+column; //定位起始行
457 1 addr=index*16; //code 储存地址
458 1 while(addr<(index+1)*16)
459 1 {
460 2 add_l=StartAddr%(0x0100); //低位地址
461 2 add_h=StartAddr/(0x0100); //高位地址
462 2 COM_2(add_l,add_h,0x24); //定位当前操作位置
463 2 COM_1(HZ3[addr],0xc0);
464 2 COM_0(0x9F);
465 2 addr++;
466 2 StartAddr=StartAddr+30;
467 2 }
468 1 StartAddr=0;
469 1 }
470
471 void R_Showchar(unsigned char line,unsigned char column,unsigned char index) //反显示8*16
472 {
473 1 unsigned char add_h,add_l,dat;
474 1 unsigned int addr;
475 1 unsigned int StartAddr;
476 1 StartAddr=line*30+column; //定位起始行
477 1 addr=index*16; //code 储存地址
478 1 while(addr<(index+1)*16)
479 1 {
480 2 add_l=StartAddr%(0x0100); //低位地址
481 2 add_h=StartAddr/(0x0100); //高位地址
482 2 COM_2(add_l,add_h,0x24); //定位当前操作位置
483 2 dat=~HZ3[addr];
484 2 COM_1(dat,0xc0);
485 2 COM_0(0x9F);
486 2 addr++;
487 2 StartAddr=StartAddr+30;
488 2 }
489 1 StartAddr=0;
C51 COMPILER V8.08 MAIN 04/26/2008 18:12:39 PAGE 9
490 1 }
491
492
493
494
495 void checkbusy(void)
496 {
497 1 unsigned char data0;
498 1 cd=1;
499 1 ce=1;
500 1 ce=0;
501 1 rd=0;
502 1 wr=1;
503 1 data0=P2;
504 1 rd=1;
505 1 ce=1;
506 1 while((data0&0x03)!=0x03);
507 1 }
508
509
510 void delay(unsigned int t)
511 {
512 1 while(t!=0) t--; //t=10,10us
513 1 }
514
515
516
517 void main(void) //主程序
518 {
519 1 fs=0; //font select ,H:6x8,L:8x8
520 1 initlcd(); //初始化
521 1 ClearScreen(); //清屏
522 1 ShowHZB(0,2,0x00);
523 1 // R_Showchar(0,2,0x00);
524 1 //ShowHZB(32,23,0x02);
525 1 while(1);
526 1
527 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 898 ----
CONSTANT SIZE = 2800 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 42
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 + -