📄 pmlcd.lst
字号:
241 * 功能: 判断LCM的左半屏或右半屏是否处于忙状态 *
C51 COMPILER V8.08 PMLCD 12/08/2008 21:06:17 PAGE 5
242 * 当LCM不忙时函数返回 *
243 * 输入: choe1为左半屏选择标志 *
244 * choe2为右半屏选择标志 *
245 *********************************************************/
246 void chk_busy (uchar choe1,uchar choe2)
247 {
248 1 if(choe1==1)
249 1 {
250 2 lck = 0;//a0=0;
251 2 P1 = 0x09;//rw=1;
252 2 lck = 1;//e1=0;
253 2 while(P0&0x80==1)
254 2 delay(2);
255 2 /*cs1=1;
256 2 cs2=1;
257 2 cs3=0;
258 2 e1=1;*/
259 2 lck = 0;
260 2 P1 = 0x00;
261 2 lck = 1;
262 2 }
263 1 if(choe2==1)
264 1 {
265 2 lck = 0;//a0=0;
266 2 P1 = 0x0a;//rw=1;
267 2 lck = 1;//e2=1;
268 2 while(P0&0x80==1)
269 2 delay(2);
270 2 lck = 0; //e2=0;
271 2 P1 = 0x00;
272 2 lck = 1;
273 2 }
274 1 }
275
276 /********************************************************
277 * 功能: 根据输入的参数进行延时 *
278 * 输入: us为延时多少微秒 *
279 * 晶振为11.0592M,执行一条指令的时间约为1us *
280 *********************************************************/
281 void delay (unsigned int us) //delay time
282 {
283 1 while(us--);
284 1 }
285
286
287 /********************************************************
288 * 功能: 根据输入的参数进行延时 *
289 * 输入: us为延时多少毫秒 *
290 * 晶振为11.0592M,执行一条指令的时间约为1us *
291 * 1ms = 1000 * 1us *
292 *********************************************************/
293 void delay1 (unsigned int ms)
294 {
295 1 unsigned int i,j;
296 1 for(i=0;i<ms;i++)
297 1 for(j=0;j<1000;j++)
298 1 ;
299 1 }
300
301
302 /********************************************************
303 * 功能: 初始化LCM *
C51 COMPILER V8.08 PMLCD 12/08/2008 21:06:17 PAGE 6
304 * 输入: 无须输入参数 *
305 *********************************************************/
306 void init_lcd (void)
307 {
308 1
309 1 wr_lcd (1,1,comm,0xe2);
310 1 wr_lcd (1,1,comm,0xa4);
311 1 wr_lcd (1,1,comm,0xa9);
312 1 wr_lcd (1,1,comm,0xa0);
313 1 wr_lcd (1,1,comm,0xee);
314 1 wr_lcd (1,1,comm,0xaf);
315 1 }
316
317 /********************************************************
318 * 功能: 向LCM送16*16的汉字 *
319 * 输入: *chn为存放汉字点阵的起始地址 *
320 *********************************************************/
321 void disphz (uchar code *chn)
322 {
323 1 uchar i,j,k;
324 1 for(k=0;k<3;k++)
325 1 {
326 2 for(j=0;j<4;j++)
327 2 {
328 3 wr_lcd (1,0,comm,f_page+j);
329 3 wr_lcd (1,0,comm,f_row);
330 3 wr_lcd (1,0,comm,f_line+12+k*16);
331 3 for(i=0;i<16;i++)
332 3 wr_lcd (1,0,dat,chn[k*64+j*16+i]);
333 3 }
334 2 }
335 1 for(k=3;k<6;k++)
336 1 {
337 2 for(j=0;j<4;j++)
338 2 {
339 3 wr_lcd (0,1,comm,f_page+j);
340 3 wr_lcd (0,1,comm,f_row);
341 3 wr_lcd (0,1,comm,f_line+k*16-48);
342 3 for(i=0;i<16;i++)
343 3 wr_lcd (0,1,dat,chn[k*64+j*16+i]);
344 3 }
345 2 }
346 1 }
347
348
349 /********************************************************
350 * 功能: 向LCM送8*16的字符 *
351 * 输入: *img为存放字符点阵的起始地址 *
352 *********************************************************/
353
354 void dispzf (uchar code *eng)
355 {
356 1 uchar i,j,k;
357 1 for(k=0;k<7;k++)
358 1 {
359 2 for(j=0;j<4;j++)
360 2 {
361 3 wr_lcd (1,0,comm,f_page+j);
362 3 wr_lcd (1,0,comm,f_row);
363 3 wr_lcd (1,0,comm,f_line+5+k*8);
364 3 for(i=0;i<8;i++)
365 3 wr_lcd (1,0,dat,eng[k*32+j*8+i]);
C51 COMPILER V8.08 PMLCD 12/08/2008 21:06:17 PAGE 7
366 3 }
367 2 }
368 1 for(k=7;k<14;k++)
369 1 {
370 2 for(j=0;j<4;j++)
371 2 {
372 3 wr_lcd (0,1,comm,f_page+j);
373 3 wr_lcd (0,1,comm,f_row);
374 3 wr_lcd (0,1,comm,f_line+k*8-56);
375 3 for(i=0;i<8;i++)
376 3 wr_lcd (0,1,dat,eng[k*32+j*8+i]);
377 3 }
378 2 }
379 1 }
380
381
382
383
384 //************显示一幅图象************
385
386 void disptu (uchar code *img)
387 {
388 1 uchar i,j;
389 1 for(j=0;j<4;j++)
390 1 {
391 2 wr_lcd (1,1,comm,f_page+j);
392 2 wr_lcd (1,1,comm,f_row);
393 2 wr_lcd (1,1,comm,f_line);
394 2 for(i=0;i<122;i++)
395 2 {
396 3 if(i<61)
397 3 {wr_lcd (1,0,comm,f_line+i);
398 4 wr_lcd (1,0,dat,img[j*122+i]);}
399 3 else
400 3 {wr_lcd (0,1,comm,f_line+i-61);
401 4 wr_lcd (0,1,dat,img[j*122+i]);}
402 3 }
403 2 }
404 1 }
405
406
407 /********************************************************
408 * 功能: 向LCM的左半屏和右半屏送点阵数据 *
409 * 输入: data1,data2为待显示数据 *
410 *********************************************************/
411 void wrlattice (uchar data1,uchar data2)
412 {
413 1 uchar i,j;
414 1 for(j=0;j<4;j++)
415 1 {
416 2 wr_lcd (1,1,comm,f_page+j);
417 2 wr_lcd (1,1,comm,f_row);
418 2 wr_lcd (1,1,comm,f_line);
419 2 for(i=0;i<61;i=i+2)
420 2 {
421 3 wr_lcd (1,1,dat,data1);
422 3 wr_lcd (1,1,dat,data2);
423 3 }
424 2 }
425 1 }
426
427 //**************清除数码管显示***********
C51 COMPILER V8.08 PMLCD 12/08/2008 21:06:17 PAGE 8
428 /*void clr79disp()
429 { unsigned char i;
430 cmd8279 = 0xd1;//清除8279
431 delay(2);
432 cmd8279 = 0x00;//左边输入 八位字符显示,外部译码键扫描方式,双键互锁
433 delay(2);
434 cmd8279 = 0x2A;//10分频,(ALE = 1/6 OSC)
435 delay(2);
436 cmd8279 = 0x60;//读8279RAM不自动加1
437 delay(2);
438 cmd8279 = 0x90;//写显示RAM自动加1
439 delay(2);
440 for(i=0;i<8;i++)
441 dat8279 = 0x00;//缓冲区内容送数码管显示
442
443 }
444 */
445 //*************主程序*************
446
447 void main ()
448 {
449 1 init_lcd (); //初始化LCD
450 1 // BUZ = 0;//关蜂鸣器
451 1 /* clr79disp();//关数码管显示
452 1 P0 = 0xff;
453 1 P2=0x00;
454 1 ;
455 1 P2=0x08; //关跑马灯*/
456 1 while (1)//主循环
457 1 {
458 2 wrlattice (0x00,0x00);
459 2 disphz (tab1);
460 2 delay1 (600);
461 2 wrlattice (0xff,0x00);
462 2 delay1 (600);
463 2 wrlattice (0x00,0x00);
464 2 dispzf (tab2);
465 2 delay1 (600);
466 2 wrlattice (0x33,0x33);
467 2 delay1 (600);
468 2 disptu (tab3);
469 2 delay1 (600);
470 2 }
471 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1065 ----
CONSTANT SIZE = 1320 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 22
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 + -