C51 COMPILER V7.06 12864A_3 12/15/2017 12:02:20 PAGE 1 C51 COMPILER V7.06, COMPILATION OF MODULE 12864A_3 OBJECT MODULE PLACED IN 12864A-3.OBJ COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864A-3.c DEBUG OBJECTEXTEND stmt level source 1 /*******************************************************************/ 2 /* */ 3 /* */ 4 //;* LCD型号:TS12864A-3(带汉字库)或兼容型号 控制器ST7920 */ 5 //;* MCU:STC89S52 ,晶体频率:11.0592MHz */ 6 /* */ 7 /* */ 8 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */ 9 /* */ 10 /*******************************************************************/ 11 12 #include 13 #include 14 15 #define uchar unsigned char 16 #define uint unsigned int 17 /*12864端口定义*/ 18 #define LCD_data P0 //数据口 19 sbit LCD_RS = P3^5; //寄存器选择输入 20 sbit LCD_RW = P3^6; //液晶读/写控制 21 sbit LCD_EN = P3^4; //液晶使能控制 22 sbit LCD_PSB = P3^7; //串/并方式控制 23 sbit wela = P2^6; 24 sbit dula = P2^7; 25 26 uchar code dis1[] = {"天祥电子"}; 27 uchar code dis2[] = {" www.txmcu.com"}; 28 uchar code dis3[] = {"TX-1C 开发板带您 "}; 29 uchar code dis4[] = {"进入单片机的世界"}; 30 31 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; 32 uchar IRDIS[2]; 33 uchar IRCOM[4]; 34 void delay0(uchar x); //x*0.14MS 35 void beep(); 36 void dataconv(); 37 void lcd_pos(uchar X,uchar Y); //确定显示位置 38 /*******************************************************************/ 39 /* */ 40 /* 延时函数 */ 41 /* */ 42 /*******************************************************************/ 43 void delay(int ms) 44 { 45 1 while(ms--) 46 1 { 47 2 uchar i; 48 2 for(i=0;i<250;i++) 49 2 { 50 3 _nop_(); 51 3 _nop_(); 52 3 _nop_(); 53 3 _nop_(); 54 3 } 55 2 } C51 COMPILER V7.06 12864A_3 12/15/2017 12:02:20 PAGE 2 56 1 } 57 /*******************************************************************/ 58 /* */ 59 /*检查LCD忙状态 */ 60 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */ 61 /* */ 62 /*******************************************************************/ 63 bit lcd_busy() 64 { 65 1 bit result; 66 1 LCD_RS = 0; 67 1 LCD_RW = 1; 68 1 LCD_EN = 1; 69 1 delayNOP(); 70 1 result = (bit)(P0&0x80); 71 1 LCD_EN = 0; 72 1 return(result); 73 1 } 74 /*******************************************************************/ 75 /* */ 76 /*写指令数据到LCD */ 77 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ 78 /* */ 79 /*******************************************************************/ 80 void lcd_wcmd(uchar cmd) 81 { 82 1 while(lcd_busy()); 83 1 LCD_RS = 0; 84 1 LCD_RW = 0; 85 1 LCD_EN = 0; 86 1 _nop_(); 87 1 _nop_(); 88 1 P0 = cmd; 89 1 delayNOP(); 90 1 LCD_EN = 1; 91 1 delayNOP(); 92 1 LCD_EN = 0; 93 1 } 94 /*******************************************************************/ 95 /* */ 96 /*写显示数据到LCD */ 97 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ 98 /* */ 99 /*******************************************************************/ 100 void lcd_wdat(uchar dat) 101 { 102 1 while(lcd_busy()); 103 1 LCD_RS = 1; 104 1 LCD_RW = 0; 105 1 LCD_EN = 0; 106 1 P0 = dat; 107 1 delayNOP(); 108 1 LCD_EN = 1; 109 1 delayNOP(); 110 1 LCD_EN = 0; 111 1 } 112 /*******************************************************************/ 113 /* */ 114 /* LCD初始化设定 */ 115 /* */ 116 /*******************************************************************/ 117 void lcd_init() C51 COMPILER V7.06 12864A_3 12/15/2017 12:02:20 PAGE 3 118 { 119 1 120 1 LCD_PSB = 1; //并口方式 121 1 122 1 lcd_wcmd(0x34); //扩充指令操作 123 1 delay(5); 124 1 lcd_wcmd(0x30); //基本指令操作 125 1 delay(5); 126 1 lcd_wcmd(0x0C); //显示开,关光标 127 1 delay(5); 128 1 lcd_wcmd(0x01); //清除LCD的显示内容 129 1 delay(5); 130 1 } 131 /*********************************************************/ 132 /* */ 133 /* 主程序 */ 134 /* */ 135 /*********************************************************/ 136 main() 137 { 138 1 uchar i; 139 1 delay(10); //延时 140 1 wela=0; 141 1 dula=0; 142 1 lcd_init(); //初始化LCD 143 1 144 1 lcd_pos(0,0); //设置显示位置为第一行的第1个字符 145 1 i = 0; 146 1 while(dis1[i] != '\0') 147 1 { //显示字符 148 2 lcd_wdat(dis1[i]); 149 2 i++; 150 2 } 151 1 lcd_pos(1,0); //设置显示位置为第二行的第1个字符 152 1 i = 0; 153 1 while(dis2[i] != '\0') 154 1 { 155 2 lcd_wdat(dis2[i]); //显示字符 156 2 i++; 157 2 } 158 1 lcd_pos(2,0); //设置显示位置为第三行的第1个字符 159 1 i = 0; 160 1 while(dis3[i] != '\0') 161 1 { 162 2 lcd_wdat(dis3[i]); //显示字符 163 2 i++; 164 2 } 165 1 lcd_pos(3,0); //设置显示位置为第四行的第1个字符 166 1 i = 0; 167 1 while(dis4[i] != '\0') 168 1 { 169 2 lcd_wdat(dis4[i]); //显示字符 170 2 i++; 171 2 } 172 1 while(1); 173 1 } 174 175 176 177 /*********************************************************/ 178 /* */ 179 /* 延时x*0.14ms子程序 */ C51 COMPILER V7.06 12864A_3 12/15/2017 12:02:20 PAGE 4 180 /* */ 181 /*********************************************************/ 182 183 void delay0(uchar x) //x*0.14MS 184 { 185 1 uchar i; 186 1 while(x--) 187 1 { 188 2 for (i = 0; i<13; i++) {} 189 2 } 190 1 } 191 /*********************************************************/ 192 /* */ 193 /* 设定显示位置 */ 194 /* */ 195 /*********************************************************/ 196 void lcd_pos(uchar X,uchar Y) 197 { 198 1 uchar pos; 199 1 if (X==0) 200 1 {X=0x80;} 201 1 else if (X==1) 202 1 {X=0x90;} 203 1 else if (X==2) 204 1 {X=0x88;} 205 1 else if (X==3) 206 1 {X=0x98;} 207 1 pos = X+Y ; 208 1 lcd_wcmd(pos); //显示地址 209 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 302 ---- CONSTANT SIZE = 59 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 6 1 IDATA SIZE = ---- ---- BIT SIZE = ---- 1 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)