C51 COMPILER V7.06 12864 04/27/2020 09:49:00 PAGE 1 C51 COMPILER V7.06, COMPILATION OF MODULE 12864 OBJECT MODULE PLACED IN 12864.OBJ COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864.c BROWSE DEBUG OBJECTEXTEND stmt level source 1 #include 2 /*12864端口定义*/ 3 #define LCD_data P0 //数据口 4 5 6 uchar code dis1[] = {"天祥电子"}; 7 uchar code dis2[] = {"是您最好的选择! "}; 8 uchar code dis3[] = {"TX-C51 BoardTest"}; 9 uchar code dis4[] = {"www.txmcu.com"}; 10 11 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; 12 //uchar IRDIS[2]; 13 //uchar IRCOM[4]; 14 void dataconv(); 15 void lcd_pos(uchar X,uchar Y); //确定显示位置 16 /*******************************************************************/ 17 /* */ 18 /* 延时函数 */ 19 /* */ 20 /*******************************************************************/ 21 void delay_12864(int ms) 22 { 23 1 while(ms--) 24 1 { 25 2 uchar i; 26 2 for(i=0;i<250;i++) 27 2 { 28 3 _nop_(); 29 3 _nop_(); 30 3 _nop_(); 31 3 _nop_(); 32 3 } 33 2 } 34 1 } 35 /*******************************************************************/ 36 /* */ 37 /*检查LCD忙状态 */ 38 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */ 39 /* */ 40 /*******************************************************************/ 41 bit lcd_busy() 42 { 43 1 bit result; 44 1 LCD_RS = 0; 45 1 LCD_RW = 1; 46 1 LCD_EN = 1; 47 1 delayNOP(); 48 1 result = (bit)(P0&0x80); 49 1 LCD_EN = 0; 50 1 return(result); 51 1 } 52 /*******************************************************************/ 53 /* */ 54 /*写指令数据到LCD */ 55 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ C51 COMPILER V7.06 12864 04/27/2020 09:49:00 PAGE 2 56 /* */ 57 /*******************************************************************/ 58 void lcd_wcmd(uchar cmd) 59 { 60 1 while(lcd_busy()) {if(message!='7') break;} 61 1 62 1 LCD_RS = 0; 63 1 LCD_RW = 0; 64 1 LCD_EN = 0; 65 1 _nop_(); 66 1 _nop_(); 67 1 P0 = cmd; 68 1 delayNOP(); 69 1 LCD_EN = 1; 70 1 delayNOP(); 71 1 LCD_EN = 0; 72 1 } 73 /*******************************************************************/ 74 /* */ 75 /*写显示数据到LCD */ 76 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ 77 /* */ 78 /*******************************************************************/ 79 void lcd_wdat(uchar dat) 80 { 81 1 while(lcd_busy()) {if(message!='7') break;} 82 1 LCD_RS = 1; 83 1 LCD_RW = 0; 84 1 LCD_EN = 0; 85 1 P0 = dat; 86 1 delayNOP(); 87 1 LCD_EN = 1; 88 1 delayNOP(); 89 1 LCD_EN = 0; 90 1 } 91 /*******************************************************************/ 92 /* */ 93 /* LCD初始化设定 */ 94 /* */ 95 /*******************************************************************/ 96 void lcd_init() 97 { 98 1 99 1 LCD_PSB = 1; //并口方式 100 1 101 1 lcd_wcmd(0x34); //扩充指令操作 102 1 delay_12864(5); 103 1 lcd_wcmd(0x30); //基本指令操作 104 1 delay_12864(5); 105 1 lcd_wcmd(0x0C); //显示开,关光标 106 1 delay_12864(5); 107 1 lcd_wcmd(0x01); //清除LCD的显示内容 108 1 delay_12864(5); 109 1 } 110 /*********************************************************/ 111 /* */ 112 /* 主程序 */ 113 /* */ 114 /*********************************************************/ 115 void tx12864_main() 116 { 117 1 uchar i; C51 COMPILER V7.06 12864 04/27/2020 09:49:00 PAGE 3 118 1 system_init(); 119 1 delay_12864(10); //延时 120 1 lcd_init(); //初始化LCD 121 1 lcd_pos(0,0); //设置显示位置为第一行的第1个字符 122 1 i = 0; 123 1 while(dis1[i] != '\0') 124 1 { //显示字符 125 2 lcd_wdat(dis1[i]); 126 2 i++; 127 2 } 128 1 lcd_pos(1,0); //设置显示位置为第二行的第1个字符 129 1 i = 0; 130 1 while(dis2[i] != '\0') 131 1 { 132 2 lcd_wdat(dis2[i]); //显示字符 133 2 i++; 134 2 } 135 1 lcd_pos(2,0); //设置显示位置为第三行的第1个字符 136 1 i = 0; 137 1 while(dis3[i] != '\0') 138 1 { 139 2 lcd_wdat(dis3[i]); //显示字符 140 2 i++; 141 2 } 142 1 lcd_pos(3,0); //设置显示位置为第四行的第1个字符 143 1 i = 0; 144 1 while(dis4[i] != '\0') 145 1 { 146 2 lcd_wdat(dis4[i]); //显示字符 147 2 i++; 148 2 } 149 1 while(message=='7'); 150 1 } 151 152 /*********************************************************/ 153 /* */ 154 /* 设定显示位置 */ 155 /* */ 156 /*********************************************************/ 157 void lcd_pos(uchar X,uchar Y) 158 { 159 1 uchar pos; 160 1 if (X==0) 161 1 {X=0x80;} 162 1 else if (X==1) 163 1 {X=0x90;} 164 1 else if (X==2) 165 1 {X=0x88;} 166 1 else if (X==3) 167 1 {X=0x98;} 168 1 pos = X+Y ; 169 1 lcd_wcmd(pos); //显示地址 170 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 300 ---- CONSTANT SIZE = 58 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 1 IDATA SIZE = ---- ---- C51 COMPILER V7.06 12864 04/27/2020 09:49:00 PAGE 4 BIT SIZE = ---- 1 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)