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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 38090|回復: 89
打印 上一主題 下一主題
收起左側

酷!用51單片機在16×16LED 點陣上玩俄羅斯方塊游戲 程序+PCB+電路圖

  [復制鏈接]
跳轉到指定樓層
樓主
很酷的16×16LED俄羅斯方塊游戲制作資料分享給51黑電子論壇的朋友:
pads畫的圖:


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

以下是視頻效果:

視頻:http://v.youku.com/v_show/id_XMTAxNjY4ODY4.html

評分

參與人數 7黑幣 +49 收起 理由
liang1314 + 5 回帖助人的獎勵!
chit100 + 5
huang917500 + 5 很給力!
51黑ren + 12 很給力!
1liwen + 5
liwenjieli + 5
紅塵有你 + 12 共享資料的積分獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:15033 發表于 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. **--------------當前版本修訂------------------------------------------------------------------------------
  22. ** 修改人:
  23. ** 日 期:
  24. ** 描 述:
  25. **
  26. **------------------------------------------------------------------------------------------------------
  27. ********************************************************************************************************/


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

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

  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的數據端口
  39. sbit OE = P3^4;                                 // 定義移位寄存器74HC595的使能端口

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

  41. uchar idata  disp_buff1[32]; // 定義顯示直接送往74HC595 的顯示緩存備份 因為處理顯示緩存在中斷中完成,而緩存中數據的處理

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

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

  44. uchar  cur_mod=0;                         //  當前形狀編號

  45. uchar color=0;

  46. uchar  cur_mod_sty=0;                 //  當前形狀變化的四種狀態編號

  47. uchar time_down=0;                         //  設置自動下降標志,由定時器觸發

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

  49. uchar need_redraw_temp=0;         //  是否需要刷新顯存中的數據,太頻繁刷新會降低系統性能,如在程序中需刷新,請置此標志

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

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

  52. char els_cur_x=1;                         //  記錄當前方塊的X位置

  53. char els_cur_y=3;                         //  記錄當前方塊的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                 //  定義按鍵按下去多少個循環監測周期才算"常按",根據實際測量一次按鍵掃描15MS執行一次,那這里就50*15MS 執行第二
  62.                              //  功能比如  下降按鍵  短按為下降一格 如果常按 就觸發迅速下降功能

  63. uchar  data  temp_els[16]=         //  方塊的固定形狀是保存到ROM區域的(els_sty[6][4][4][4]),但是為了加工的方便,將固定ROM 內的基本形狀取出放到本數組
  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]=              //在當前形狀變形(旋轉)前要先判斷當前方塊如果變成下一個形狀能否造成碰觸
  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}; //顯示在定時器中斷中調用,每次只顯示一行,一行中是16位(2個字節)本屏幕時雙色所以定義四個字節

  89. uchar  xdata  loc_pos[20][16]=                 //定義記錄每個已經固定點的位置                           為了簡化計算,每個點用一個字節代替,可以減少運算時間和復雜性
  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.                                //顯示屏幕要刷新的數據  所對應的陣列,為了簡化計算,每個點用一個字節代替,可以減少運算時間和復雜性
  114.                                //但是送到屏幕上的數據是由這些數據轉過來的,最終轉成每個點對應一位.由數組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]=        //初始化固定點的記錄情況,每次游戲開始前調用
  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所對應的四種狀態///////////////////////////////////////
  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所對應的四種狀態///////////////////////////////////////
  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所對應的四種狀態///////////////////////////////////////
  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所對應的四種狀態///////////////////////////////////////
  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所對應的四種狀態///////////////////////////////////////
  300. };

  301. //自己做的漢子庫

  302. uchar code zhi[] =          // 數據表
  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[] =          // 數據表
  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[] =          // 數據表
  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[] =          // 數據表
  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發一個字節數據
  353. {
  354.   uchar a=0;
  355.   for(a=0;a<8;a++)                  //將一個字節數據分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)                  //初始化中斷和定時系統,本程序只用到了定時器1  
  367. {
  368.                         // D7    D6  D5 D4              D3    D2  D1 D0
  369.   TMOD=0X11;//GATA  C/T  M1 M0         -------   GATA  C/T  M1 M0          定時器工作模式設置為 GATA=0關閉門控使能  C/T=0  M1=0   M0=1,選擇時鐘源來自外部晶體12分頻.

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

  372.   PT0=0;    //設置外部中斷0的中斷優先等級為0
  373.   PT1=0;    //設置外部中斷1的中斷優先等級為0

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

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


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

  380.   EA =1;        //打開中斷允許總開關
  381. }


  382. void send_data_led(uchar *p)   //將一行的數據送出到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;                           //因為采用動態掃描,每次只能讓一行亮,這里控制行的是P2 口和P0 口,兩個字節.聲明個兩字節的變量,依次循環在每位上


  391. void  dis_pos2dis_buff()           //將顯示陣列的數據(每點對應一個字節對應每點對應一位)
  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的數據(每個點對應一字節)轉成(每點一個位)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字節的刷新緩沖
  413.    }
  414. }

  415. void add_els_temp2dis_pos(uchar *p,char x_start,char y_start) //將當前俄羅斯顯示到窗口的指定位置
  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)   //每次下降結束就監測是否湊夠一行,是否滿,以及記錄湊成了幾行,和湊滿一行的行號
  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()                         //將當前方塊的下個形狀4*4 裝到測試方塊存儲中,以便測試當前是否能變形
  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()                    //將下一個方塊的形狀調出放到 當前方塊裝載
  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()           //和上面一樣用途一樣,只是一個在中斷中調用,一個在后臺調用
  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()//得到當前按鍵數據在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的服務函數  即外部中斷1發生后單片機自動調轉到本函數處執行*/
  549. {

  550.                          static unsigned char index_disp=0;           //定義一個靜態變量來記錄現在顯示哪一位
  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];                   //將當前行的顯存送到指定區域準備一次性發送
  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];                   //將當前行的顯存送到指定區域準備一次性發送
  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.                          /////////////////////////////////////////////////刷新一行點陣結束////////////////////////////////////

  584.                          else                                                                                 //16次送完,第17次用來處理其他要在中斷處理的動作,比如按鍵掃描
  585.                           {
  586.                            rond_k=0x8000;                                          
  587.                            index_disp=0;                               //否則掃描一次結束繼續重頭再來
  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;                          //下降不了,要保存 顯存數據到固定陣列
  628.                                 }
  629.                                 else
  630.                                 {
  631.                                  if(need_redraw_temp==0)          //看現在是否后臺在刷新,不是則允許刷新
  632.                                  {
  633.                                   time_down=1;                                  //時間造成的自動下降標志
  634.                                   els_cur_y++;                                  //當前方塊可以下降
  635.                                   need_redraw_temp=1;                  //要重新刷新所有
  636.                                  }
  637.                             }
  638.                             time_count=0;
  639.                            } //時間引起的下降判斷結束



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

  641.                           if(cur_key)                                          //有按鍵按下
  642.                           {
  643.                              if(cur_key==old_key)                  //判段是連續按下
  644.                                  {
  645.                                     if(key_time<max_long_pre) //連續按下的時間小于常按時間
  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                                                //否則記錄下現在的按鍵到OLD_KEY
  669.                                  {
  670.                                    old_key=cur_key;
  671.                    cur_key=0;                                //
  672.                                  }
  673.               }
  674.                           else                                                         //手松開
  675.                           {                                                            //清常按標志
  676.                              key_time=0;                                
  677.                              if(old_key)                            //假如按鍵不是0,執行記錄下的按鍵功能  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)                                                                    //變形為下個狀態
  687.                                                           cur_mod_sty++;
  688.                                                          else
  689.                                                           cur_mod_sty=0;
  690.                                                           copy_d_s();                                                                            //能變形,則調下個方塊到現在的方塊中                                                                                                                                                            
  691.                                                   need_redraw_temp=1;                                                                //設需要重新刷新標志
  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:                                                                                                         //下降按鍵被按下,并松開后執行 下降一格命令
  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);                                  //利用隨機函數得到下一個方快形狀
  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];        //換新的形狀到臨時方塊區域

  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];                             //按照已分布方塊內容  重新刷新顯存區域
  770.                             add_els_temp2dis_pos(temp_els,els_cur_x,els_cur_y);         //在顯存中重新畫臨時方塊
  771.                                 dis_pos2dis_buff();                                                                         //
  772.                            }

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

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


  784.                                   if(find_line(rec_line))//每次下降都檢查是否本次下降結束引起堆滿!!也就是:是否游戲結束
  785.                                   {
  786.                                     sys_st=logo;
  787.                                     els_cur_y=3;                 //游戲結束后你可以設置任意你要的動作,在這里只是重新開始游戲
  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--)                           //將目前 位置陣列數組中(排除已湊滿一行)外的所有行,從最后一行往上拷
  796.                                           {
  797.                                            if((s_h!=rec_line[0])&&(s_h!=rec_line[1])&&(s_h!=rec_line[2])&&(s_h!=rec_line[3]))//湊滿行后,從倒數第一行開始拷貝(排除已經堆滿的行)
  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];           //重新建立各方快坐標        到顯示內存暫存
  802.                                             }
  803.                                                 d_h--;
  804.                                            }
  805.                                           }

  806.                                           for(h=0;h<20;h++)                                                          //將暫存的數據 拷貝到方快位置關系數組中
  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行結束 清除一些中間變量
  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.                                                                                                                                  //游戲結束顯示滾動LOGO
  821.                          case  logo:

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

  827. }
復制代碼
回復

使用道具 舉報

板凳
ID:14745 發表于 2009-9-12 11:59 | 只看該作者
高手啊!!!!!!!!!
回復

使用道具 舉報

地板
ID:17130 發表于 2009-9-12 21:38 | 只看該作者
太強大了 牛氣
回復

使用道具 舉報

5#
ID:16856 發表于 2009-9-14 20:18 | 只看該作者
我看了視頻了,真是太厲害了,高人啊
回復

使用道具 舉報

6#
ID:17077 發表于 2009-9-17 20:54 | 只看該作者

東西呢?

回復

使用道具 舉報

7#
ID:17313 發表于 2009-9-17 22:17 | 只看該作者
下來沒用的啊!電路圖沒東西的啊
回復

使用道具 舉報

8#
ID:17313 發表于 2009-9-17 22:37 | 只看該作者

怎么搞的啊

回復

使用道具 舉報

9#
ID:17381 發表于 2009-9-19 22:38 | 只看該作者
等我也要學習
回復

使用道具 舉報

10#
ID:16015 發表于 2009-9-22 21:23 | 只看該作者
等我也要學習
回復

使用道具 舉報

11#
ID:16982 發表于 2009-9-26 15:09 | 只看該作者

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

回復

使用道具 舉報

12#
ID:17294 發表于 2009-10-3 10:25 | 只看該作者
樓主很厲害啊
回復

使用道具 舉報

13#
ID:17725 發表于 2009-10-14 14:10 | 只看該作者

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

回復

使用道具 舉報

14#
ID:18166 發表于 2009-10-16 13:40 | 只看該作者
好厲害!
回復

使用道具 舉報

15#
ID:18001 發表于 2009-10-19 13:08 | 只看該作者
高手,我幾時才有這水平?努力啊!!!
回復

使用道具 舉報

16#
ID:18304 發表于 2009-10-20 15:51 | 只看該作者

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

回復

使用道具 舉報

17#
ID:21971 發表于 2010-3-6 15:57 | 只看該作者

很好,不錯!!!

回復

使用道具 舉報

18#
ID:22056 發表于 2010-3-9 16:54 | 只看該作者
 高手也!下載下來學習。 
回復

使用道具 舉報

19#
ID:10353 發表于 2010-3-17 18:41 | 只看該作者
有點意思啊,值得學習。
回復

使用道具 舉報

20#
ID:22213 發表于 2010-3-19 22:19 | 只看該作者
利害啊,我是新手,大開眼界啊
回復

使用道具 舉報

21#
ID:21968 發表于 2010-3-20 19:56 | 只看該作者
很強大  學習
回復

使用道具 舉報

22#
ID:22786 發表于 2010-4-2 18:13 | 只看該作者
請問剛開始時候LED是紅色的,后來又是綠色的。是同一塊板還是不同的板。
回復

使用道具 舉報

23#
ID:22649 發表于 2010-4-3 22:44 | 只看該作者

我的是8*8的點陣

回復

使用道具 舉報

24#
ID:22820 發表于 2010-4-4 01:46 | 只看該作者
真厲害啊
回復

使用道具 舉報

25#
ID:22867 發表于 2010-4-6 10:03 | 只看該作者

呵呵 抽空也做做玩

回復

使用道具 舉報

26#
ID:22809 發表于 2010-4-6 10:12 | 只看該作者

不錯,學習

回復

使用道具 舉報

27#
ID:23180 發表于 2010-4-18 22:20 | 只看該作者

很強大,下來學習了,謝謝。

回復

使用道具 舉報

28#
ID:23045 發表于 2010-4-22 09:28 | 只看該作者

niu a

!!1

回復

使用道具 舉報

29#
ID:23404 發表于 2010-4-27 17:57 | 只看該作者

很好。我也在寫

 

回復

使用道具 舉報

30#
ID:23708 發表于 2010-5-10 18:30 | 只看該作者

好厲害喲

回復

使用道具 舉報

31#
ID:23945 發表于 2010-5-21 12:29 | 只看該作者
高手啊!!學習一下!!
回復

使用道具 舉報

32#
ID:24001 發表于 2010-5-22 10:35 | 只看該作者
正在找這方面的資料!謝了!
回復

使用道具 舉報

33#
ID:24319 發表于 2010-6-19 18:58 | 只看該作者
你的圖呢?沒圖好像看懂呀?
回復

使用道具 舉報

34#
ID:24797 發表于 2010-6-30 01:44 | 只看該作者
酷,下載來學習下
回復

使用道具 舉報

35#
ID:24810 發表于 2010-6-30 16:34 | 只看該作者
有意思!就是算法難點。電路應不是很難。
回復

使用道具 舉報

36#
ID:39002 發表于 2012-4-22 19:08 | 只看該作者
牛啊在哪下砸
回復

使用道具 舉報

37#
ID:38157 發表于 2012-4-23 23:53 | 只看該作者
樓主能指導我做做這個不??
回復

使用道具 舉報

38#
ID:41422 發表于 2012-6-8 16:00 | 只看該作者
這個需要哪些器件啊   可以發清單給我嗎  樓主感恩吶
回復

使用道具 舉報

39#
ID:43446 發表于 2012-7-30 20:30 | 只看該作者
多謝分享
回復

使用道具 舉報

40#
ID:43655 發表于 2012-8-5 12:31 | 只看該作者
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲久在线 | 男人天堂久久 | 一本大道久久a久久精二百 欧洲一区二区三区 | 亚洲精品欧美 | 视频一区二区中文字幕日韩 | 成年人视频免费在线观看 | 99久久夜色精品国产亚洲96 | 成人精品一区亚洲午夜久久久 | 欧美精产国品一二三区 | 欧美一级片a | 中文字幕免费视频 | 亚洲电影第三页 | 一区| 99久久夜色精品国产亚洲96 | 国产精久久久久久久妇剪断 | 伊人狠狠干| 国产色婷婷久久99精品91 | 中文字幕在线观看 | 91精品国产色综合久久不卡蜜臀 | 99精品欧美一区二区三区综合在线 | 国产精品视频在线观看 | 精品亚洲国产成av人片传媒 | 天天操天天操 | 中文字幕亚洲专区 | 伊人网综合在线 | 中文字幕国产 | 欧美成人猛片aaaaaaa | 国产精品一区在线观看 | 中国大陆高清aⅴ毛片 | 国产ts人妖系列高潮 | 成人久久久 | 一区二区播放 | 国产一区二区三区久久 | 久久免费精品视频 | 精品久久九 | 欧美黄在线观看 | 91精品国产高清一区二区三区 | 精品三级在线观看 | 免费小视频在线观看 | 亚洲啊v在线| 国产精品美女久久久久久久久久久 |