?? 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 + -