SSD1306显示屏--躲避类游戏

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!");
#endif

void 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);
		}

	}
}

电路

在这里插入图片描述

效果

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值