找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 4543|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

arduino+U8glib控制0.96 OLED屏源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


Arduino源程序如下:
  1. #include "U8glib.h"

  2. #define RIGHT 0
  3. #define UP    1
  4. #define LEFT  2
  5. #define DOWN  3

  6. /*
  7. * OLED
  8.       arduino       OLED
  9.       D9        >     MOSI
  10.       D10      >     SCK
  11.       D11      >     DC
  12.       D12      >     CS
  13.       D13      >     RES
  14. SW SPI COM:
  15. SCK = 10, MOSI = 9 , CS = 12, A0 = 11, RES = 13
  16. */
  17. U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11, 13);

  18. int score = 0;
  19. int level = 1;
  20. int gamespeed = 100;
  21. int i;

  22. //組成單位,4X4像素點(diǎn)的方塊。
  23. const uint8_t ele[] PROGMEM = {
  24.   0xf0, //B1111000
  25.   0xb0, //B1011000
  26.   0xd0, //B1101000
  27.   0xf0, //B1111000
  28. };

  29. //蛇
  30. void element(int x, int y) {
  31.   u8g.drawBitmapP(x,y, 1,4, ele);
  32. }

  33. struct FOOD {
  34.   int x;
  35.   int y;
  36.   int yes;  
  37. };

  38. FOOD food = {25, 30, 1};

  39. struct SNAKE {
  40.   int x[200];
  41.   int y[200];
  42.   int node;
  43.   int dir;
  44.   int lefe;
  45. };

  46. SNAKE snake = {{9,5}, {30,30}, 2, RIGHT, 0};

  47. //游戲基本界面
  48. void UI() {
  49.   u8g.drawFrame(0,1, 102,62);   //內(nèi)邊界
  50.   u8g.drawFrame(0,0, 102,64);   //外邊界
  51.   u8g.setFont(u8g_font_5x7);    //設(shè)置字體
  52.   u8g.drawStr(104,12, "LEVEL"); //等級(jí)提示
  53.   u8g.drawStr(104,40, "SCORE"); //分?jǐn)?shù)提示
  54. }

  55. void printScore(int x, int y, int s) {
  56.   u8g.setFont(u8g_font_6x10);
  57.   u8g.setPrintPos(x, y);
  58.   u8g.print(s);
  59. }

  60. void key() {
  61.   if(LOW == digitalRead(2)) {
  62.     snake.dir = DOWN;
  63.   }
  64.   if(LOW == digitalRead(3)) {
  65.     snake.dir = RIGHT;
  66.   }
  67.   if(LOW == digitalRead(4)) {
  68.     snake.dir = LEFT;
  69.   }
  70.   if(LOW == digitalRead(5)) {
  71.     snake.dir = UP;
  72.   }
  73. }

  74. void snakeGame() {

  75.   switch(snake.dir) {
  76.     case RIGHT:
  77.           snake.x[0] += 4;
  78.           if(snake.x[0]>=101) {
  79.             snake.x[0] = 1;
  80.           } break;
  81.     case UP:
  82.           snake.y[0] -= 4;
  83.           if(snake.y[0]<=1) {
  84.             snake.y[0] = 58;
  85.           } break;
  86.     case LEFT:
  87.           snake.x[0] -= 4;
  88.           if(snake.x[0]<=0) {
  89.             snake.x[0] = 97;
  90.           } break;
  91.     case DOWN:
  92.           snake.y[0] += 4;
  93.           if(snake.y[0]>=62) {
  94.             snake.y[0] = 2;
  95.           } break;
  96.   }  
  97.   
  98.   if((snake.x[0] == food.x) && (snake.y[0] == food.y)) {
  99.     snake.x[0] = food.x;
  100.     snake.y[0] = food.y;
  101.    
  102.     snake.node++;
  103.     food.yes = 1;
  104.     score += 2;
  105.     level = score/10+1;
  106.   }

  107.   for(i=snake.node-1;i>0;i--) {
  108.     snake.x[i] = snake.x[i-1];
  109.     snake.y[i] = snake.y[i-1];
  110.   }
  111. }

  112. void setup() {
  113.   pinMode(2, INPUT);
  114.   pinMode(3, INPUT);
  115.   pinMode(4, INPUT);
  116.   pinMode(5, INPUT);
  117.   
  118.   digitalWrite(2, HIGH);
  119.   digitalWrite(3, HIGH);
  120.   digitalWrite(4, HIGH);
  121.   digitalWrite(5, HIGH);
  122. }

  123. void loop() {
  124.   u8g.firstPage();
  125.   do {
  126.     UI();

  127. ……………………

  128. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
7Pin0.96 SPIsnake_arduino.rar (453.49 KB, 下載次數(shù): 32)


評(píng)分

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

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:525651 發(fā)表于 2019-5-1 17:25 | 只看該作者
不錯(cuò)哦,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:471632 發(fā)表于 2019-5-1 22:10 | 只看該作者
我手上的是iic通訊的oled 0.96
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表