📄 lcd_disp.lst
字号:
294 1 }
295
296 /*--------------------------------------------------
297 *函数名称:Sys_Star_Set
298 *功 能:系统开始设定
299 *参 数:无
300 *返 回:无
301 ---------------------------------------------------*/
302 void Sys_Star_Set(void)
303 {
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 6
304 1
305 1
306 1 LCD_Init(); //液晶初始化
307 1 Disp_Buff_Init(); //系统背景初始化
308 1 Disp_Update();
309 1 Scr_Disp_Init(); //屏幕显示初始化
310 1 Timer0_Init(); //定时器初始化
311 1 Read_Sel_Figure(Fig_Type,Figure_Date); //读取形状
312 1 Move_Down_Delay=(5-speed)*10; //赋值下落延时寄存器
313 1 }
314 /*--------------------------------------------------
315 *函数名称:Disp_Buff_Init
316 *功 能:缓存初始化
317 *参 数:无
318 *返 回:无
319 ---------------------------------------------------*/
320 void Disp_Buff_Init(void)
321 {
322 1 uchar i;
323 1 for(i=0;i<32;i++)
324 1 {
325 2 Disp_Buff[i]=0x00000000;
326 2 }
327 1
328 1 }
329 /*--------------------------------------------------
330 *函数名称:Disp_Num
331 *功 能:显示总分及速度
332 *参 数:data 总分及速度值 disp_sel 显示选择 1 分数 0速度
333 *返 回:无
334 ---------------------------------------------------*/
335 void Disp_Num(uchar dat ,uchar disp_sel)
336 {
337 1 uchar a,b,c; //分别存储个位/百位/千位
338 1 c=dat/100;
339 1 b=(dat%100)/10;
340 1 a=(dat%100)%10;
341 1 if(disp_sel)
342 1 {
343 2 Write_One_Byte(100,20,c);
344 2 Write_One_Byte(108,20,b);
345 2 Write_One_Byte(116,20,a);
346 2 }
347 1 else
348 1 {
349 2 Write_One_Byte(108,40,a);
350 2 }
351 1
352 1
353 1
354 1 }
355
356
357
358 /*--------------------------------------------------
359 *函数名称:Scr_Disp_Init
360 *功 能:屏幕显现初始化
361 *参 数:无
362 *返 回:无
363 ---------------------------------------------------*/
364 void Scr_Disp_Init(void)
365 {
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 7
366 1 uchar i;
367 1 for(i=0;i<64;i++)
368 1 Write_OneDot(64,i,1);
369 1 for(i=0;i<64;i++)
370 1 Write_OneDot(127,i,1);
371 1 for(i=64;i<128;i++)
372 1 Write_OneDot(i,0,1);
373 1 for(i=64;i<128;i++)
374 1 Write_OneDot(i,63,1);
375 1 Write_One_Word(65,20,fen);
376 1 Write_One_Word(81,20,shu);
377 1 Disp_Num(SUM,1);
378 1
379 1 Write_One_Word(65,40,su);
380 1 Write_One_Word(81,40,du);
381 1 Disp_Num(speed,0);
382 1 }
383
384 /*--------------------------------------------------
385 *函数名称:Disp_update
386 *功 能:将显示缓存在液晶屏上显示
387 *参 数:无
388 *返 回:无
389 ---------------------------------------------------*/
390 void Disp_Update(void)
391 {
392 1 uchar i,j;
393 1 ulong temp;
394 1 for(i=0;i<32;i++)
395 1 {
396 2 temp=Disp_Buff[i];
397 2 for(j=0;j<32;j++)
398 2 {
399 3 if(temp&0x01)
400 3 Write_OneLargeDot(j+10,i,1);
401 3 else
402 3 Write_OneLargeDot(j+10,i,0);
403 3 temp=temp>>1;
404 3 }
405 2 }
406 1 }
407 /*--------------------------------------------------
408 *函数名称:Update_Disp_Buff
409 *功 能:缓存刷新
410 *参 数:*P_figure 指向方块内容
411 *返 回:无
412 ---------------------------------------------------*/
413 void Update_Disp_Buff(uchar *p_figuer)
414 {
415 1 uchar temp,i,j;
416 1 ulong temp1;
417 1 for(i=0;i<4;i++)
418 1 {
419 2 if((Y_Coor-i)<32)
420 2 {
421 3 temp=*p_figuer; //暂存方块数据
422 3 for(j=0;j<4;j++)
423 3 {
424 4 temp1=0x01;
425 4 if((X_Coor+j-10)<42) //坐标范围外的数据舍弃
426 4 {
427 5 if(temp&0x01) //检测最低位状态
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 8
428 5 {
429 6 temp1=temp1<<(X_Coor+j-10);
430 6 Disp_Buff[Y_Coor-i]=Disp_Buff[Y_Coor-i]|temp1; //将相对应的位置一
431 6 }
432 5 }
433 4 temp=temp>>1;
434 4 }
435 3 }
436 2 p_figuer++;
437 2 }
438 1 }
439 /*--------------------------------------------------
440 *函数名称:Check_Interfc
441 *功 能:检测两个缓存区域是否存在干涉
442 *参 数:X 横坐标 Y 纵坐标
443 *p_figuer 指向方块的内容
444
445 *返 回:1 存在干涉
446 0 不准在干涉
447 ---------------------------------------------------*/
448 uchar Check_Interfc(uchar X,uchar Y,uchar *p_figuer)
449 {
450 1 uchar temp,i,j,reval;
451 1 reval=0;
452 1 if(X>9)
453 1 i=X-10;
454 1 else
455 1 i=0;
456 1 for(j=0;j<4;j++)
457 1 {
458 2 if((Y-j)<32)
459 2 {
460 3 temp=((Disp_Buff[Y-j]>>i)&0x0f);
461 3 switch (X)
462 3 {
463 4 case 9 : temp=((temp<<1)|0x01); break;
464 4 case 8 : temp=((temp<<2)|0x03); break;
465 4 case 7 : temp=((temp<<3)|0x07); break;
466 4 case 39: temp=(temp|0x08); break;
467 4 case 40: temp=(temp|0x0c); break;
468 4 case 41: temp=(temp|0x0e); break;
469 4 }
470 3 }
471 2 else if(((Y-j)>31)&&((Y-j)<35))
472 2 temp=0x0f;
473 2 else temp=0x00;
474 2
475 2 if(*p_figuer&temp)
476 2 reval=1;
477 2 p_figuer++;
478 2 }
479 1 return reval;
480 1 }
481
482 /*--------------------------------------------------
483 *函数名称:Clr_figure
484 *功 能:清除当前方块
485 *参 数:*p_figure 方块数据
486 X 横坐标
487 Y 纵坐标
488 *返 回:无
489 ---------------------------------------------------*/
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 9
490 void Clr_Figure(uchar X,uchar Y,uchar *p)
491 {
492 1 uchar i,j,temp;
493 1 for(i=0;i<4;i++)
494 1 {
495 2 temp=*p;
496 2 for(j=0;j<4;j++)
497 2 {
498 3 if(temp&0x01)
499 3 Write_OneLargeDot( X+j, Y-i, 0);
500 3 temp=temp>>1;
501 3 }
502 2 p++;
503 2 }
504 1
505 1 }
506 /*--------------------------------------------------
507 *函数名称:Rand
508 *功 能:产生一个1-11的随机数
509 *参 数:无
510 *返 回:无
511 ---------------------------------------------------*/
512 uchar Ran(void)
513 {
514 1 srand(TL0);
515 1 return (rand()%11+1);
516 1 }
517
518 /*--------------------------------------------------
519 *函数名称:Exchange
520 *功 能:一个数组的内容赋值给另外一个数组
521 *参 数:*p1 源数组
522 *p2 目标数组
523 *返 回:无
524 ---------------------------------------------------*/
525 void Exchange(uchar *p1,uchar *p2)
526 {
527 1 uchar i;
528 1 for(i=0;i<4;i++)
529 1 {
530 2 *p2=*p1;
531 2 p2++;
532 2 p1++;
533 2 }
534 1 }
535
536 /*--------------------------------------------------
537 *函数名称:Read_Figure
538 *功 能:从ROM中读取方块,存放到Figure_Date[]中
539 *参 数:*p1 *p2
540 *返 回:无
541 ---------------------------------------------------*/
542 void Read_Figure(uchar code *p1,uchar *p2)
543 {
544 1 uchar i;
545 1 for(i=0;i<4;i++)
546 1 {
547 2 *p2=*p1;
548 2 p1++;
549 2 p2++;
550 2 }
551 1 }
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 10
552 /*--------------------------------------------------
553 *函数名称:Read_Sel_Figure
554 *功 能:从ROM中读取选定的方块,存放到Figure_Date[]中
555 *参 数:type 方块的形状代码(1-11)
556 *p 存放读取内容的数组
557 *返 回:无
558 ---------------------------------------------------*/
559 void Read_Sel_Figure(uchar type,uchar *p)
560 {
561 1 switch (type)
562 1 {
563 2 case 1:Read_Figure(a, p); break; // 田
564 2
565 2 case 2:Read_Figure(b, p); break; // |
566 2 case 3:Read_Figure(c, p); break; //一
567 2
568 2 case 4:Read_Figure(d, p); break; // 一I一
569 2 case 5:Read_Figure(e, p); break;
570 2 case 6:Read_Figure(f, p); break;
571 2 case 7:Read_Figure(g, p); break;
572 2
573 2 case 8:Read_Figure(h, p); break;
574 2 case 9:Read_Figure(i, p); break;
575 2
576 2 case 10:Read_Figure(j, p); break;
577 2 case 11:Read_Figure(k, p); break;
578 2 }
579 1 }
580 /*--------------------------------------------------
581 *函数名称:Trans
582 *功 能:方块变形程序
583 *参 数:type 方块当前形状代码
584 *返 回:无
585 ---------------------------------------------------*/
586 void Trans(uchar type)
587 {
588 1 if(Y_Coor>1)
589 1 {
590 2 switch (type)
591 2 {
592 3 case 1: ; break;
593 3 case 2:{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -