📄 cgm12864b.lst
字号:
322 3 LCD_WriteCommand1(0xB8+y+i/16);
323 3 LCD_WriteCommand1(0x40+x+i%16);
324 3 LCD_WriteData1(Dot[i]);
325 3 }
326 2 else
327 2 {
328 3 LCD_WriteCommand2(0xB8+y+i/16);
329 3 LCD_WriteCommand2(0x40+x-64+i%16);
330 3 LCD_WriteData2(Dot[i]);
331 3 }
332 2 }
333 1 }
334
335 void InitLCD(void) //初始化LCD
336 {
337 1 char i,j;
338 1 LCD_RST=0;
339 1 Delay1ms(1);
340 1 LCD_RST=1;
341 1
342 1 LCD_WriteCommand1(0xc0);
343 1 LCD_WriteCommand2(0xc0);
344 1 LCD_WriteCommand1(0x3f); //开显示
345 1 LCD_WriteCommand2(0x3f);
346 1
347 1 for (j=0;j<8;j++) //清屏
348 1 {
349 2 LCD_WriteCommand1(0xB8+j); //清左半屏
350 2 LCD_WriteCommand1(0x40);
351 2 for (i=0;i<64;i++)
352 2 LCD_WriteData1(0x00);
353 2
354 2 LCD_WriteCommand2(0xB8+j); //清右半屏
355 2 LCD_WriteCommand2(0x40);
356 2 for (i=0;i<64;i++)
357 2 LCD_WriteData2(0x00);
358 2 }
359 1 }
360
361 void DispBmp(char *buf) //显示一幅位图
362 {
363 1 int i,j;
364 1 for (j=0;j<8;j++) //显示位图
365 1 {
C51 COMPILER V7.20 CGM12864B 10/18/2005 11:13:45 PAGE 7
366 2 LCD_WriteCommand1(0xB8+j);
367 2 LCD_WriteCommand1(0x40);
368 2 for (i=0;i<64;i++)
369 2 LCD_WriteData1(buf[(j*2)*64+i]);
370 2 LCD_WriteCommand2(0xB8+j);
371 2 LCD_WriteCommand2(0x40);
372 2 for (i=0;i<64;i++)
373 2 LCD_WriteData2(buf[(j*2+1)*64+i]);
374 2 }
375 1 }
376
377 void SYSCLK_Init (void)
378 {
379 1 int i; // delay counter
380 1 OSCXCN = 0x67; // start external oscillator with
381 1 // 18.432MHz crystal
382 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
383 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
384 1 OSCICN = 0x88; // select external oscillator as SYSCLK
385 1 // source and enable missing clock
386 1 // detector
387 1 }
388
389 void PORT_Init (void)
390 {
391 1 XBR2 = 0x40; // Enable crossbar and weak pull-ups
392 1 }
393
394
395 unsigned char Count1ms;
396 void Timer0_Init (void)
397 {
398 1 CKCON|=0x8;
399 1 TMOD|=0x1; //16Bit
400 1 Count1ms=10;
401 1 TR0 = 0; // STOP Timer0
402 1 TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms
403 1 TL0 = -SYSCLK/1000;
404 1 TR0 = 1; // START Timer0
405 1 IE|= 0x2;
406 1 }
407
408 void Timer0_ISR (void) interrupt 1 //1ms
409 {
410 1 TH0 = (-SYSCLK/1000) >> 8;
411 1 TL0 = -SYSCLK/1000;
412 1 if (Count1ms) Count1ms--;
413 1 }
414
415 void Delay1ms(unsigned char T)
416 {
417 1 Count1ms=T;
418 1 while (Count1ms);
419 1 }
420
421 void Delay1s(unsigned char T)
422 {
423 1 while (T)
424 1 {
425 2 Delay1ms(200);
426 2 Delay1ms(200);
427 2 Delay1ms(200);
C51 COMPILER V7.20 CGM12864B 10/18/2005 11:13:45 PAGE 8
428 2 Delay1ms(200);
429 2 Delay1ms(200);
430 2 T--;
431 2 }
432 1 }
433
434 void TestLCD(void)
435 {
436 1 char i;
437 1 InitLCD();
438 1 DispBmp(screen);
439 1 for (i=0;i<64;i++)
440 1 {
441 2 Delay1ms(50);
442 2 LCD_WriteCommand1(0xc0+i%64); //设置起始行,实现向上滚动
443 2 LCD_WriteCommand2(0xc0+i%64);
444 2 }
445 1 Delay1s(3);
446 1 for (;;)
447 1 {
448 2 DispBmp(screen1);
449 2 Delay1s(5);
450 2 DispBmp(screen2);
451 2 Delay1s(6);
452 2 InitLCD();
453 2 LCD_WriteHZ(2,1,Han); //显示16*16点阵汉字'汉'
454 2 Delay1ms(100);
455 2 LCD_WriteHZ(60,3,Zi); //显示16*16点阵汉字'字'
456 2 Delay1s(5);
457 2 }
458 1 }
459
460 void main (void)
461 {
462 1 WDTCN = 0xde;
463 1 WDTCN = 0xad; //关看门狗
464 1 SYSCLK_Init (); //初始化时钟
465 1 Timer0_Init(); //初始化定时器
466 1 PORT_Init (); //初始化IO口
467 1 EA=1; //开中断
468 1 TestLCD();
469 1 }
470
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 744 ----
CONSTANT SIZE = 3136 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 8
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 + -