wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17237|回復(fù): 12
收起左側(cè)

led點陣屏實現(xiàn)貪吃蛇游戲--硬件圖流程圖程序都有

  [復(fù)制鏈接]
ID:126273 發(fā)表于 2016-6-11 21:29 | 顯示全部樓層 |閱讀模式
本人在點陣屏上實現(xiàn)了貪吃蛇游戲,這篇文檔里包括了硬件連接圖、流程圖、全部的程序和效果圖。完全是自己做的,謝謝各位支持。當(dāng)然還可以繼續(xù)完善程序功能。

  • 實驗效果圖
1.003.jpg
1.004.jpg
1.005.jpg
1.006.jpg


實踐項目
LED貪吃蛇游戲

實驗內(nèi)容:
此單片機(jī)項目實驗的主要功能是在LED點陣屏上實現(xiàn)貪吃蛇游戲。首先在LCD1602液晶屏顯示貪吃蛇游戲的注意事項(游戲開始,按鍵對蛇的控制K2上,K6下,K2+K6右);然后在LED點陣屏上展現(xiàn)出游戲主體,通過兩個按鍵控制蛇的移動;每當(dāng)蛇吃掉一個食物得分加一,如果蛇撞到自己或者墻游戲結(jié)束,點陣屏上將出現(xiàn)“囧”,最后蜂鳴器響起音樂表示祝賀,數(shù)碼管顯示所得分?jǐn)?shù)。

  • 硬件圖
   1.001.jpg



二、流程圖

1.002.jpg

三、主要程序

  1. /*************************************************
  2. 全局頭文件  config.h
  3. **************************************************/

  4. #ifndef _CONFIG_H
  5. #define _CONFIG_H
  6. //--包含你要使用的頭文件--//
  7. #include
  8. #include
  9. #include
  10. //--定義重要關(guān)鍵詞--//
  11. #ifndef uchar
  12. #define uchar unsigned char
  13. #endif
  14. #ifndef uint
  15. #define uint unsigned int
  16. #endif
  17. /--液晶屏IO口定義--//
  18. #define LCD1602_DATAPINS P0   
  19. sbit LCD1602_E=P2^7;         
  20. sbit LCD1602_RW=P2^5;
  21. sbit LCD1602_RS=P2^6;
  22. //--定義數(shù)碼管要使用的IO口--//
  23. #define GPIO_DIG P1  
  24. //--定義點陣屏要使用的 IO--//
  25. sbit MOSIO = P3^4;              
  26. sbit R_CLK = P3^5;
  27. sbit S_CLK = P3^6;
  28. //--定義按鍵要使用的 IO--//
  29. sbit g2=P3^0;                  //k2
  30. sbit g1=P3^1;                  //k6
  31. //--定義蜂鳴器要使用的 IO--//
  32. sbit Beep =  P3^7 ;
  33. extern               int score; //得分
  34. #endif
  35. /********************************
  36.   LED頭文件   led.h
  37. ********************************/
  38. #ifndef _LED_H
  39. #define _LED_H
  40. extern              uchar code x[];              //led列選
  41. extern              uchar code y[];              //led行選
  42. extern               uchar code tab13[];          //顯示囧
  43. //顯示倒計時//
  44. extern               uchar code tab12[];         
  45. extern               uchar code tab11[];
  46. extern               uchar code tab10[];
  47. extern               uchar code tab9[];
  48. extern               uchar code tab8[];
  49. extern               uchar code tab0[];           //取模后選
  50. void st_led(void);                     //led初始化
  51. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);     //led發(fā)送數(shù)據(jù)
  52. #endif
  53. /********************************
  54.   snake頭文件  snake.h
  55. ********************************/
  56. #ifndef _SNAKE_H
  57. #define _SNAKE_H

  58. #define MAX_LENGTH 33   //最長蛇長

  59. void createFood();       //創(chuàng)造食物
  60. void snakegame();       //游戲主體(此時游戲開始)                 
  61. void expandSnake();     //延長蛇身
  62. void moveSnake();      // 移動蛇
  63. void gameOver();       //游戲結(jié)束
  64. uchar touchSelf();      //撞到自己
  65. uchar touchWall();                    //撞到墻
  66. int oppositeDirection(int t);             //方向選取
  67. int foodEat();                         // 吃食
  68. void init();                           //蛇的初始化
  69. void draw();                         //顯示蛇長
  70. #endif
  71. /********************************
  72.   LCD頭文件  lcd.h
  73. ********************************/
  74. #ifndef __LCD_H_
  75. #define __LCD_H_
  76. #define LCD1602_4PINS
  77. //—定義重要關(guān)鍵詞—//
  78. #ifndef uchar
  79. #define uchar unsigned char
  80. #endif
  81. #ifndef uint
  82. #define uint unsigned int
  83. #endif
  84. //—函數(shù)聲明—//
  85. void Lcd1602_Delay1ms(uint c); //在51單片機(jī)12MHZ時鐘下的延時函數(shù)
  86. void LcdWriteCom(uchar com); //LCD1602寫入8位命令子函數(shù)
  87. void LcdWriteData(uchar dat); //LCD1602寫入8位數(shù)據(jù)子函數(shù)
  88. void LcdInit();//LCD1602寫入8位數(shù)據(jù)子函數(shù)                                                                                    
  89. void lcd_show(void);//液晶屏顯示注意事項
  90. void Delay10ms(unsigned int c);              //延時
  91. #endif
  92. /********************************
  93.   數(shù)碼管頭文件  tube.h
  94. ********************************/
  95. #ifndef __TUBE_H_
  96. #define __TUBE_H_
  97. //—定義全局變量—//
  98. //RAM,ROM
  99. unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
  100.                                  0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
  101. #endif
  102. /********************************
  103.   主函數(shù)    main.c
  104. ********************************/
  105. //—包含你要使用的頭文件—//
  106. #include "config.h"
  107. #include "snake.h"
  108. #include "led.h"
  109. void main()
  110. {
  111.    TMOD=0x01;    //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
  112.    TH1=(65535-10000)/255;  //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出
  113.    TL1=(65535-10000)%255;
  114.    ET1=1;  //定時器中斷打開
  115.    TR1=1;  //定時器開關(guān)打開
  116.    EA=1;   //總中斷打開
  117.    init();   //蛇初始化
  118.    lcd_show();   //液晶屏顯示(K2 上,K6 下,K2+K6右)
  119.    st_led();  //點陣屏顯示游戲
  120.    while(1)
  121.    {
  122.                  snakegame();  //游戲主體(游戲開始 )
  123.    }
  124.    gameOver();    游戲結(jié)束
  125. }
  126. /********************************
  127.   Snake部分函數(shù)    snake.c
  128. ********************************/
  129. #define  _SNAKE_C
  130. #include "config.h"
  131. #include "snake.h"
  132. #include "led.h"
  133. #include "tube.h"

  134. int lastx,lasty;
  135. int score=0;       //分?jǐn)?shù)初始化
  136. uint t=0;                                  //方向選量
  137. uint left=0,top=0,right=15,bottom=15,jfood=0;

  138. struct Point
  139. {
  140.               uchar x, y;
  141. };
  142. struct Snake
  143. {
  144.               struct Point nodes[MAX_LENGTH];
  145.               uchar length;
  146.               uchar direction;
  147. } snake;
  148. struct Food
  149. {
  150.               struct Point position;
  151.               uchar exist;
  152. } food;

  153. void init()                       //蛇初始化
  154. {
  155.     snake.nodes[0].x=15;
  156.     snake.nodes[0].y=3;
  157.     snake.nodes[1].x=14;
  158.     snake.nodes[1].y=3;
  159.               snake.length=2;
  160.               snake.direction=2;
  161.     food.exist=0;
  162. }
  163. void snakegame()                    //游戲主體   
  164. {            
  165.               while(1)
  166.               {
  167.                             if (touchWall() || touchSelf())  //撞墻或自己游戲結(jié)束
  168.                                 gameOver();
  169.                             if (!food.exist)              //是否有食物
  170.                                createFood();           //創(chuàng)造食物
  171.                                food.exist=1;
  172.                   draw();                  
  173.                   lastx=snake.nodes[snake.length-1].x;
  174.                                lasty=snake.nodes[snake.length-1].y;
  175.                             if (!oppositeDirection(t))
  176.                             {
  177.                               snake.direction =t;
  178.                             }
  179.          moveSnake();       //移動蛇
  180.                             if (foodEat())         //是否吃食物
  181.                             {
  182.                                           food.exist = 0;
  183.                                           expandSnake();   蛇身擴(kuò)展
  184.                             }
  185.               }
  186. }
  187. int foodEat()                             //吃食                  
  188. {
  189.     if(snake.nodes[0].x==food.position.x&&snake.nodes[0].y==food.position.y)
  190.        return 1;
  191.     else
  192.        return 0;
  193. }
  194. int oppositeDirection(int t)                             //方向選量            
  195. {
  196.    if(t==0&&snake.direction==2)
  197.    {
  198.     return 1;
  199.    }
  200.    else if(t==2&&snake.direction==0)
  201.           {
  202.                                 return 1;
  203.                               }
  204.    else if(t==1&&snake.direction==3)
  205.           {
  206.             return 1;
  207.           }
  208.    else if(t==3&&snake.direction==1)
  209.           {
  210.             return 1;
  211.           }
  212.    else
  213.           return 0;
  214. }

  215. void moveSnake()                 //移動蛇                                         
  216. {
  217.     int k;
  218.     lastx=snake.nodes[snake.length-1].x;
  219.     lasty=snake.nodes[snake.length-1].y;
  220.     for(k=snake.length-1;k>0;k--)
  221.     {
  222.                             snake.nodes[k].x=snake.nodes[k-1].x;
  223.                             snake.nodes[k].y=snake.nodes[k-1].y;
  224.     }
  225.               if(snake.direction==2)
  226.        {
  227.                                snake.nodes[0].y-=1;
  228.                  }
  229.     else if(snake.direction==0)
  230.        {
  231.                  snake.nodes[0].y+=1;
  232.                  }
  233.     else if(snake.direction==3)
  234.        {
  235.                   snake.nodes[0].x-=1;
  236.                  }
  237.     else if(snake.direction==1)
  238.        {
  239.                   snake.nodes[0].x+=1;
  240.                  }
  241.     else;
  242. }
  243. void T0_1() interrupt 3              using 2                             
  244. {
  245.       TH1=(65535-10000)/255;
  246.                 TL1=(65535-10000)%255;
  247.                 if(g1==0&&g2==0)  {t=1;}//left
  248.                 if(g1==1&&g2==0)  {t=0;}//up
  249.                 if(g1==0&&g2==1)  {t=2;}//down
  250.                 if(g1==1&&g2==1)  {t=3;}//right
  251. }
  252. uchar touchSelf()                             //撞自己
  253. {
  254.     uchar i;
  255.     for (i=3;i<snake.length-1;i++)
  256.     {
  257.        if(snake.nodes[0].x==snake.nodes[i].x&&snake.nodes[0].y==snake.nodes[i].y)
  258.        return 1;
  259.     }
  260.     return 0;
  261. }
  262. uchar touchWall()                 //撞墻
  263. {
  264.     uchar x1=snake.nodes[0].x;
  265.     uchar y1=snake.nodes[0].y;
  266.     if(x1right||y1bottom)
  267.        return 1;
  268.     else
  269.        return 0;
  270. }
  271. void gameOver()               //游戲結(jié)束                                          
  272. {            
  273.    int k,n;
  274.    while(1)
  275.               {
  276.                             for(n = 0; n < 50; n++)
  277.                             {
  278.                                           for(k = 0; k < 16; k++)                                                                                                               
  279.                                           {            
  280.                                                         HC595SendData(~tab13[2*k +1],~tab13[2*k],tab0[2*k],tab0[2*k + 1]);              
  281.                                           }
  282.                             }
  283.               GPIO_DIG = ~DIG_CODE[score];  //數(shù)碼管積分
  284.               beep_show();                //蜂鳴器響
  285.      }
  286. }
  287. void expandSnake()              //蛇身擴(kuò)展                                                      
  288. {
  289.     snake.nodes[snake.length].x=lastx;
  290.     snake.nodes[snake.length].y=lasty;
  291.     snake.length++;
  292.               score++;
  293. }
  294. void createFood()    //創(chuàng)造食物   
  295. {
  296.               int i;
  297. label:
  298.               jfood+=3;            
  299.               if(jfood>=500) jfood=0;
  300.               food.position.x=((int)rand()%16);
  301.     food.position.y=((int)rand()%16);
  302.     for(i=0;i<=snake.length-1;i++)
  303.               {
  304.               if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)
  305.               goto label;
  306.               }
  307. }
  308. void draw()       //顯示蛇長
  309. {
  310.        uint j,i,m,n;
  311.                  for(m=0;m<16;m++)
  312.                                  {
  313.            for(i=0;i<snake.length;i++)
  314.               {
  315.                                              for(j=0;j<snake.length;j++)
  316.                          if(m==i||m==j)               
  317.                           HC595SendData(  y[2*(snake.nodes[j].x)-2],y[2*(snake.nodes[j].x)-1],
  318.                                           x[2*(snake.nodes[i].y)-2],x[2*(snake.nodes[i].y)-1]);
  319.                                    }
  320.                             for(j=0;j<16;j++)
  321.                                {
  322.                                 if(food.position.x==j||food.position.y==j)                                            
  323.                                  HC595SendData(  y[2*(food.position.x)-2],y[2*(food.position.x)-1],
  324.                                        x[2*(food.position.y)-2],x[2*(food.position.y)-1]);
  325.            }
  326.                             for(n=25;n>0;n--)
  327.                                {
  328.                                HC595SendData(0xff,0xff,0,0);            
  329.                                }
  330.                               }
  331. }
  332. /********************************
  333.   LED部分函數(shù)    led.c
  334. ********************************/
  335. #define  _LED_C
  336. #include "config.h"
  337. #include "led.h"
  338. #include "snake.h"
  339. //點陣顯示數(shù)組
  340. uchar code y[]={       //選列
  341. 0xff,0xfe, 0xff,0xfd,0xff,0xfb,0xff,0xf7, 0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,
  342. 0xfe,0xff, 0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,0xff            
  343. };
  344. uchar code x[]={                    //選行
  345. 0x00,0x01, 0x00,0x02,              0x00,0x04,0x00,0x08, 0x00,0x10,0x00,0x20,0x00,0x40, 0x00,0x80,
  346. 0x01,0x00, 0x02,0x00,              0x04,0x00 , 0x08,0x00, 0x10,0x00, 0x20,0x00,0x40,0x00, 0x80,0x00,           
  347. };
  348. uchar code tab0[] =  //取模后選
  349. {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
  350. 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
  351. uchar code tab8[] =
  352. {0,0,0,0,0,0,24,60,36,66,66,66,66,32,66,24,66,32,66,64,66,64,66,66,36,34,24,28,0,0,0,0};
  353. uchar code tab9[] =
  354. {0,0,0,0,0,0,24,60,36,66,66,66,66,66,66,32,66,32,66,16,66,8,66,4,36,66,24,126,0,0,0,0};
  355. uchar code tab10[] =
  356. {0,0,0,0,0,0,24,8,36,14,66,8,66,8,66,8,66,8,66,8,66,8,66,8,36,8,24,62,0,0,0,0};
  357. uchar code tab11[] =
  358. {0,0,0,0,0,0,24,24,36,36,66,66,66,66,66,66,66,66,66,66,66,66,66,66,36,36,24,24,0,0,0,0};
  359. uchar code tab12[] =   //顯示倒計時
  360. {0,0,0,0,0,0,60,28,34,34,34,65,1,65,1,65,1,65,113,65,33,65,34,65,34,34,28,28,0,0,0,0};
  361. uchar code tab13[] =   //顯示“囧”
  362. {0,0,0,0,254,63,6,48,102,51,54,54,62,60,30,60,6,48,246,55,54,54,54,54,54,54,54,54,254,63,0,0};
  363. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)   // 595鎖存器發(fā)送數(shù)據(jù)
  364. {
  365.               uchar i;
  366.      //發(fā)送第一個字節(jié)
  367.               for(i=0;i<8;i++)
  368.               {
  369.                             MOSIO = BT3 >> 7 ;                //從高位到低位
  370.                             BT3 <<= 1;

  371.                             S_CLK = 0;
  372.                             S_CLK = 1;                           
  373.               }
  374.      //發(fā)送第一個字節(jié)
  375.               for(i=0;i<8;i++)
  376.               {
  377.                             MOSIO = BT2 >>7;                //從高位到低位
  378.                             BT2 <<= 1;

  379.                             S_CLK = 0;
  380.                             S_CLK = 1;            
  381.               }
  382.       //發(fā)送第一個字節(jié)
  383.     for(i=0;i<8;i++)
  384.               {
  385.                             MOSIO = BT1 >> 7;                //從高位到低位
  386.                             BT1 <<= 1;

  387.                             S_CLK = 0;
  388.                             S_CLK = 1;            
  389.               }
  390.      //發(fā)送第一個字節(jié)
  391.         for(i=0;i<8;i++)
  392.               {
  393.                             MOSIO = BT0 >> 7;                            //從高位到低位

  394.                             BT0 <<= 1;
  395.                             S_CLK = 0;
  396.                             S_CLK = 1;
  397.               }
  398.   //輸出
  399.     R_CLK = 0; //set dataline low
  400.               R_CLK = 1; //片選
  401.               R_CLK = 0; //set dataline low
  402. }                                                                           
  403. void st_led(void)   //點陣屏顯示游戲
  404. {
  405.               int k, i, ms;
  406.               i = 60;                            //顯示時間                                                                                                                                                                       
  407.               {
  408.                             HC595SendData(0xff,0xff,0,0);
  409.                             for(ms = i; ms > 0; ms--)
  410.                             {
  411.                                           for(k = 0; k < 16; k++)                                                                                                
  412.                                           {            
  413.                                                         HC595SendData(~tab8[2*k +1],~tab8[2*k],tab0[2*k],tab0[2*k + 1]);              
  414.                                           }
  415.                             }
  416.                             HC595SendData(0xff,0xff,0,0);   //清屏                                                                                                               
  417.                             for(ms = i; ms > 0; ms--)
  418.                             {
  419.                                           for(k = 0; k < 16; k++)                                                                                   
  420.                                           {            
  421.                                                         HC595SendData(~tab9[2*k +1],~tab9[2*k],tab0[2*k],tab0[2*k + 1]);              
  422.                                           }
  423.                             }            
  424.                             HC595SendData(0xff,0xff,0,0);              //清屏                                                                                                               
  425.                             for(ms = i; ms > 0; ms--)
  426.                             {
  427.                                           for(k = 0; k < 16; k++)                                                                                                               
  428.                                           {            
  429.                                                         HC595SendData(~tab10[2*k +1],~tab10[2*k],tab0[2*k],tab0[2*k + 1]);              
  430.                                           }
  431.                             }
  432.                             HC595SendData(0xff,0xff,0,0);              //清屏                                                                                                                  
  433.                             for(ms = i; ms > 0; ms--)
  434.                             {
  435.                                           for(k = 0; k < 16; k++)                                                                                                
  436.                                           {            
  437.                                                         HC595SendData(~tab11[2*k +1],~tab11[2*k],tab0[2*k],tab0[2*k + 1]);              
  438.                                           }
  439.                             }            
  440.                             HC595SendData(0xff,0xff,0,0);              //清屏                                                                                                                       
  441.                   for(ms = 120; ms > 0; ms--)
  442.                             {
  443.                                           for(k = 0; k < 16; k++)                                                                                                                                                         
  444.                                           {            
  445.                                                         HC595SendData(~tab12[2*k +1],~tab12[2*k],tab0[2*k],tab0[2*k + 1]);
  446.                                           }                                                      
  447.                             }                                                                                                                                   
  448.               }
  449. }
  450. /********************************
  451.   LCD部分函數(shù)    lcd.c
  452. ********************************/
  453. #define  _LCD_C
  454. #include"lcd.h"
  455. #include "config.h"
  456. /*****************************************************************
  457. * 函 數(shù) 名         : Lcd1602_Delay1ms
  458. * 函數(shù)功能                               : 延時函數(shù),延時1ms
  459. * 輸    入         : c
  460. ****************************************************************/
  461. void Lcd1602_Delay1ms(uint c) //誤差 0us
  462. {
  463.     uchar a,b;
  464.               for (; c>0; c--)
  465.               {
  466.                             for (b=199;b>0;b--)
  467.                             {
  468.                                             for(a=1;a>0;a--);
  469.                             }     
  470.               }               
  471. }
  472. /****************************************************************
  473. * 函 數(shù) 名         : LcdWriteCom
  474. * 函數(shù)功能                               : 向LCD寫入一個字節(jié)的命令

  475. *****************************************************************/
  476. #ifndef               LCD1602_4PINS //當(dāng)沒有定義這個LCD1602_4PINS時            
  477. void LcdWriteCom(uchar com)              //寫入命令
  478. {
  479.               LCD1602_E = 0;  //使能清零  
  480.               LCD1602_RS = 0;              //選擇發(fā)送命令  
  481.               LCD1602_RW = 0;              //選擇寫入  
  482.             
  483.               LCD1602_DATAPINS = com;  //放入命令  
  484.               Lcd1602_Delay1ms(1);                //等待數(shù)據(jù)穩(wěn)定                           

  485.               LCD1602_E = 1;                 //寫入時序      
  486.               Lcd1602_Delay1ms(5); //保持時間               
  487.               LCD1602_E = 0;
  488. }
  489. #else
  490. void LcdWriteCom(uchar com)                //寫入命令
  491. {
  492.               LCD1602_E = 0;                //使能清零
  493.               LCD1602_RS = 0;                //選擇寫入命令
  494.               LCD1602_RW = 0;                //選擇寫入

  495.               LCD1602_DATAPINS = com;              //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
  496.               Lcd1602_Delay1ms(1);

  497.               LCD1602_E = 1;  //寫入時序            
  498.               Lcd1602_Delay1ms(5);
  499.               LCD1602_E = 0;

  500.               LCD1602_DATAPINS = com << 4;   //寫入低四位
  501.               Lcd1602_Delay1ms(1);

  502.               LCD1602_E = 1;              //寫入時序
  503.               Lcd1602_Delay1ms(5);
  504.               LCD1602_E = 0;
  505. }
  506. #endif
  507. /****************************************************************
  508. * 函 數(shù) 名       : LcdWriteData
  509. * 函數(shù)功能                            : 向LCD寫入一個字節(jié)的數(shù)據(jù)
  510. * 輸    入       : dat
  511. *****************************************************************/                              
  512. #ifndef               LCD1602_4PINS                                             
  513. void LcdWriteData(uchar dat)              //寫入數(shù)據(jù)                           
  514. {
  515.               LCD1602_E = 0;              //使能清零
  516.               LCD1602_RS = 1;              //選擇輸入數(shù)據(jù)
  517.               LCD1602_RW = 0;              //選擇寫入

  518.               LCD1602_DATAPINS = dat;  //寫入數(shù)據(jù)
  519.               Lcd1602_Delay1ms(1);

  520.               LCD1602_E = 1;  //寫入時序
  521.               Lcd1602_Delay1ms(5);   //保持時間
  522.               LCD1602_E = 0;
  523. }
  524. #else
  525. void LcdWriteData(uchar dat)                            //寫入數(shù)據(jù)            
  526. {
  527.               LCD1602_E = 0;                //使能清零
  528.               LCD1602_RS = 1;                //選擇寫入數(shù)據(jù)
  529.               LCD1602_RW = 0;              //選擇寫入

  530.               LCD1602_DATAPINS = dat;//由于4位的接線是接到P0口的高四位,所以傳送高四位不用改            
  531.               Lcd1602_Delay1ms(1);

  532.               LCD1602_E = 1;                //寫入時序
  533.               Lcd1602_Delay1ms(5);
  534.               LCD1602_E = 0;

  535.               LCD1602_DATAPINS = dat << 4;  //寫入低四位
  536.               Lcd1602_Delay1ms(1);

  537.               LCD1602_E = 1;              //寫入時序
  538.               Lcd1602_Delay1ms(5);
  539.               LCD1602_E = 0;
  540. }
  541. #endif
  542. /*********************************************************************
  543. * 函 數(shù) 名       : LcdInit()
  544. * 函數(shù)功能                            : 初始化LCD屏
  545. ********************************************************************/                              
  546. #ifndef                            LCD1602_4PINS
  547. void LcdInit()                                          //LCD初始化子程序                                          
  548. {
  549.               LcdWriteCom(0x38);   //開顯示
  550.               LcdWriteCom(0x0c);   //開顯示不顯示光標(biāo)
  551.               LcdWriteCom(0x06);   //寫一個指針加1
  552.               LcdWriteCom(0x01);   //清屏
  553.               LcdWriteCom(0x80);   //設(shè)置數(shù)據(jù)指針起點
  554. }
  555. #else
  556. void LcdInit()                                          //LCD初始化子程序                                          
  557. {
  558.               LcdWriteCom(0x32);              //將8位總線轉(zhuǎn)為4位總線
  559.               LcdWriteCom(0x28);              //在四位線下的初始化
  560.               LcdWriteCom(0x0c);   //開顯示不顯示光標(biāo)
  561.               LcdWriteCom(0x06);   //寫一個指針加1
  562.               LcdWriteCom(0x01);   //清屏
  563.               LcdWriteCom(0x80);   //設(shè)置數(shù)據(jù)指針起點
  564. }
  565. #endif
  566. /********************************
  567.   LCD部分函數(shù)    lcd_show.c
  568. ********************************/
  569. #define  _LCD_C
  570. #include"lcd.h"
  571. #include "config.h"

  572. unsigned char PuZh[30] = "    snake game   snake game ";
  573. unsigned char CnCh[30] = "    k2 up k6 down k2+k6 right";

  574. void Delay10ms(unsigned int c)  //延時
  575. {
  576.     unsigned char a, b;
  577.                   for (;c>0;c--)
  578.               {
  579.                             for (b=38;b>0;b--)
  580.                             {
  581.                                           for (a=130;a>0;a--);
  582.                             }         
  583.               }      
  584. }
  585. void lcd_show(void)
  586. {
  587.               unsigned char i;
  588.               LcdInit();  //初始化
  589.               //--寫第一行--//
  590.               for(i=0; i<30; i++)
  591.               {
  592.                             LcdWriteData(PuZh[i]);            
  593.               }
  594.               LcdWriteCom(0xC0);
  595.               for(i=0; i<30; i++)
  596.               {
  597.                             LcdWriteData(CnCh[i]);
  598.               }
  599.               LcdWriteCom(0x07);
  600.               {                                         
  601.                             LcdWriteCom(0xC0);
  602.                             for(i=0; i<30; i++)
  603.                             {
  604.                                           LcdWriteData(CnCh[i]);
  605.                                           Delay10ms(75);
  606.                             }
  607.               }                                                      
  608. }
  609. /********************************
  610.   beep部分函數(shù)    beep.c
  611. ********************************/
  612. #include "config.h"  
  613. unsigned char n=0;       //n為節(jié)拍常數(shù)變量   
  614. unsigned char code music_tab[] ={  
  615. 0x18, 0x30, 0x1C , 0x10,   //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),     
  616. 0x20, 0x40, 0x1C , 0x10,  
  617. 0x18, 0x10, 0x20 , 0x10,  
  618. 0x1C, 0x10, 0x18 , 0x40,  
  619. 0x1C, 0x20, 0x20 , 0x20,  
  620. 0x1C, 0x20, 0x18 , 0x20,  
  621. 0x20, 0x80, 0xFF , 0x20,  
  622. 0x30, 0x1C, 0x10 , 0x18,  
  623. 0x20, 0x15, 0x20 , 0x1C,  
  624. 0x20, 0x20, 0x20 , 0x26,  
  625. 0x40, 0x20, 0x20 , 0x2B,  
  626. 0x20, 0x26, 0x20 , 0x20,  
  627. 0x20, 0x30, 0x80 , 0xFF,  
  628. 0x20, 0x20, 0x1C , 0x10,  
  629. 0x18, 0x10, 0x20 , 0x20,  
  630. 0x26, 0x20, 0x2B , 0x20,  
  631. 0x30, 0x20, 0x2B , 0x40,  
  632. 0x20, 0x20, 0x1C , 0x10,  
  633. 0x18, 0x10, 0x20 , 0x20,  
  634. 0x26, 0x20, 0x2B , 0x20,  
  635. 0x30, 0x20, 0x2B , 0x40,  
  636. 0x20, 0x30, 0x1C , 0x10,  
  637. 0x18, 0x20, 0x15 , 0x20,  
  638. 0x1C, 0x20, 0x20 , 0x20,  
  639. 0x26, 0x40, 0x20 , 0x20,  
  640. 0x2B, 0x20, 0x26 , 0x20,  
  641. 0x20, 0x20, 0x30 , 0x80,  
  642. 0x20, 0x30, 0x1C , 0x10,  
  643. 0x20, 0x10, 0x1C , 0x10,  
  644. 0x20, 0x20, 0x26 , 0x20,  
  645. 0x2B, 0x20, 0x30 , 0x20,  
  646. 0x2B, 0x40, 0x20 , 0x15,  
  647. 0x1F, 0x05, 0x20 , 0x10,  
  648. 0x1C, 0x10, 0x20 , 0x20,  
  649. 0x26, 0x20, 0x2B , 0x20,  
  650. 0x30, 0x20, 0x2B , 0x40,  
  651. 0x20, 0x30, 0x1C , 0x10,  
  652. 0x18, 0x20, 0x15 , 0x20,  
  653. 0x1C, 0x20, 0x20 , 0x20,  
  654. 0x26, 0x40, 0x20 , 0x20,  
  655. 0x2B, 0x20, 0x26 , 0x20,  
  656. 0x20, 0x20, 0x30 , 0x30,  
  657. 0x20, 0x30, 0x1C , 0x10,  
  658. 0x18, 0x40, 0x1C , 0x20,  
  659. 0x20, 0x20, 0x26 , 0x40,  
  660. 0x13, 0x60, 0x18 , 0x20,  
  661. 0x15, 0x40, 0x13 , 0x40,  
  662. 0x18, 0x80, 0x00  
  663. };   
  664. void int0()  interrupt 1 using 1   //采用中斷控制節(jié)拍  
  665. {  TH0=0xd8;  
  666.    TL0=0xef;  
  667.    n--;  
  668. }     
  669. void delay (unsigned char m)       //控制頻率延時
  670. {  
  671. unsigned i=3*m;  
  672. while(--i);  
  673. }  
  674. void delayms(unsigned char a)      //毫秒延時子程序
  675. {  
  676.   while(--a);                    //采用while(--a) 不要采用while(a--)
  677. }  

  678. void beep_show()  
  679. { unsigned char p,m;     //m為頻率常數(shù)變量
  680.   unsigned char i=0;  
  681.   TMOD&=0x0f;  
  682.   TMOD|=0x01;  
  683.   TH0=0xd8;TL0=0xef;  
  684.   IE=0x82;  
  685. play:  
  686.    while(1)  
  687.     {  
  688.     a: p=music_tab[i];  
  689.    if(p==0x00)    { i=0, delayms(1000); goto play;   //如果碰到結(jié)束符,延時1秒,回到開始再來一遍
  690.        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}   //若碰到休止符,延時100ms,繼續(xù)取下一音符  
  691.         else     {m=music_tab[i++], n=music_tab[i++];} //取頻率常數(shù) 和 節(jié)拍常數(shù)     
  692.         TR0=1;      //開定時器                                          
  693.          while(n!=0) Beep=~Beep,delay(m);   //等待節(jié)拍完成, 通過輸出音頻                          
  694.        TR0=0;             //關(guān)定時器                                   
  695.     }  
  696. }
復(fù)制代碼

本制作的完整文檔下載:
點陣屏實現(xiàn)貪吃蛇游戲.docx (3.06 MB, 下載次數(shù): 120)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:148621 發(fā)表于 2016-11-20 16:11 | 顯示全部樓層
好厲害!!!!!大神跪拜~!
回復(fù)

使用道具 舉報

ID:148621 發(fā)表于 2016-11-29 22:04 | 顯示全部樓層
樓主,請問595怎么用的呀.有點沒看懂呢QAQ
回復(fù)

使用道具 舉報

ID:89286 發(fā)表于 2017-3-26 23:26 | 顯示全部樓層
thanks for sharing. amazing...
回復(fù)

使用道具 舉報

ID:184098 發(fā)表于 2017-3-28 14:37 | 顯示全部樓層
一直搞不明白怎么做到的!大神!膜拜!
回復(fù)

使用道具 舉報

ID:184207 發(fā)表于 2017-3-28 18:57 | 顯示全部樓層
加工客觀比較高看過沒
回復(fù)

使用道具 舉報

ID:335292 發(fā)表于 2018-5-21 22:31 | 顯示全部樓層
編譯出來,怎么會這么多錯誤啊
回復(fù)

使用道具 舉報

ID:343482 發(fā)表于 2018-6-3 22:27 | 顯示全部樓層
x1right為什么找不到的呢?是什么意思啊?
回復(fù)

使用道具 舉報

ID:343482 發(fā)表于 2018-6-3 22:28 | 顯示全部樓層
x1right是什么意思啊?為什么編譯出來不認(rèn)?
回復(fù)

使用道具 舉報

ID:311166 發(fā)表于 2018-6-11 11:14 | 顯示全部樓層
厲害了
回復(fù)

使用道具 舉報

ID:90677 發(fā)表于 2018-8-2 11:08 | 顯示全部樓層
樓主666,慢慢看慢慢學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:382308 發(fā)表于 2018-8-2 20:57 | 顯示全部樓層
大神太強(qiáng)了
回復(fù)

使用道具 舉報

ID:1065964 發(fā)表于 2023-3-10 10:36 | 顯示全部樓層
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
国产xxx精品视频大全| 国产激情自拍视频| 日本中文字幕电影在线观看| 狠狠久久伊人| 国产清纯在线一区二区www| 日韩最新av在线| 真人做人试看60分钟免费| 国产精品suv一区二区三区| 日本高清网站| 国产一区网站| 亚洲一区二区av电影| 国产精品mp4| 国产香蕉精品视频| 国产红桃视频| 欧洲精品99毛片免费高清观看| 久久免费的精品国产v∧| 欧美激情一区二区三区高清视频| 日韩爱爱小视频| 极品美女一区二区三区视频| 依依综合在线| 99久久99久久免费精品蜜臀| 欧美乱大交做爰xxxⅹ性3| 日韩av片网站| 免费视频中文字幕| 91伊人久久| 久久精品人人做人人综合| 国模极品一区二区三区| 日本人添下边视频免费| 尤物视频免费| 国产一区二区在线视频你懂的| 中文字幕在线不卡一区| 国产精品a久久久久久| 亚洲做受高潮无遮挡| 18激情网站| 久久99视频| 在线免费一区三区| 久久五月天婷婷| 日韩欧美中文字幕一区二区| 狠狠色伊人亚洲综合网站l| 国产精品婷婷| 亚洲视频日韩精品| 538任你躁在线精品免费| 亚洲精品人成网在线播放影院| 亚洲欧美在线人成swag| 亚洲日本一区二区三区| 91久久国产自产拍夜夜嗨| 欧美人妻精品一区二区免费看| 亚洲精品97久久久babes| 国产精品美女| 中文字幕精品av| av亚洲天堂网| 日本一二三视频| 国产精品美女久久久久久不卡| 欧美在线观看一区| 一区二区精品在线观看| 99热这里精品| 高清亚洲高清| 一区二区三区精密机械公司| 国产精品精品软件视频| 日本一区二区免费在线观看| 美女免费久久| 波多野结衣在线一区| 欧美在线视频一二三| 国产伦理片在线观看| 欧美性猛交p30| 久久激情中文| 欧美插天视频在线播放| 免费成人深夜夜行p站| 特黄特色特刺激视频免费播放| 亚洲调教视频在线观看| 亚洲欧美资源在线| 中文字幕亚洲日本| av高清在线| 久热国产精品| 欧美夫妻性生活视频| 亚洲自拍偷拍图| 全色精品综合影院| 精品一区二区三区香蕉蜜桃 | 五月婷婷色丁香| 四虎影院观看视频在线观看| 久久亚洲一级片| 亚洲已满18点击进入在线看片 | 97超碰人人看| 天天干夜夜夜操| 在线看片欧美| 欧美巨乳美女视频| 少妇精品无码一区二区免费视频| 欧洲一区av| 成人毛片老司机大片| 91久久精品国产91性色| 无码任你躁久久久久久久| 成人看片在线观看| 欧美日韩精品中文字幕| 男人日女人的bb| chien国产乱露脸对白| 91精品综合久久久久久久久久久| 亚洲欧美成人一区二区在线电影| 中文字幕乱妇无码av在线| 日韩黄色视屏| 国产成人自拍在线| 成人综合网网址| 一级爱爱免费视频| 国产精品日本一区二区三区在线| 在线观看一区不卡| 久久久久人妻精品一区三寸| www视频网站| 视频一区在线播放| 国产精品福利网| 久久精品视频2| 99精品女人在线观看免费视频| 在线观看视频一区二区| 一本久道中文无码字幕av| 天天摸天天操天天干| 美腿丝袜亚洲三区| 成人福利视频网| 99精品在线视频观看| 人人网欧美视频| 亚洲午夜性刺激影院| 久久久久亚洲av无码a片| 三级资源在线| 黄色成人在线播放| caopor在线视频| 午夜视频免费在线观看| 国产91精品一区二区麻豆网站 | 日本成本人片免费观看| 国产美女在线观看一区| 国产v亚洲v天堂无码| 特黄aaaaaaaaa真人毛片| 四季av在线一区二区三区| 久久视频在线观看免费| 久久久精品国产sm调教| 国产伊人久久| 精品伦理精品一区| 一区二区黄色片| 丰乳肥臀在线| 欧美综合天天夜夜久久| 超碰在线免费av| 国产黄色片在线播放| 中文字幕日韩精品一区| 丰满少妇大力进入| 国产aa视频| 91一区二区三区在线观看| 亚洲激情图片| 岛国在线最新| 国产不卡一区视频| 欧美二区在线| 夜夜夜操操操| 韩国欧美一区二区| 久久久久久草| 免费午夜一级| 福利电影一区二区三区| 日韩一区二区三区资源| 日本三级很黄试看120秒| 韩国女主播成人在线观看| 九九九九精品九九九九| 国产伦精品一区二区三区视频小说 | 免费黄色网址在线观看| 岛国av在线不卡| 四虎成人在线播放| 久久五月精品| 在线免费观看视频一区| 亚州av综合色区无码一区| 色婷婷在线播放| 欧美精品少妇一区二区三区| 国产精品无码久久久久一区二区| 午夜影视一区二区三区| 日韩久久免费av| 国产91在线播放九色| 2019中文亚洲字幕| 尤物精品国产第一福利三区 | 欧美日韩国产观看视频| 在线播放中文一区| 日韩不卡av在线| 中文成人在线| 亚洲人成在线免费观看| 日产电影一区二区三区| 伊人久久大香线蕉av不卡| 国语对白做受69| 肥臀熟女一区二区三区| 亚洲三级网站| 99re国产在线播放| 国产精品一区二区三区高清在线 | 日日夜夜人人| 成人av网在线| 97碰在线视频| 欧美美女搞黄| 色素色在线综合| 午夜在线观看一区| 国产免费区一区二区三视频免费| 久久精品电影网| 一级全黄少妇性色生活片| 欧美成人tv| 国产精品一区二区你懂得| 免费在线日本| 国产精品久久久久一区二区三区 | 一区二区三区网址| 91精选在线| 日韩精品最新网址| 久久久久久国产精品免费播放| 黄色网在线播放| 91麻豆精品国产91久久久资源速度| 奇米网一区二区| 日韩一区二区三区精品视频第3页| 中文字幕在线日韩 | 激情在线视频| 在线精品视频一区二区三四| 国产精品久久国产精麻豆96堂| 97成人在线| 韩国国内大量揄拍精品视频| 亚洲av片在线观看| 国产高清在线观看免费不卡| 久久久亚洲国产精品| 国产素人视频在线观看| 精品国产乱码久久久久久闺蜜| 91精品国产乱码在线观看| 中文字幕一区二区三区在线视频 | 97国产在线观看| 中文娱乐网av| 成人a区在线观看| 国产精品少妇在线视频| a级片在线免费观看| 在线观看国产成人av片| 狠狠综合久久av一区二区| 国模大尺度一区二区三区| 蜜臀av无码一区二区三区| 91在线中文| 亚洲欧洲午夜一线一品| 国产三级三级在线观看| 极品美女销魂一区二区三区免费| 免费人成自慰网站| 污视频在线免费观看网站| 亚洲免费小视频| 午夜精品久久久久久久第一页按摩 | 欧美视频精品一区| 亚洲一区电影在线观看| 日韩欧美精品一区| 精品不卡在线| 一本大道香蕉久在线播放29| 91精品国产福利| 国产成人精品一区二区色戒| 美女精品在线观看| 男人天堂新网址| 国产精品69xx| 久久久精品免费| 欧美激情一级二级三级在线视频| 久久午夜色播影院免费高清| 日本精品一二三| 麻豆一区二区麻豆免费观看| 91日韩在线视频| 偷偷要色偷偷| 日韩一二三四区| 国产精品久久久久久久久久久久久久久久久久 | 天天爱天天做天天爽| 日韩精品电影在线| 国产肥臀一区二区福利视频| gay欧美网站| 78色国产精品| 国内一级毛片| 欧美丝袜第一区| 性无码专区无码| 久久99国产乱子伦精品免费| 看欧美ab黄色大片视频免费| 男人天堂v视频| 色哦色哦哦色天天综合| 欧美超碰在线观看| 国产精品原创巨作av| 天堂av手机在线| 欧美电影完整版在线观看| 国产99视频精品免费视频36| 小小水蜜桃在线观看| 日韩电影网在线| 男人插曲女人的视频| 中文字幕欧美一| 欧美性猛交xxxxx少妇| 欧美一级久久| www.夜夜爽| 国产精品17p| 久中文字幕一区| 2020国产在线视频| 羞羞色国产精品| av一级毛片| 欧美成人vr18sexvr| 亚洲 另类 春色 国产| 亚洲色图20p| 日本熟妇一区二区| 精品午夜一区二区三区在线观看| 天天操精品视频| 国产探花在线精品| 成年人黄色在线观看| 韩国美女久久| 91色在线观看| www.亚洲资源| 久久91精品国产| 男男gay免费网站| 精品粉嫩超白一线天av| t66y永久入口地址| 精品国产鲁一鲁一区二区张丽| 青青视频在线免费观看| 成人午夜电影久久影院| 亚洲v国产v欧美v久久久久久| 亚洲电影av| 99re精彩视频| 欧美美女在线| 国产精品三级一区二区| 3d动漫一区二区三区在线观看| 国产精品国产精品国产专区不卡| 久久久久久久久免费视频| 91av在线影院| 水莓100在线视频| 久久久av免费| 国产精品久久久久永久免费看| 亚洲国产天堂久久综合网| 国产视频网站在线观看| 欧美日韩在线免费视频| 中国女人内谢69xxxx免费视频| 夜夜嗨av一区二区三区四季av | 久久国产精品99国产| 亚洲一区二区中文字幕在线观看| 精品国产一区二区三区av片| 中文字幕人妻熟女人妻洋洋| 亚洲精品影片| 艳母动漫在线观看| 成人精品在线| 亚洲v欧美v另类v综合v日韩v| 97久久香蕉国产线看观看| 国产精品视频免费观看| 国产乱码在线| 高清国产一区| 精精国产xxxx视频在线野外| 91手机在线播放| 97天天综合网| 999热视频在线观看| av免费不卡国产观看| 亚洲第一中文字幕| 国产剧情av片巨作醉酒女邻居 | 亚洲色图欧美激情| 亚洲天堂一二三| 1000部国产精品成人观看| 少妇久久久久久久| 国产精品久久免费看| 在线观看国产区| 日韩理论片在线| 国产一区二区在线不卡| 亚洲精品成人在线| 精品久久久中文字幕人妻| 亚洲va天堂va国产va久| 成人久久精品人妻一区二区三区| 岛国精品视频在线播放| 中文字幕人成高视频| 欧美日韩色一区| 国内精品免费一区二区三区| 日韩亚洲欧美中文三级| 看成年女人免费午夜视频| 亚洲欧洲av一区二区| 日本在线аv| 韩国精品美女www爽爽爽视频| 成年人视频网站在线| 国产精品美女主播| 51漫画成人app入口| 久久久久久艹| 成人在线tv视频| 日韩黄色片视频| 欧美搞黄网站| 国产精品嫩草69影院| 免费日本视频一区| 老熟妇高潮一区二区三区| www日韩大片| 亚洲天堂免费av| 欧美香蕉大胸在线视频观看| 亚洲一| 精品国产三级a在线观看| 天天色天天爽| 九九视频这里只有精品| av在线播放av| 成人av免费电影| 91精品一区| 91九色在线观看视频| 狠狠噜噜久久| 成人午夜剧场视频网站| 成人免费的视频| 一级黄色免费看| 欧美亚洲动漫另类| 狠狠色噜噜狠狠| 欧美疯狂性受xxxxx另类| 国产剧情在线| 欧美日韩在线一二三| 噜噜噜天天躁狠狠躁夜夜精品| wwww.国产| 日韩精品每日更新| 福利一区二区三区四区| 亚洲一区二区三区免费视频| 日韩中文字幕久久久经典网| 亚洲欧美日韩精品久久亚洲区 | 性猛交富婆╳xxx乱大交一| 在线免费观看羞羞视频一区二区| 黄色av免费在线看| 国内一区在线| 欧美成人专区| 国产人成视频在线观看| aaa亚洲精品|