SSD1306显示屏–躲避类游戏
要求:
使用Arduino控制OLED显示屏SSD1306(proteus中搜索UG-2864HSWEG01),再连接几个按钮。观察下面视频中的游戏,在Arduino上编程实现相同效果:效果视频
注:题目来自HBUE的硬件编程考题,本代码仍有缺陷,显示器闪动较严重,且不够简洁。此代码电路仅供学习交流使用,转载使用时请注明来处。
/*
SOFTWARE: Proteus 8 Professional
CSDN: 空白之子
公众号:硬核开发(正在建设中)
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,B00000001, B11000000,B00000001, B11000000,B00000011, B11100000,B11110011, B11100000,B11111110, B11111000,B01111110, B11111111,B00110011, B10011111,B00011111, B11111100,B00001101, B01110000,B00011011, B10100000,B00111111, B11100000,B00111111, B11110000,B01111100, B11110000,B01110000, B01110000,B00000000, B00110000 };#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endifvoid setup()
{Serial.begin(9600);display.begin(SSD1306_SWITCHCAPVCC);display.display();display.clearDisplay();pinMode (2, INPUT);
}int i, j, k, temp;
void loop()
{temp = rand() % 128;for(i = temp + 64; i > -10; i -= 3)// 调节3这个数字可以改变速度{j = 15;if (digitalRead(2) == HIGH)j = 48;display.fillCircle(18, j, 10, WHITE);display.drawRect(i, 5, 15, 20, WHITE);display.display();display.clearDisplay();if (j == 15 && i >= 5 && i <= 25){display.setTextSize(2);display.setTextColor(WHITE);display.setCursor(0,0);display.println("Game Over!");display.display();display.clearDisplay();while (1);}}
}
电路
效果