久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 酷!用51單片機在16×16LED 點陣上玩俄羅斯方塊游戲 程序+PCB+電路圖 [打印本頁]

作者: zerozeroseven    時間: 2009-9-8 20:14
標(biāo)題: 酷!用51單片機在16×16LED 點陣上玩俄羅斯方塊游戲 程序+PCB+電路圖
很酷的16×16LED俄羅斯方塊游戲制作資料分享給51黑電子論壇的朋友:
pads畫的圖:


所有程序源碼包含工程文件: 源程序.rar (59.23 KB, 下載次數(shù): 975)
PADS2005畫的電路圖以及pcb文件下載: pads2005畫的原理圖和PCB布線圖.7z (76.44 KB, 下載次數(shù): 1135)

以下是視頻效果:

視頻:http://v.youku.com/v_show/id_XMTAxNjY4ODY4.html
作者: linyean    時間: 2009-9-9 11:09
good,給大家省點黑幣 樓主的源碼如下:
  1. /*********************************************************************************************************
  2. **                                             俄羅斯方塊
  3. **                                    基于8位51系列MCU(SST89E516)
  4. **

  5. **                                           All Rights Reserved
  6. **
  7. **                                                  V0.00
  8. **
  9. **
  10. **--------------文件信息--------------------------------------------------------------------------------
  11. **文   件   名: ELS.c
  12. **最后修改日期: 2009年5月20日
  13. **描       述: 基于51單片機的俄羅斯方塊游戲   顯示屏幕為16*16 雙色高亮點陣模塊
  14. **
  15. **--------------歷史版本信息----------------------------------------------------------------------------
  16. ** 修改人: 趙同陽
  17. ** 版  本: V0.00
  18. ** 日 期:
  19. ** 描 述: 原始版本
  20. **------------------------------------------------------------------------------------------------------
  21. **--------------當(dāng)前版本修訂------------------------------------------------------------------------------
  22. ** 修改人:
  23. ** 日 期:
  24. ** 描 述:
  25. **
  26. **------------------------------------------------------------------------------------------------------
  27. ********************************************************************************************************/


  28. #include"reg52.h"                 //包含51 特殊功能寄存器資源變量聲明文件
  29. #include <intrins.h>                 //KEILC51 自帶的左右移庫函數(shù)
  30. #include <stdlib.h>                         //包含  KEILC51 的隨機數(shù)產(chǎn)生函數(shù)
  31. #include"font.h"

  32. #define uchar unsigned char         // 將常用的數(shù)據(jù)類型 縮寫
  33. #define uint  unsigned int         // 將常用的數(shù)據(jù)類型 縮寫

  34. #define H_H   P2                            // 定義顯示屏的高8行選擇位
  35. #define H_L   P0                         // 定義顯示屏的低8行選擇位

  36. sbit SUOCUN = P3^3;                         // 定義移位寄存器74HC595的鎖存端口
  37. sbit CLOCK = P3^2;                         // 定義移位寄存器74HC595的時鐘端口
  38. sbit DI = P3^5;                                 // 定義移位寄存器74HC595的數(shù)據(jù)端口
  39. sbit OE = P3^4;                                 // 定義移位寄存器74HC595的使能端口

  40. uchar idata  disp_buff[32];         // 定義顯示直接送往74HC595 的顯示緩存

  41. uchar idata  disp_buff1[32]; // 定義顯示直接送往74HC595 的顯示緩存?zhèn)浞?因為處理顯示緩存在中斷中完成,而緩存中數(shù)據(jù)的處理

  42.                                                          // 在前臺,這樣顯示會有點錯亂,所以做了備份.這樣在加工顯存中數(shù)據(jù)的時候,送備份中的數(shù)據(jù)到顯示屏

  43. uchar rec_line[16];                         // 記錄堆滿一行的行編號數(shù)組

  44. uchar  cur_mod=0;                         //  當(dāng)前形狀編號

  45. uchar color=0;

  46. uchar  cur_mod_sty=0;                 //  當(dāng)前形狀變化的四種狀態(tài)編號

  47. uchar time_down=0;                         //  設(shè)置自動下降標(biāo)志,由定時器觸發(fā)

  48. uint time_count=0;                     //  記錄中斷次數(shù),為了得到更長的定時時間

  49. uchar need_redraw_temp=0;         //  是否需要刷新顯存中的數(shù)據(jù),太頻繁刷新會降低系統(tǒng)性能,如在程序中需刷新,請置此標(biāo)志

  50. uchar need_save2_loc=0;                 //  當(dāng)前方塊因為無法下降,而停下來.這時候需將 "顯示陣列"數(shù)字的數(shù)據(jù)dis_pos[20][16] 保存 (顯示窗內(nèi)所有方塊的位置)到"記錄數(shù)組陣列"LOC_pos[20][16]

  51. uchar done_line_num=0;                 //  記錄本次方塊下降結(jié)束,成就多少行滿

  52. char els_cur_x=1;                         //  記錄當(dāng)前方塊的X位置

  53. char els_cur_y=3;                         //  記錄當(dāng)前方塊的Y位置

  54. uchar cur_key=0;                         //  記錄本次按鍵掃描得到的按鍵號

  55. uchar old_key=0;                         //  記錄上次按鍵掃描得到的按鍵號

  56. uchar key_time=0;                         //  記錄按鍵按下去多長時間

  57. uchar char_move_time=0;      //


  58. #define game     1
  59. #define logo     2

  60. uchar  sys_st =logo;

  61. #define max_long_pre 50                 //  定義按鍵按下去多少個循環(huán)監(jiān)測周期才算"常按",根據(jù)實際測量一次按鍵掃描15MS執(zhí)行一次,那這里就50*15MS 執(zhí)行第二
  62.                              //  功能比如  下降按鍵  短按為下降一格 如果常按 就觸發(fā)迅速下降功能

  63. uchar  data  temp_els[16]=         //  方塊的固定形狀是保存到ROM區(qū)域的(els_sty[6][4][4][4]),但是為了加工的方便,將固定ROM 內(nèi)的基本形狀取出放到本數(shù)組
  64. {
  65.    0xff,0xff,0xff,0xff,

  66.    0xff,0xff,0xff,0xff,

  67.    0xff,0xff,0xff,0xff,

  68.    0xff,0xff,0xff,0xff,
  69. };

  70. uchar  data  temp_test[16]=              //在當(dāng)前形狀變形(旋轉(zhuǎn))前要先判斷當(dāng)前方塊如果變成下一個形狀能否造成碰觸
  71. {
  72.    0xff,0xff,0xff,0xff,

  73.    0xff,0xff,0xff,0xff,

  74.    0xff,0xff,0xff,0xff,

  75.    0xff,0xff,0xff,0xff,
  76. };

  77. uchar xdata font_1[32]=
  78. {0x00,0x01};

  79. uchar xdata font_2[32]=
  80. {0x00,0x01};

  81. uchar code  temp_els_empty[16]=          //定義個4*4 的空方塊,主要是為了清除上次方塊動作留下的痕跡
  82. {
  83.    0x00,0x00,0x00,0x00,

  84.    0x00,0x00,0x00,0x00,

  85.    0x00,0x00,0x00,0x00,

  86.    0x00,0x00,0x00,0x00,
  87. };

  88. uchar data_led[4]={0xff,0xff,0xff,0xff}; //顯示在定時器中斷中調(diào)用,每次只顯示一行,一行中是16位(2個字節(jié))本屏幕時雙色所以定義四個字節(jié)

  89. uchar  xdata  loc_pos[20][16]=                 //定義記錄每個已經(jīng)固定點的位置                           為了簡化計算,每個點用一個字節(jié)代替,可以減少運算時間和復(fù)雜性
  90. {
  91.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  92.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  93.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  94.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  95.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  96.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  97.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  98.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  99.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  100.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  101.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  102.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  103.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  104.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  105.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  106.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  107.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  108.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  109.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  110.    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

  111. };

  112. uchar  xdata  dis_pos[20][16]=
  113.                                //顯示屏幕要刷新的數(shù)據(jù)  所對應(yīng)的陣列,為了簡化計算,每個點用一個字節(jié)代替,可以減少運算時間和復(fù)雜性
  114.                                //但是送到屏幕上的數(shù)據(jù)是由這些數(shù)據(jù)轉(zhuǎn)過來的,最終轉(zhuǎn)成每個點對應(yīng)一位.由數(shù)組disp_buff[32]接收
  115. {
  116.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  117.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  118.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  119.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  120.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  121.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  122.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  123.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  124.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  125.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  126.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  127.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  128.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  129.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  130.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  131.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  132.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  133.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  134.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  135.    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

  136. };

  137. uchar  code  dis_ini[20][16]=        //初始化固定點的記錄情況,每次游戲開始前調(diào)用
  138. {
  139.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  140.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  141.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  142.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  143.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  144.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  145.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  146.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  147.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  148.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  149.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  150.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  151.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  152.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  153.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  154.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  155.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  156.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  157.    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

  158.    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

  159. };

  160.                                   //種 形 行        列
  161.                                  //類 狀 號        號
  162. uchar code els_sty[6][4][4][4]=                   //定義游戲中用到的方塊形狀種類  本種類的四種角度  每種方塊由4*4點組成
  163. {                                                                           //可以輕易加新形狀,如果自己加新的形狀,要靠X軸和Y軸!!
  164. {
  165.   {
  166.    {0xff,0x00,0x00,0x00},

  167.    {0xff,0x00,0x00,0x00},

  168.    {0xff,0x00,0x00,0x00},

  169.    {0xff,0x00,0x00,0x00},
  170.   },

  171.   {
  172.    {0x00,0x00,0x00,0x00},

  173.    {0x00,0x00,0x00,0x00},

  174.    {0x00,0x00,0x00,0x00},

  175.    {0xff,0xff,0xff,0xff},
  176.   },
  177.   {
  178.    {0xff,0x00,0x00,0x00},

  179.    {0xff,0x00,0x00,0x00},

  180.    {0xff,0x00,0x00,0x00},
  181.          
  182.    {0xff,0x00,0x00,0x00},
  183.   },

  184.   {
  185.    {0x00,0x00,0x00,0x00},

  186.    {0x00,0x00,0x00,0x00},

  187.    {0x00,0x00,0x00,0x00},

  188.    {0xff,0xff,0xff,0xff},
  189.   },
  190. },
  191. //////////////////////////////////////////////////////////以上為形狀1所對應(yīng)的四種狀態(tài)///////////////////////////////////////
  192. {
  193.   {
  194.    {0x00,0x00,0x00,0x00},

  195.    {0x00,0xff,0x00,0x00},

  196.    {0x00,0xff,0x00,0x00},

  197.    {0xff,0xff,0xff,0x00},
  198.   },

  199.   {
  200.    {0x00,0x00,0x00,0x00},

  201.    {0xff,0x00,0x00,0x00},

  202.    {0xff,0xff,0xff,0x00},

  203.    {0xff,0x00,0x00,0x00},
  204.   },
  205.   {
  206.    {0x00,0x00,0x00,0x00},

  207.    {0xff,0xff,0xff,0x00},

  208.    {0x00,0xff,0x00,0x00},

  209.    {0x00,0xff,0x00,0x00},
  210.   },

  211.   {
  212.    {0x00,0x00,0x00,0x00},

  213.    {0x00,0x00,0xff,0x00},

  214.    {0xff,0xff,0xff,0x00},

  215.    {0x00,0x00,0xff,0x00},
  216.   },
  217. },
  218. //////////////////////////////////////////////////////////以上為形狀2所對應(yīng)的四種狀態(tài)///////////////////////////////////////
  219. {
  220.   {
  221.    {0x00,0x00,0x00,0x00},

  222.    {0x00,0x00,0x00,0x00},

  223.    {0xff,0xff,0x00,0x00},

  224.    {0xff,0xff,0x00,0x00},
  225.   },

  226.   {
  227.    {0x00,0x00,0x00,0x00},

  228.    {0x00,0x00,0x00,0x00},

  229.    {0xff,0xff,0x00,0x00},

  230.    {0xff,0xff,0x00,0x00},
  231.   },
  232.   {
  233.    {0x00,0x00,0x00,0x00},

  234.    {0x00,0x00,0x00,0x00},

  235.    {0xff,0xff,0x00,0x00},

  236.    {0xff,0xff,0x00,0x00},
  237.   },

  238.   {
  239.    {0x00,0x00,0x00,0x00},

  240.    {0x00,0x00,0x00,0x00},

  241.    {0xff,0xff,0x00,0x00},

  242.    {0xff,0xff,0x00,0x00},
  243.   },
  244. },
  245. //////////////////////////////////////////////////////////以上為形狀3所對應(yīng)的四種狀態(tài)///////////////////////////////////////
  246. {
  247.   {
  248.    {0x00,0x00,0x00,0x00},

  249.    {0x00,0x00,0x00,0x00},

  250.    {0x00,0xff,0x00,0x00},

  251.    {0xff,0xff,0xff,0x00},
  252.   },

  253.   {
  254.    {0x00,0x00,0x00,0x00},

  255.    {0xff,0x00,0x00,0x00},

  256.    {0xff,0xff,0x00,0x00},

  257.    {0xff,0x00,0x00,0x00},
  258.   },
  259.   {
  260.    {0x00,0x00,0x00,0x00},

  261.    {0x00,0x00,0x00,0x00},

  262.    {0xff,0xff,0xff,0x00},

  263.    {0x00,0xff,0x00,0x00},
  264.   },

  265.   {
  266.    {0x00,0x00,0x00,0x00},

  267.    {0x00,0xff,0x00,0x00},

  268.    {0xff,0xff,0x00,0x00},

  269.    {0x00,0xff,0x00,0x00},
  270.   },
  271. },
  272. //////////////////////////////////////////////////////////以上為形狀4所對應(yīng)的四種狀態(tài)///////////////////////////////////////
  273. {
  274.   {
  275.    {0x00,0x00,0x00,0x00},

  276.    {0xff,0x00,0x00,0x00},

  277.    {0xff,0xff,0xff,0x00},

  278.    {0x00,0x00,0xff,0x00},
  279.   },

  280.   {
  281.    {0x00,0x00,0x00,0x00},

  282.    {0x00,0xff,0xff,0x00},

  283.    {0x00,0xff,0x00,0x00},

  284.    {0xff,0xff,0x00,0x00},
  285.   },
  286.   {
  287.    {0x00,0x00,0x00,0x00},

  288.    {0xff,0x00,0x00,0x00},

  289.    {0xff,0xff,0xff,0x00},

  290.    {0x00,0x00,0xff,0x00},
  291.   },

  292.   {
  293.    {0x00,0x00,0x00,0x00},

  294.    {0x00,0xff,0xff,0x00},

  295.    {0x00,0xff,0x00,0x00},

  296.    {0xff,0xff,0x00,0x00},
  297.   },
  298. },
  299.   //////////////////////////////////////////////////////////以上為形狀5所對應(yīng)的四種狀態(tài)///////////////////////////////////////
  300. };

  301. //自己做的漢子庫

  302. uchar code zhi[] =          // 數(shù)據(jù)表
  303. {
  304.       0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,
  305.       0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xFC,
  306.       0x00,0x00,0x02,0x00,0x11,0x80,0x50,0x84,
  307.       0x50,0x12,0x90,0x12,0x0F,0xF0,0x00,0x00,
  308. };

  309. uchar code bo[] =          // 數(shù)據(jù)表
  310. {

  311.       0x10,0x50,0x10,0x48,0x17,0xFC,0x10,0x40,
  312.       0xFB,0xF8,0x12,0x48,0x13,0xF8,0x1A,0x48,
  313.       0x33,0xF8,0xD2,0x48,0x10,0x10,0x1F,0xFE,
  314.       0x12,0x10,0x11,0x10,0x51,0x50,0x20,0x20,

  315. };
  316. uchar code dian[] =          // 數(shù)據(jù)表
  317. {

  318.       0x1F,0xF0,0x41,0x04,0x7F,0xFE,0x81,0x02,
  319.       0x3D,0x74,0x01,0x00,0x3D,0x70,0x01,0x00,
  320.       0x3F,0xF8,0x21,0x08,0x3F,0xF8,0x21,0x08,
  321.       0x3F,0xF8,0x01,0x02,0x01,0x02,0x01,0xFE,

  322. };
  323. uchar code zi[] =          // 數(shù)據(jù)表
  324. {
  325.       0x00,0x10,0x3F,0xF8,0x00,0x10,0x00,0x20,
  326.       0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
  327.       0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  328.       0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
  329. };

  330. void font_round()
  331. {
  332.    uchar a=0,b=0;
  333.    for(a=0;a<16;a++)
  334.    {
  335.      font_1[a*2]<<=1;
  336.      if(font_1[a*2+1]&0x80)
  337.             font_1[a*2]+=1;

  338.          font_1[a*2+1]<<=1;
  339.          if(font_2[a*2]&0x80)
  340.            font_1[a*2+1]+=1;

  341.          font_2[a*2]<<=1;
  342.          if(font_2[a*2+1]&0x80)
  343.            font_2[a*2]+=1;
  344.          
  345.          font_2[a*2+1]<<=1;
  346.    }

  347.    for(a=0;a<32;a++)
  348.    {
  349.     disp_buff[a]=font_1[a];
  350.    }
  351. }

  352. void send_595(uchar dat)  //向595發(fā)一個字節(jié)數(shù)據(jù)
  353. {
  354.   uchar a=0;
  355.   for(a=0;a<8;a++)                  //將一個字節(jié)數(shù)據(jù)分8次依次移入595
  356.   {         
  357.     CLOCK=0;
  358.     if(dat&0x01)
  359.         DI=1;
  360.         else
  361.         DI=0;
  362.         dat=dat>>1;
  363.         CLOCK=1;
  364.   }

  365. }

  366. void ini_int(void)                  //初始化中斷和定時系統(tǒng),本程序只用到了定時器1  
  367. {
  368.                         // D7    D6  D5 D4              D3    D2  D1 D0
  369.   TMOD=0X11;//GATA  C/T  M1 M0         -------   GATA  C/T  M1 M0          定時器工作模式設(shè)置為 GATA=0關(guān)閉門控使能  C/T=0  M1=0   M0=1,選擇時鐘源來自外部晶體12分頻.

  370.   ET0=0;    //打開外部中斷0的使能開關(guān)
  371.   ET1=1;        //打開外部中斷1的使能開關(guān)

  372.   PT0=0;    //設(shè)置外部中斷0的中斷優(yōu)先等級為0
  373.   PT1=0;    //設(shè)置外部中斷1的中斷優(yōu)先等級為0

  374.   TH0=63;        //設(shè)置定時器0的高8位初始化值
  375.   TL0=0xcd;        //設(shè)置定時器0的低8位初始化值 精確10毫秒溢出

  376.   TH1=0XE0;        //設(shè)置定時器1的高8位初始化值
  377.   TL1=0X00;        //設(shè)置定時器1的低8位初始化值  大約3MS 左右溢出


  378.   TR0=0;        //讓定時器0開始工作
  379.   TR1=1;        //讓定時器1開始工作

  380.   EA =1;        //打開中斷允許總開關(guān)
  381. }


  382. void send_data_led(uchar *p)   //將一行的數(shù)據(jù)送出到595  包括綠色和紅色
  383. {
  384.    uchar a=0;
  385.    send_595(*(p+3));
  386.    send_595(*(p+2));
  387.    send_595(*(p+1));
  388.    send_595(*p);
  389. }

  390. uint rond_k=0x8000;                           //因為采用動態(tài)掃描,每次只能讓一行亮,這里控制行的是P2 口和P0 口,兩個字節(jié).聲明個兩字節(jié)的變量,依次循環(huán)在每位上


  391. void  dis_pos2dis_buff()           //將顯示陣列的數(shù)據(jù)(每點對應(yīng)一個字節(jié)對應(yīng)每點對應(yīng)一位)
  392. {
  393.    uchar a=0;
  394.    uchar b=0;
  395.    uchar c=0;
  396.    uchar *t=dis_pos;
  397.    t+=64;
  398.    for(c=0;c<32;c++)
  399.    {
  400.     for(a=0;a<8;a++)
  401.     {
  402.      if(*t)                                                                  //將dis_pos的數(shù)據(jù)(每個點對應(yīng)一字節(jié))轉(zhuǎn)成(每點一個位)disp_buff
  403.           disp_buff1[b]=(disp_buff1[b]<<1)+1;
  404.          else
  405.           disp_buff1[b]=(disp_buff1[b]<<1);
  406.           t++;
  407.     }
  408.     b++;
  409.    }                                                                        //對臨時緩沖操作
  410.    for(c=0;c<32;c++)
  411.    {
  412.      disp_buff[c]=disp_buff1[c]        ;            //將臨時緩沖加到32字節(jié)的刷新緩沖
  413.    }
  414. }

  415. void add_els_temp2dis_pos(uchar *p,char x_start,char y_start) //將當(dāng)前俄羅斯顯示到窗口的指定位置
  416. {
  417.    uchar aa=0,bb=0;
  418.    for(;(y_start>=0)&&(aa<4);aa++,y_start--)
  419.    {
  420.     for(bb=0;bb<4;bb++)
  421.         {
  422.            if(p[(3-aa)*4+bb])
  423.             dis_pos[y_start][x_start+bb]=0xff;
  424.         }
  425.    }
  426. }

  427. void save_dis2loc()            //將顯示陣列保存 到記錄陣列                                                            
  428. {
  429.    uchar a,b;
  430.    for(a=0;a<20;a++)
  431.     for(b=0;b<16;b++)
  432.           loc_pos[a][b]=dis_pos[a][b];
  433. }

  434. uchar test_down(uchar *p)          //測試是否有下降的可能
  435. {
  436.    uchar a=0,b=0;
  437.    for(a=0;a<4;a++)
  438.     for(b=0;b<4;b++)
  439.      if(p[a*4+b])
  440.       if(loc_pos[els_cur_y+1-(3-a)][els_cur_x+b])
  441.          return 0xff;
  442.    return 0;
  443. }
  444. uchar test_left(uchar *p)         //測試是否有左移的可能
  445. {
  446.    uchar a=0,b=0;
  447.    for(a=0;a<4;a++)
  448.     for(b=0;b<4;b++)
  449.      if(p[a*4+b])
  450.       if(loc_pos[els_cur_y-(3-a)][els_cur_x+b-1])
  451.          return 0xff;
  452.    return 0;
  453. }
  454. uchar test_right(uchar *p)        //測試是否能右移可能
  455. {
  456.    uchar a=0,b=0;
  457.    for(a=0;a<4;a++)
  458.     for(b=0;b<4;b++)
  459.      if(p[a*4+b])
  460.       if(loc_pos[els_cur_y-(3-a)][els_cur_x+b+1])
  461.          return 0xff;
  462.    return 0;
  463. }
  464. uchar find_line(uchar *p)   //每次下降結(jié)束就監(jiān)測是否湊夠一行,是否滿,以及記錄湊成了幾行,和湊滿一行的行號
  465. {
  466.   uchar a=0,b=0,c=0;
  467.   for(a=0;a<19;a++)
  468.   {
  469.     c=0;
  470.     for(b=0;b<16;b++)
  471.          if(loc_pos[a][b])
  472.            c++;
  473.         if(c==16)
  474.          {
  475.           *p=a;
  476.            p++;
  477.           done_line_num++;
  478.          }
  479.          if((a==4)&&(c>2))
  480.          return 1;
  481.   }
  482.   return 0;
  483. }
  484. void copy_s_d()                         //將當(dāng)前方塊的下個形狀4*4 裝到測試方塊存儲中,以便測試當(dāng)前是否能變形
  485. {
  486.   uchar a=0,b=0,c=0;
  487.   if(cur_mod_sty<4)
  488.   c=cur_mod_sty+1;
  489.   else
  490.   c=0;
  491.   for(a=0;a<4;a++)
  492.    for(b=0;b<4;b++)
  493.    {
  494.     temp_test[a*4+b]=els_sty[cur_mod][c][a][b];
  495.    }
  496. }

  497. void copy_d_s()                    //將下一個方塊的形狀調(diào)出放到 當(dāng)前方塊裝載
  498. {
  499.   uchar a=0,b=0,c=0;
  500.   if(cur_mod_sty<3)
  501.   c=cur_mod_sty+1;
  502.   else
  503.   c=0;
  504.   for(a=0;a<4;a++)
  505.    for(b=0;b<4;b++)
  506.    {
  507.     temp_els[a*4+b]=els_sty[cur_mod][c][a][b];
  508.    }
  509. }
  510. void copy_d_s1()           //和上面一樣用途一樣,只是一個在中斷中調(diào)用,一個在后臺調(diào)用
  511. {
  512.   uchar a=0,b=0,c=0;
  513.   if(cur_mod_sty<3)
  514.   c=cur_mod_sty+1;
  515.   else
  516.   c=0;
  517.   for(a=0;a<4;a++)
  518.    for(b=0;b<4;b++)
  519.    {
  520.     temp_els[a*4+b]=els_sty[cur_mod][c][a][b];
  521.    }
  522. }
  523. unsigned char get_key()//得到當(dāng)前按鍵數(shù)據(jù)在1-16之間,無按下,返回0
  524. {
  525. unsigned char a=0;
  526. unsigned char b=0;
  527. unsigned char c=0;
  528. unsigned char key=0;
  529. for(a=0;a<4;a++)
  530. {
  531.     P1=~(0X80>>a);
  532.         c=(P1&0XFF);
  533.     if((P1&0x0f)!=0x0f)
  534.          {
  535.            for(b=0;b<4;b++)
  536.            {
  537.              P1=~(0X08>>b);
  538.          if((P1>>4)!=0X0F)
  539.                  {
  540.                  key=a*4+b+1;
  541.          break;
  542.                  }
  543.            }
  544.          }
  545. }
  546. return key;
  547. }

  548. void ex1_int(void) interrupt 3        /*外部中斷1的服務(wù)函數(shù)  即外部中斷1發(fā)生后單片機自動調(diào)轉(zhuǎn)到本函數(shù)處執(zhí)行*/
  549. {

  550.                          static unsigned char index_disp=0;           //定義一個靜態(tài)變量來記錄現(xiàn)在顯示哪一位
  551.                          static unsigned char move_count=0;
  552.                          static unsigned char font_count=0;
  553.                          uchar h=0,l=0;

  554.              TH1=0xfa;         //溢出后重新給定時器付初值   1MS 溢出一次
  555.              TL1=0X00;


  556.                          ///////////////////////////////////////////////////刷新一行點陣開始/////////////////////////////////////

  557.              if(color)
  558.                          {
  559.              data_led[2]=~disp_buff[index_disp*2];                   //將當(dāng)前行的顯存送到指定區(qū)域準(zhǔn)備一次性發(fā)送
  560.              data_led[3]=~disp_buff[index_disp*2+1];
  561.              data_led[0]=0xff;                                                           //紅色不顯示
  562.              data_led[1]=0xff;                                                           //紅色不顯示
  563.                          }
  564.                          else
  565.                          {
  566.                          data_led[0]=~disp_buff[index_disp*2];                   //將當(dāng)前行的顯存送到指定區(qū)域準(zhǔn)備一次性發(fā)送
  567.              data_led[1]=~disp_buff[index_disp*2+1];
  568.              data_led[2]=0xff;                                                           //紅色不顯示
  569.              data_led[3]=0xff;
  570.                          }

  571.              SUOCUN=0;
  572.                          if(index_disp<16)                                                           //一畫面分16次送完,每次中斷只送一行
  573.                           {
  574.                           OE=1;
  575.               send_data_led(data_led);
  576.               H_H=~(rond_k/0XFF);
  577.               H_L=~(rond_k&0XFF);
  578.               SUOCUN=1;
  579.                           OE=0;
  580.               rond_k=_iror_(rond_k,1);
  581.                           index_disp++;
  582.                              }
  583.                          /////////////////////////////////////////////////刷新一行點陣結(jié)束////////////////////////////////////

  584.                          else                                                                                 //16次送完,第17次用來處理其他要在中斷處理的動作,比如按鍵掃描
  585.                           {
  586.                            rond_k=0x8000;                                          
  587.                            index_disp=0;                               //否則掃描一次結(jié)束繼續(xù)重頭再來
  588.                           if(sys_st==logo)
  589.                           {
  590.                           if(char_move_time<20)
  591.                            char_move_time++;
  592.                           else
  593.                            {
  594.                             char_move_time=0;
  595.                                 if(move_count<16)
  596.                                 {
  597.                              font_round();
  598.                                  move_count++;
  599.                                 }
  600.                                  else
  601.                                  {
  602.                                   move_count=0;
  603.                                   for(h=0;h<32;h++)
  604.                                   font_2[h]=GB_16[font_count].Msk[h];
  605.                                   if(font_count<25)
  606.                                    font_count++;
  607.                                   else
  608.                                   {
  609.                                    color=!color;
  610.                                    font_count=0;
  611.                                   }
  612.                                    font_round();
  613.                                    move_count++;
  614.                                  }
  615.                            }
  616.                            if(get_key())
  617.                            sys_st=game;
  618.                          }
  619.                           if(time_count<100)                           //自動下降時間大概1秒  
  620.                           {
  621.                                    time_count++;
  622.                           }
  623.                           else
  624.                           {
  625.                             if(test_down(temp_els))                  //判斷是否還能下降
  626.                                 {
  627.                                   need_save2_loc=1;                          //下降不了,要保存 顯存數(shù)據(jù)到固定陣列
  628.                                 }
  629.                                 else
  630.                                 {
  631.                                  if(need_redraw_temp==0)          //看現(xiàn)在是否后臺在刷新,不是則允許刷新
  632.                                  {
  633.                                   time_down=1;                                  //時間造成的自動下降標(biāo)志
  634.                                   els_cur_y++;                                  //當(dāng)前方塊可以下降
  635.                                   need_redraw_temp=1;                  //要重新刷新所有
  636.                                  }
  637.                             }
  638.                             time_count=0;
  639.                            } //時間引起的下降判斷結(jié)束



  640.                           cur_key=get_key();              //掃描現(xiàn)在按鍵

  641.                           if(cur_key)                                          //有按鍵按下
  642.                           {
  643.                              if(cur_key==old_key)                  //判段是連續(xù)按下
  644.                                  {
  645.                                     if(key_time<max_long_pre) //連續(xù)按下的時間小于常按時間
  646.                                         {
  647.                                      key_time++;                          //按下的時間自動加1
  648.                                         }
  649.                                         else
  650.                                         {                                                  //常按處理
  651.                                            if(cur_key==14)                  //下降按鍵常按,快速下降
  652.                                             {
  653.                                                    cur_key=0;
  654.                                                                          if(test_down(temp_els))         //每次快速下降后判斷是否降到底
  655.                                                          {
  656.                                                           need_save2_loc=1;
  657.                                                          }
  658.                                                         else
  659.                                                          {

  660.                                                              time_down=1;
  661.                                                              els_cur_y++;
  662.                                                              need_redraw_temp=1;
  663.                                                            
  664.                                                           }
  665.                                               }
  666.                                         }
  667.                                  }
  668.                                  else                                                //否則記錄下現(xiàn)在的按鍵到OLD_KEY
  669.                                  {
  670.                                    old_key=cur_key;
  671.                    cur_key=0;                                //
  672.                                  }
  673.               }
  674.                           else                                                         //手松開
  675.                           {                                                            //清常按標(biāo)志
  676.                              key_time=0;                                
  677.                              if(old_key)                            //假如按鍵不是0,執(zhí)行記錄下的按鍵功能  HAVE BUG
  678.                                  {
  679.                                    switch (old_key)
  680.                                    {                                                //變形處理
  681.                                       case 10:
  682.                                                  copy_s_d();                 //將下個形狀裝到temp_test中,
  683.                                                    
  684.                                               if((!test_left(temp_test))&&(!test_right(temp_test)))        //測試是否能變形
  685.                                                {
  686.                                                  if(cur_mod_sty<3)                                                                    //變形為下個狀態(tài)
  687.                                                           cur_mod_sty++;
  688.                                                          else
  689.                                                           cur_mod_sty=0;
  690.                                                           copy_d_s();                                                                            //能變形,則調(diào)下個方塊到現(xiàn)在的方塊中                                                                                                                                                            
  691.                                                   need_redraw_temp=1;                                                                //設(shè)需要重新刷新標(biāo)志
  692.                                                }
  693.                                               break;
  694.                                       case 13:  
  695.                                               if(!test_left(temp_els))                                                            //左鍵被按下
  696.                                                {
  697.                                                  els_cur_x--;
  698.                                                  need_redraw_temp=1;
  699.                                                }
  700.                                               break;
  701.                                           case 14:                                                                                                         //下降按鍵被按下,并松開后執(zhí)行 下降一格命令
  702.                                               if(!time_down)
  703.                                                   {
  704.                                               if(test_down(temp_els))
  705.                                           {
  706.                                              need_save2_loc=1;
  707.                                           }
  708.                                            else
  709.                                           {
  710.                                             if(need_redraw_temp==0)
  711.                                             {
  712.                                              els_cur_y++;
  713.                                              need_redraw_temp=1;
  714.                                             }
  715.                                           }
  716.                                                   }
  717.                                                   else
  718.                                                   time_down=0;
  719.                                               need_redraw_temp=1;
  720.                                               break;
  721.                                          case 15:  
  722.                                              if(!test_right(temp_els))
  723.                                              {
  724.                                               els_cur_x++;
  725.                                               need_redraw_temp=1;
  726.                                              }
  727.                                               break;
  728.                                         };
  729.                                   }
  730.                                   key_time=0;
  731.                                   old_key=0;
  732.                           }  
  733.                         }

  734.                         
  735. }

  736. void ini_gui()                                  //重新初始化游戲界面
  737. {
  738.   uchar a=0,b=0;
  739.   for(a=0;a<20;a++)
  740.    for(b=0;b<16;b++)
  741.      loc_pos[a][b]=dis_ini[a][b];
  742. }  

  743. main()
  744. {
  745. uint a=0;
  746. uchar h=0,l=0;
  747. uint i;
  748.       
  749. uchar s_h=0,s_l=0;
  750. uchar d_h=0,d_l=0;

  751. i = (TH1<<8)|TL1;   
  752. srand(i);                                  //利用隨機函數(shù)得到下一個方快形狀
  753.      
  754. ini_gui();                                  //初始化游戲界面

  755. for(h=0;h<4;h++)
  756.   for(l=0;l<4;l++)
  757.     temp_els[h*4+l]=els_sty[cur_mod][cur_mod_sty][h][l];        //換新的形狀到臨時方塊區(qū)域

  758. ini_int();

  759. while(1)
  760. {
  761.             switch(sys_st)
  762.                         {
  763.                           case game:

  764.                if(need_redraw_temp)
  765.                            {
  766.                             need_redraw_temp=0;
  767.                             for(h=0;h<20;h++)
  768.                              for(l=0;l<20;l++)
  769.                               dis_pos[h][l]= loc_pos[h][l];                             //按照已分布方塊內(nèi)容  重新刷新顯存區(qū)域
  770.                             add_els_temp2dis_pos(temp_els,els_cur_x,els_cur_y);         //在顯存中重新畫臨時方塊
  771.                                 dis_pos2dis_buff();                                                                         //
  772.                            }

  773.                            if(!need_redraw_temp)  //因為每次方塊坐標(biāo)動作都引起重畫 ,并且坐標(biāo)值會變動,如果坐標(biāo)值變動了,但沒來的及重畫,這個時候顯存的值
  774.                                                   //如果被保留到方塊位置記錄陣列中,顯然是錯誤的.
  775.                if(need_save2_loc)     //假如觸底
  776.                            {
  777.                               key_time=0;                         //釋放常按功能,例如常按引起迅速下降,這個結(jié)果是本次方塊下降到碰觸, 那么將引起下一個方塊的重新開始,
  778.                                                          //因為下個方塊重新開始的時候,我們顯然不希望它也迅速下降到底.因此要釋放和常按關(guān)系的變量key_time

  779.                               save_dis2loc();        //保存顯存內(nèi)容到紀(jì)錄數(shù)組
  780.                                   els_cur_y=3;                 //重設(shè)方塊位置         X 坐標(biāo)
  781.                                   els_cur_x=6;                         //重設(shè)方塊位置         Y 坐標(biāo)
  782.                                   cur_mod = TL1%5;                         //調(diào)用隨機函數(shù)得到下一個將要出現(xiàn)的方塊形狀編號
  783.                                   copy_d_s1();                         //將下一個形狀,從固定ROM 調(diào) 到RAM 中


  784.                                   if(find_line(rec_line))//每次下降都檢查是否本次下降結(jié)束引起堆滿!!也就是:是否游戲結(jié)束
  785.                                   {
  786.                                     sys_st=logo;
  787.                                     els_cur_y=3;                 //游戲結(jié)束后你可以設(shè)置任意你要的動作,在這里只是重新開始游戲
  788.                                     ini_gui();                         //重新初始化界面
  789.                                   }
  790.                                   else
  791.                                   {
  792.                                     if(done_line_num)         //如果本次下落引起湊滿一行或多行
  793.                                         {
  794.                                           d_h=19;

  795.                                           for(s_h=19;s_h>0;s_h--)                           //將目前 位置陣列數(shù)組中(排除已湊滿一行)外的所有行,從最后一行往上拷
  796.                                           {
  797.                                            if((s_h!=rec_line[0])&&(s_h!=rec_line[1])&&(s_h!=rec_line[2])&&(s_h!=rec_line[3]))//湊滿行后,從倒數(shù)第一行開始拷貝(排除已經(jīng)堆滿的行)
  798.                                            {
  799.                                            for(s_l=0;s_l<16;s_l++)
  800.                                             {
  801.                                               dis_pos[d_h][s_l]=loc_pos[s_h][s_l];           //重新建立各方快坐標(biāo)        到顯示內(nèi)存暫存
  802.                                             }
  803.                                                 d_h--;
  804.                                            }
  805.                                           }

  806.                                           for(h=0;h<20;h++)                                                          //將暫存的數(shù)據(jù) 拷貝到方快位置關(guān)系數(shù)組中
  807.                                            for(l=0;l<16;l++)
  808.                                            {
  809.                                              loc_pos[h][l]=dis_pos[h][l];
  810.                                            }

  811.                                            for(h=0;h<5;h++)                                                          //本次處理湊成N行結(jié)束 清除一些中間變量
  812.                                            rec_line[h]=0x00;                                            
  813.                                            done_line_num=0;
  814.                                            need_redraw_temp=1;
  815.                                     }
  816.                               }
  817.                                   need_save2_loc=0;                                             //需要刷新
  818.                            }
  819.                          break;
  820.                                                                                                                                  //游戲結(jié)束顯示滾動LOGO
  821.                          case  logo:

  822.                          break;
  823.                         }  
  824.                            
  825.                              
  826. }

  827. }
復(fù)制代碼

作者: 51hei    時間: 2009-9-12 11:59
高手。。。。。。。。。
作者: dongyulong    時間: 2009-9-12 21:38
太強大了 牛氣
作者: cainiaoa    時間: 2009-9-14 20:18
我看了視頻了,真是太厲害了,高人啊
作者: 柳梢兒    時間: 2009-9-17 20:54

東西呢?


作者: xiaoshandong    時間: 2009-9-17 22:17
下來沒用的!電路圖沒東西的啊
作者: xiaoshandong    時間: 2009-9-17 22:37

怎么搞的啊


作者: mm520    時間: 2009-9-19 22:38
等我也要學(xué)習(xí)
作者: 驪威電子    時間: 2009-9-22 21:23
等我也要學(xué)習(xí)
作者: zerozeroseven    時間: 2009-9-26 15:09

回小山東,原理圖和PCB 是PADS2005格式的。用PROTEL打不開的!


作者: mainv    時間: 2009-10-3 10:25
樓主很厲害啊
作者: 揚揚    時間: 2009-10-14 14:10

回帖是一種美德!  樓主好強大


作者: today    時間: 2009-10-16 13:40
好厲害!
作者: sysatom    時間: 2009-10-19 13:08
高手,我?guī)讜r才有這水平?努力。。。
作者: witnessiz    時間: 2009-10-20 15:51

很神奇啊,看得我有點心癢癢,還是有點思路,有空做做看


作者: 幸甚至哉    時間: 2010-3-6 15:57

很好,不錯。!


作者: shichuan    時間: 2010-3-9 16:54
 高手也!下載下來學(xué)習(xí)。 

作者: hjwen8680    時間: 2010-3-17 18:41
有點意思啊,值得學(xué)習(xí)。
作者: 丶苗條的胖子    時間: 2010-3-19 22:19
利害啊,我是新手,大開眼界啊
作者: yuhuashi23    時間: 2010-3-20 19:56
很強大  學(xué)習(xí)
作者: led001    時間: 2010-4-2 18:13
請問剛開始時候LED是紅色的,后來又是綠色的。是同一塊板還是不同的板。
作者: jh    時間: 2010-4-3 22:44

我的是8*8的點陣


作者: 東野    時間: 2010-4-4 01:46
真厲害啊
作者: G-ONE    時間: 2010-4-6 10:03

呵呵 抽空也做做玩


作者: lb605751149    時間: 2010-4-6 10:12

不錯,學(xué)習(xí)


作者: mingzhi    時間: 2010-4-18 22:20

很強大,下來學(xué)習(xí)了,謝謝。


作者: yuanxiang    時間: 2010-4-22 09:28

niu a

!!1


作者: myborntorun    時間: 2010-4-27 17:57

很好。我也在寫

 


作者: skyhie    時間: 2010-5-10 18:30

好厲害喲


作者: cool882    時間: 2010-5-21 12:29
高手啊!!學(xué)習(xí)一下!!
作者: dianzilk    時間: 2010-5-22 10:35
正在找這方面的資料!謝了!
作者: mrzwx    時間: 2010-6-19 18:58
你的圖呢?沒圖好像看懂呀?
作者: fffzhao    時間: 2010-6-30 01:44
酷,下載來學(xué)習(xí)下
作者: 桃源客    時間: 2010-6-30 16:34
有意思!就是算法難點。電路應(yīng)不是很難。
作者: xsx127    時間: 2012-4-22 19:08
牛啊在哪下砸
作者: 宋明強    時間: 2012-4-23 23:53
樓主能指導(dǎo)我做做這個不??
作者: lpq123    時間: 2012-6-8 16:00
這個需要哪些器件啊   可以發(fā)清單給我嗎  樓主感恩吶
作者: qq177128496    時間: 2012-7-30 20:30
多謝分享
作者: 池中麟    時間: 2012-8-5 12:31
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。!
作者: 池中麟    時間: 2012-8-5 12:32
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。!
作者: 池中麟    時間: 2012-8-5 12:35
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。!
作者: 池中麟    時間: 2012-8-5 12:37
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。!
作者: 池中麟    時間: 2012-8-5 12:37
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。!
作者: 池中麟    時間: 2012-8-5 12:38
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
作者: 池中麟    時間: 2012-8-5 12:38
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
作者: weifengdq    時間: 2014-4-28 15:37
這也可以。。。
作者: skype1027    時間: 2014-9-13 00:05
真可以。。。
作者: wkj3253    時間: 2014-10-23 17:27
試試,謝謝
作者: p18712886438    時間: 2014-11-19 21:43
支持一個                              
作者: p18712886438    時間: 2014-11-19 21:44
支持一個                                   
作者: 2796277453    時間: 2014-11-20 22:05
謝謝嘍。。
作者: p18712886438    時間: 2014-11-21 13:55
支持一個                                      
作者: p18712886438    時間: 2014-11-21 13:55
支持一個                                                                                                     
作者: 自自在在    時間: 2014-12-11 18:42
看看。。。

作者: 自自在在    時間: 2014-12-11 18:42
m幣不夠

作者: 石老A    時間: 2015-9-18 09:22
BANG,BANG,BANG,BANG,BANG,BANG,BANG,BANG,BANG,BANG,BANG,BANG,BANG,
作者: bjgk    時間: 2015-9-20 19:20
厲害,牛人的作品。
作者: 相投歐    時間: 2015-10-16 22:46
求樓主發(fā)原理圖,為什么用Altium designed看不到
作者: 我是萌妹子    時間: 2015-12-5 15:30
看看,樓主厲害,值得學(xué)習(xí)
作者: 永遠(yuǎn)的王同學(xué)    時間: 2015-12-25 01:16
唉,等我用電腦再來瀏覽!
作者: bwzdxl    時間: 2016-5-18 23:41
樓主乃真.高手。。
作者: 巴斯光年白    時間: 2016-6-6 20:41
哇哦,酷酷
作者: 巴斯光年白    時間: 2016-6-7 20:20
厲害,樓主
作者: Q好人一生平安    時間: 2016-10-16 10:57
PCB沒有圖,程序?qū)W習(xí)下
作者: npn    時間: 2016-10-16 22:15
本帖最后由 npn 于 2016-10-16 22:33 編輯

再加上一些帶有特殊功能的方塊,比如一種會爆炸的方塊,掉落后方塊放出爆炸特效并且消失部分范圍的方塊,或者一種特殊方塊掉落后讓整個豎排的方塊全部滑落或消失,通常是1個像素或兩個像素豎排的點且旋轉(zhuǎn)不了的一種特殊方塊,或者加入更大的難度,一開始中間以及底部就有不規(guī)則的固定方塊。
作者: zhouqiang    時間: 2016-10-17 09:06
支持支持
作者: 小玄ed    時間: 2016-11-9 22:29
有沒有8x8的呀?
作者: ING-sh    時間: 2016-11-10 10:03
大神,下載學(xué)習(xí)一下

作者: 773812422    時間: 2016-12-2 17:58
樓主牛逼
這個程序可以在arduino UNO上運行?

作者: 773812422    時間: 2016-12-2 17:58
樓主厲害
作者: huang917500    時間: 2016-12-6 23:07
51黑有你更精彩!
作者: zqy181818    時間: 2017-3-20 16:43
給力。
作者: faridzled    時間: 2017-3-22 00:00
thanks for sharing
作者: ChazLiu    時間: 2017-11-22 22:01
linyean 發(fā)表于 2009-9-9 11:09
good,給大家省點黑幣 樓主的源碼如下:

font.h 文件在哪

作者: 一去不返    時間: 2017-11-23 17:00
頂頂頂
作者: wxxl    時間: 2017-11-23 21:27
zerozeroseven 發(fā)表于 2009-9-26 15:09
回小山東,原理圖和PCB 是PADS2005格式的。用PROTEL打不開的!

DXP也打不開,原理圖
作者: ゅ前途丶    時間: 2018-1-14 14:58
wxxl 發(fā)表于 2017-11-23 21:27
DXP也打不開,原理圖

你打開了沒啊

作者: 小吹吹    時間: 2018-7-11 13:14
到移動方塊卡住了,來看看大神的操作
作者: 小吹吹    時間: 2018-7-11 13:18
linyean 發(fā)表于 2009-9-9 11:09
good,給大家省點黑幣 樓主的源碼如下:

感謝啊
作者: xiaozhong1314    時間: 2018-11-6 13:11
這個需要哪些器件啊   可以發(fā)清單給我嗎  樓主感恩吶   986212146@qq.com
作者: xiaozhong1314    時間: 2018-11-8 20:22
這個需要哪些器件啊   可以發(fā)清單給我嗎  樓主感恩吶  986212146@qq.com
作者: hufeihufei110    時間: 2018-11-20 15:17
樓主能不能發(fā)我。。沒有幣了?郵箱聯(lián)系:282061410@qq.com
作者: sdxrly    時間: 2019-5-5 11:42
學(xué)習(xí)一下
作者: sunny@1011    時間: 2019-5-5 15:21
linyean 發(fā)表于 2009-9-9 11:09
good,給大家省點黑幣 樓主的源碼如下:

為什么有錯誤?
作者: 15027    時間: 2019-6-7 14:13
來學(xué)習(xí)學(xué)習(xí),樓主牛
作者: 64MIN    時間: 2019-7-1 14:20
牛逼嗷
作者: 一車異世界    時間: 2019-7-8 17:39
總算找到個喜歡寫注釋的摟住了,看程序舒服多了。
作者: HYHTYHYT266161    時間: 2021-11-2 23:10
要pads才能打開




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91久久久精品国产一区二区蜜臀 | 精品国产乱码久久久久久蜜柚 | 欧美专区在线 | 日本精品一区二区三区视频 | 国产日韩欧美 | 秋霞影院一区二区 | 日本国产精品视频 | 免费午夜电影 | 国产日韩精品一区二区 | 都市激情亚洲 | jizjizjiz中国护士18 | 成人免费视频网站在线看 | 日韩一区二区久久 | 日韩欧美在线观看视频网站 | 亚洲欧洲中文 | 欧美国产精品一区二区三区 | 国产精品久久久久久久久 | 久久精品视频网站 | 久久91| 伊伊综合网 | 国产精品国产精品国产专区不片 | 日本高清在线一区 | 亚洲免费在线观看 | 欧美激情五月 | 欧美亚洲日本 | 欧美日韩视频在线 | 天天舔天天 | 久久久久国产精品人 | 国产精品久久精品 | 91高清在线视频 | 午夜一区二区三区在线观看 | 一级a爱片久久毛片 | 91精品国产色综合久久不卡98口 | 久久久久国产 | 国产视频观看 | 成人欧美一区二区 | 一区二区三区不卡视频 | 日韩视频在线一区 | 最新高清无码专区 | www.夜夜骑.com| 亚洲一区欧美 |