找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2042|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机俄罗斯方块仿真代码 Proteus7.8打开 LCD12864显示

[复制链接]
跳转到指定楼层
楼主
仿真可用,这边在发帖的时候显示字节过大
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <AT89X51.H>

  2. #define DOWNTIME 30
  3. #define MAXHANG 20
  4. #define MAXLIE  16
  5. #define MAXPIX  3
  6. #define PUSHON  50

  7. #define LCD P2
  8. #define EN  P3_0
  9. #define RW  P3_1
  10. #define RS  P3_2
  11. #define CS1 P3_3
  12. #define CS2 P3_4

  13. #define KEYLEFT P1_0
  14. #define KEYDOWN P1_7
  15. #define KEYRIGH P1_6
  16. #define KEYROTATION P1_1

  17. unsigned char gkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;
  18. unsigned char miao=0,fen=0;
  19. unsigned char downok;
  20. bit keyflag,timeupdate,fashionupdate;
  21. unsigned char idata cubeMap[MAXHANG][2];
  22. typedef struct{
  23.                unsigned char code * box;
  24.                            unsigned char cube : 4;
  25.                            unsigned char state : 4;
  26.                            char row;
  27.                            char column;
  28.                            } block;
  29. block this;
  30. unsigned int score=0;
  31. unsigned char speed=1;
  32. unsigned char code bittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};
  33. unsigned char code cube[]=
  34. {
  35. /*  ■
  36.   ■■■
  37. */
  38. 0,4,0xe,0,  0,2,6,2,     0,7,2,0,     4,6,4,0,

  39. /*■
  40.   ■■■
  41. */
  42. 0,8,0xe,0,  0,4,4,0xc,   0,0,0xe,2,   0,6,4,4,
  43. /*■■■
  44.   ■   
  45. */
  46. 0,0xe,8,0,  0,4,4,6,     0,1,7,0,     6,2,2,0,
  47. /*■■
  48.     ■■
  49. */
  50. 0,0xc,6,0,  0,2,6,4,     0,6,3,0,     2,6,4,0,
  51. /*  ■■
  52.   ■■  
  53. */
  54. 0,6,0xc,0,  0,4,6,2,     0,3,6,0,     4,6,2,0,
  55. /*■■■■
  56. */
  57. 0,0xf,0,0,  4,4,4,4,     0,0,0xf,0,   2,2,2,2,
  58. /*■■
  59.   ■■
  60. */
  61. 0,6,6,0,    0,6,6,0,     0,6,6,0,     0,6,6,0
  62. };
  63. unsigned char code asii[]=
  64. {
  65.     0x3E,0x51,0x49,0x45,0x3E, // -0-
  66.     0x00,0x42,0x7F,0x40,0x00, // -1-
  67.     0x62,0x51,0x49,0x49,0x46, // -2-
  68.     0x21,0x41,0x49,0x4D,0x33, // -3-
  69.     0x18,0x14,0x12,0x7F,0x10, // -4-
  70.     0x27,0x45,0x45,0x45,0x39, // -5-
  71.     0x3C,0x4A,0x49,0x49,0x31, // -6-
  72.     0x01,0x71,0x09,0x05,0x03, // -7-
  73.     0x36,0x49,0x49,0x49,0x36, // -8-
  74.     0x46,0x49,0x49,0x29,0x1E, // -9-
  75.     0x00,0x36,0x36,0x00,0x00, // -:-10
  76. //next
  77.     0x7F,0x04,0x08,0x10,0x7F, // -N-11
  78.     0x7F,0x49,0x49,0x49,0x41, // -E-12
  79.     0x63,0x14,0x08,0x14,0x63, // -X-13
  80.     0x01,0x01,0x7F,0x01,0x01, // -T-14
  81. //speed
  82.     0x26,0x49,0x49,0x49,0x32, // -S-15
  83.     0x7F,0x09,0x09,0x09,0x06, // -P-16
  84.     0x7F,0x49,0x49,0x49,0x41, // -E-17
  85.     0x7F,0x41,0x41,0x41,0x3E, // -D-18
  86. //score
  87.     0x3E,0x41,0x41,0x41,0x22, // -C-19   
  88.     0x3E,0x41,0x41,0x41,0x3E, // -O-20
  89.     0x7F,0x09,0x19,0x29,0x46, // -R-21
  90.     0x00,0x00,0x00,0x00,0x00,  // - -22
  91. //GAME OVER
  92.     0x3E,0x41,0x51,0x51,0x72, // -G-23
  93.     0x7C,0x12,0x11,0x12,0x7C, // -A-24
  94.     0x7F,0x02,0x0C,0x02,0x7F, // -M-25
  95.     0x1F,0x20,0x40,0x20,0x1F, // -V-26
  96. //TIME
  97. //  0x00,0x41,0x7F,0x41,0x00  // -I-27
  98. };
  99. ////////////////////////////////////////////////////////////////////////////////
  100. void lcdCmd(unsigned char cmd)
  101. {
  102. bit ea;
  103. ea=EA;
  104. EA=0;
  105. EN=0;
  106. RW=0;
  107. RS=0;
  108. LCD=cmd;
  109. EN=1;
  110. EN=1;
  111. EN=0;
  112. EA=ea;
  113. }
  114. //-------------------------------------------------------------------------------
  115. void lcdWriteByte(unsigned char ch)
  116. {
  117. EN=0;
  118. RS=1;
  119. RW=0;
  120. LCD=ch;
  121. EN=1;
  122. EN=1;
  123. EN=0;
  124. }
  125. //--------------------------------------------------------------------------------
  126. void lcdSetPage(unsigned char page)
  127. {
  128.   page &=0x7;
  129.   page +=0xb8;
  130.   lcdCmd(page);
  131. }
  132. //--------------------------------------------------------------------------------
  133. void lcdSetColumn(unsigned char column)
  134. {
  135.   column &=0x3f;
  136.   column +=0x40;
  137.   lcdCmd(column);
  138. }
  139. //--------------------------------------------------------------------------------
  140. //character fron=5*8
  141. void lcdPlayChar(unsigned char index,unsigned char page,unsigned char colume)
  142. {
  143. unsigned char i,temp;
  144. unsigned int p;
  145. p=5*index;
  146. for(i=colume;i<colume+5;i++)
  147.   {
  148.     if(i<64)
  149.          {
  150.           CS1=1;
  151.           CS2=0;
  152.           temp=i;
  153.          }
  154.         else
  155.          {
  156.           CS1=0;
  157.           CS2=1;
  158.           temp=i-64;
  159.          }
  160.         lcdSetPage(page);
  161.         lcdSetColumn(temp);
  162.         lcdWriteByte(asii[p++]);
  163.   }
  164. }
  165. //---------------------------------------------------------------------------------
  166. //rectangle(3,0,50,60)
  167. void rectangle(void)
  168. {
  169.   unsigned char i,page;
  170.   CS1=1;
  171.   CS2=0;
  172.   lcdSetPage(0);  
  173.   lcdSetColumn(2);
  174.   EN=0;
  175.   RS=1;
  176.   RW=0;
  177.   LCD=0xff;
  178.   EN=1;
  179.   EN=1;
  180.   EN=0;
  181.   for(i=3;i<51;i++)
  182.    {
  183.      EN=0;
  184.      RS=1;
  185.      RW=0;
  186.      LCD=0x1;
  187.      EN=1;
  188.      EN=1;
  189.      EN=0;   
  190.    }
  191.   EN=0;
  192.   RS=1;
  193.   RW=0;
  194.   LCD=0xff;
  195.   EN=1;
  196.   EN=1;
  197.   EN=0;
  198. //---------------------------
  199. for(page=1;page<7;page++)
  200. {
  201.   lcdSetPage(page);  
  202.   lcdSetColumn(2);
  203.   EN=0;
  204.   RS=1;
  205.   RW=0;
  206.   LCD=0xff;
  207.   EN=1;
  208.   EN=1;
  209.   EN=0;
  210.   for(i=3;i<51;i++)
  211.    {
  212.      EN=0;
  213.      RS=1;
  214.      RW=0;
  215.      LCD=0x0;
  216.      EN=1;
  217.      EN=1;
  218.      EN=0;   
  219.    }
  220.   EN=0;
  221.   RS=1;
  222.   RW=0;
  223.   LCD=0xff;
  224.   EN=1;
  225.   EN=1;
  226.   EN=0;
  227. }
  228. //---------------------------
  229.   lcdSetPage(7);  
  230.   lcdSetColumn(2);
  231.   EN=0;
  232.   RS=1;
  233. ……………………

  234. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载(仿真工程是7.8版本的):
俄罗斯方块Proteus7.8打开.7z (47.31 KB, 下载次数: 60)





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表