📄 main.lst
字号:
187 //写入控制命令到LCD子程序
188 //输入参数:控制命令
189 void lcdWriteData (unsigned char Data);
190 //写入显示数据到LCD子程序
191 //输入参数:显示数据
192 void checkLcdBusy (void);
193 //检测LCD忙碌子程序
194 void displayPhoto (unsigned char *bmp);
195 //全屏显示图形子程序
196 //输入参数:图形数据
197 void wrPosition (void);
198 //坐标写入子程序
199 void dispString (unsigned char X, Y, speed, unsigned char *msg);
200 //显示字符串子程序
201 //输入参数:X=行(0-3), Y=列(0-7), speed=显示速度(毫秒), msg=字符数据
202 void delayMs (unsigned char ms);
203 //延时(毫秒)子程序
204 //输入参数:毫秒数
205 void delaySec (unsigned char sec);
206 //延时(秒)子程序
207 //输入参数:秒数
208 //===============================================
209
210
211 void main (void)
212 {
213 1 BG_LED_SET = LOW;
214 1 lcdInit ();
215 1
216 1 while(1)
217 1 {
218 2 lcdClear();
219 2 displayPhoto(powerOnPhoto);
220 2 delaySec(3);
221 2 lcdClear();
222 2 dispString (0, 0, 1, "┏━━━━━━┓");
223 2 dispString (1, 0, 1, "┃12864LCD测试┃");
224 2 dispString (2, 0, 1, "┃画面人物宝儿┃");
225 2 dispString (3, 0, 1, "┗━━━━━━┛");
226 2 delaySec(5);
227 2 }
228 1 }
229
230
231 //===============================================
232 void lcdInit (void)
233 {
234 1 MPU_RESET = LOW;
235 1 delayMs(40);
236 1 MPU_RESET = HIGH;
237 1 delayMs(1);
238 1 MPU_PS_CH = HIGH;
239 1
240 1 lcdWriteCommand(cFunctionSetE);
241 1 lcdWriteCommand(cFunctionSetB);
C51 COMPILER V7.50 MAIN 12/29/2005 00:34:44 PAGE 5
242 1 lcdClear();
243 1 lcdWriteCommand(cEntryModeSet);
244 1 lcdWriteCommand(cDisplayOnCtrl);
245 1 }
246 //===============================================
247 void lcdClear (void)
248 {
249 1 lcdWriteCommand(cClearDisplay);
250 1 }
251 //===============================================
252 void lcdWriteCommand (unsigned char Command)
253 {
254 1 checkLcdBusy();
255 1 MPU_RS_CH = LOW;
256 1 MPU_RW_CH = LOW;
257 1 LCD_DATA = Command;
258 1 MPU_ENABLE = 1;
259 1 delayMs(1);
260 1 MPU_ENABLE = LOW;
261 1 }
262 //===============================================
263 void lcdWriteData (unsigned char Data)
264 {
265 1 checkLcdBusy();
266 1 MPU_RS_CH = HIGH;
267 1 MPU_RW_CH = LOW;
268 1 LCD_DATA = Data;
269 1 MPU_ENABLE = HIGH;
270 1 delayMs(1);
271 1 MPU_ENABLE = LOW;
272 1 }
273 //===============================================
274 void checkLcdBusy (void)
275 {
276 1 LCD_DATA = 0xff;
277 1 MPU_RS_CH = LOW;
278 1 MPU_RW_CH = HIGH;
279 1 MPU_ENABLE = HIGH;
280 1 while (BUSY_FLAG);
281 1 MPU_ENABLE = LOW;
282 1 }
283 //===============================================
284 void displayPhoto (unsigned char *bmp)
285 {
286 1 lcdPosX = 0x80;
287 1 halfScr = 2;
288 1
289 1 for (;halfScr != 0; halfScr--)
290 1 {
291 2 lcdPosY = 0x80;
292 2 blStart = 32;
293 2
294 2 for (;blStart != 0; blStart--)
295 2 {
296 3 basicBlock = 16;
297 3 wrPosition ();
298 3
299 3 for (; basicBlock != 0; basicBlock--)
300 3 {
301 4 lcdWriteData (*bmp++);
302 4 }
303 3 lcdPosY++;
C51 COMPILER V7.50 MAIN 12/29/2005 00:34:44 PAGE 6
304 3 }
305 2 lcdPosX = 0x88;
306 2 }
307 1 lcdWriteCommand(cFuncDrawOn);
308 1 lcdWriteCommand(cFunctionSetB);
309 1 }
310 //===============================================
311 void wrPosition (void)
312 {
313 1 lcdWriteCommand(cFunctionSetE);
314 1 lcdWriteCommand(lcdPosY);
315 1 lcdWriteCommand(lcdPosX);
316 1 lcdWriteCommand(cFunctionSetB);
317 1 }
318 //===============================================
319 void dispString (unsigned char X, Y, speed, unsigned char *msg)
320 {
321 1 if (X == 0)
322 1 {
323 2 X = 0x80;
324 2 }
325 1 else if (X == 1)
326 1 {
327 2 X = 0x90;
328 2 }
329 1 else if (X == 2)
330 1 {
331 2 X = 0x88;
332 2 }
333 1 else if (X == 3)
334 1 {
335 2 X = 0x98;
336 2 }
337 1 Y = X + Y;
338 1 lcdWriteCommand(Y);
339 1 while (*msg)
340 1 {
341 2 lcdWriteData(*msg++);
342 2 delayMs(speed);
343 2 }
344 1 }
345 //===============================================
346 void delayMs (unsigned char ms)
347 {
348 1 unsigned char i;
349 1 while (--ms)
350 1 {
351 2 for (i = 0; i < 125; i++);
352 2 }
353 1 }
354 //===============================================
355 void delaySec (unsigned char sec)
356 {
357 1 unsigned char i;
358 1 while (--sec)
359 1 {
360 2 for (i = 0; i < 200; i++)
361 2 {
362 3 delayMs (6);
363 3 }
364 2 }
365 1 }
C51 COMPILER V7.50 MAIN 12/29/2005 00:34:44 PAGE 7
366 //===============================================
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 415 ----
CONSTANT SIZE = 1092 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 13
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 + -