概述:本实验基于stm32最小系统、0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏。项目源码地址:点击下载。

硬件要求:

普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电位的电压,上下摇动控制另一个电位的电压,并可垂直按下实现一个普通的按键。

0.96寸OLED 单色屏幕,通过spi协议与单片机通信。

stm32f103c8t6最小系统开发板。

上面所用到的器件都可以在淘宝上买到,价格不贵。

器件齐全后,用杜邦线将摇杆和oled正确地连接到stm32开发板上,注意各个器件的电源需要接到同一电压,下图是接线说明:

接好线之后,将源码编译下载,进入调试,正常运行如下图所示,如果屏幕出现花屏,那么将res引脚接到GND进行复位,再重新进行调试或单片机复位:

接着按下摇杆的中键就可以进入游戏:

屏幕的上方显示得分,通过按上键可以将下落方块顺时针旋转90度。

游戏失败后可按下摇杆中键重新开始游戏。

源码文件:

源码下载后用keil4打开,每个文件的作用如下所示:

下面说明main函数:

int main(void)
{RCC_PCLK1Config(RCC_HCLK_Div4);USART1_Configuration(); //初始化串口TIME_Configuration(); //初始化定时器ADC_Configuration(); //初始化摇杆的ad采集OLED_Init(); //oled初始化默认参数GameReady(); //进入游戏准备界面Tick_Updata(&sysms);while (1){event=JoyState(); //获取摇杆的状态if(If_TimeOut(&sysms,500)){ //500ms自动下移一格Tick_Updata(&sysms);event=3;}ret=Game_InputHandle(event);//进行方块运动if(ret){ //ret=1 表示屏幕需刷新GameMapToLcdCache(); //将像素从游戏图像gamemap位图经过放大后写进LcdCache显存OLED_Updata();//将LcdCache[8][128]显存的数据发送到屏幕进行显示sprintf(str,"Score=%d",GameScore);OLED_DispString(0,0,str); //屏幕上方显示分数}}
}

event代表摇杆输入的事件,然后键事件传给GAME函数进行游戏的操作,如果没有摇杆可以用按键代替,一个按键代表一种事件,改写JoyState函数就行了。

这里的GameMapToLcdCache()函数,起到像素放大的作用。

像上图的正方形方块,每一个字节代表一个像素的话会显得很小,所以将其放大,每一个字节代表4*4个像素。

Game_InpueHandle函数的部分截图:

源码附带了很多注释以便理解游戏实现的原理。实验还启用了串口1用来输出调试信息,需要的话可以将开发板串口接出来,把上图的PrintfBlock函数注释去掉,在PC上查看串口输出的信息。当然大量的信息输出会影响游戏的响应速度。

串口打印的数据是gamemap数组里的数据,里面的1对应lcd的4*4个像素为1。这样的好处是减少游戏操作时对数据的处理时间,当数据处理完成后再进行放大显示;同时将显示和游戏的实现分离开,有利于提高代码的移植性和可读性。

希望这个简单的实验能给你带来些许乐趣,如果对源码有疑问可以提出来。

相关推荐:基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)

 <<锲而舍之,朽木不折;锲而不舍,金石可镂。>>

基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)相关推荐

  1. 基于STM32+0.96寸OLED - - 7脚SPI接线显示+代码解析

    前言  本次我们学习一下STM32关于SPI七脚OLED的 接线方法,OLED的代码解析,主要教会大家怎么使用OLED调试和看懂OLED驱动的代码,让大家对OLED有个简单的了解,本篇博客大部分是自己 ...

  2. STM32 0.96寸OLED IIC通信

    STM32 0.96寸OLED IIC通信 OLED选取 IDE选择 配置流程 oled.c文件 oled.h文件 oledfont.h文件 OLED选取 四针(GND VCC SCL SDA)的II ...

  3. STM32—0.96寸OLED液晶显示

    本文主要介绍基于STM32F103的0.96寸的OLED液晶显示,详细关于0.96寸OLED液晶屏幕的介绍可参考这篇博客:https://blog.csdn.net/u011816009/articl ...

  4. 基于STM32F103 0.96寸OLED液晶屏驱动(iic通讯)

    一.概述 OLED驱动方式有8080.6800.3线/4线SPI以及IIC,能够显示字符.汉字的图片,无字库需通过取模软件获取显示内容数组.本次实验使用的是IIC通信协议,SSD1306驱动芯片的OL ...

  5. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)

    简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...

  6. STM32(基于HAL库)驱动0.96寸OLED屏幕(六脚)

    STM32驱动0.96寸OLED屏幕(六脚) 1 序言 2 如何利用STM32单片机驱动12864液晶屏 2.1*基本配置* 2.2 *0.96寸OLED端口含义* 2.3 *0.96寸OLED液晶屏 ...

  7. STM32(基于HAL库)驱动0.96寸OLED屏幕(四脚且中英文皆可显示)

    STM32驱动0.96寸OLED屏幕(四脚) 1 注意事项 2 如何利用STM32单片机驱动12864液晶屏 2.1*基本配置* 2.2 *0.96寸OLED端口含义* 2.3 *0.96寸OLED液 ...

  8. 基于STM32的0.96寸OLED显示屏显示数据和滚动显示

    文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...

  9. 基于STM32的0.96寸OLED屏显示学号姓名和滚动显示

    文章目录 **一.SPI(串行外设接口)** **二.使用0.96寸OLED显示屏显示学号姓名** **三.0.96寸OLED在STM32f103上实现滚动显示长字符** **四.参考资料** 一.S ...

最新文章

  1. OC指示符assign、atomic、nonatomic、copy、retain、strong、week的解释
  2. 教程-Delphi编译就报毒
  3. 记录使用Spartan-6 FPGA进行一次3-8译码器实验
  4. leftjoin多个on条件_MYSQL|为什么LEFT JOIN会这么慢?
  5. android判断是否已经安装成功,android 判断应用程序是否已安装
  6. iPhone和SSH
  7. 你以为你懂MySQL索引?阿里的面试官:你还太嫩!
  8. 用Word2007写Blog
  9. contos下安装JDK1.7 ,tomcat,nginx
  10. 云计算 码率适配限速_5G 成熟后,带宽足够且云计算力够大,会不会对 PC 的升级需求放缓?...
  11. 河南大学软件学院宿舍楼综合布线设计方案
  12. 【甄选靶场】Vulnhub百个项目渗透——项目四十八:HACKNOS:OS-BYTESEC(压缩包爆破,无线爆破,环境变量挟持提权)
  13. js实现简单pdf打印功能
  14. jquery读取xml比较js读取xml 比比就知道
  15. 面试官:你能说一下 什么是熔断?什么是服务降级吗?
  16. centos下php的mysqli扩展安装
  17. 基于android的在线音乐播放器app设计
  18. php trimarray,PHP trim()函数和array_unique()函数去重 【原创】
  19. 【群晖】希捷酷狼8T硬盘声音过大问题
  20. 向大家推荐小专栏《Android 面试指南》,还可以内推

热门文章

  1. MySQL不能插入中文字符及中文字符乱码问题
  2. 第一课 前言 学PHP就是为了做网站
  3. 片上网络NoC(一)—— 概述
  4. 数据库修复Part1:创建自己的测试corrupt数据库
  5. MeeGo 1.2发布
  6. 使用Adsutil.vbs来获取IIS用户的密码
  7. JWT(JSON Web Token)简介
  8. Flink流计算WordCount代码示例
  9. 如何删除 Windows.old 文件夹
  10. Windows在当前目录快速打开cmd的方法