既然是“螺蛳壳里做道场”,用的当然是用最简单的STM8S001J3单片机来做。 STM8S001J3内置8KFlash,1K Ram,128Bytes EEPROM,SOP-8封装,除了电源脚外有5个IO脚。' H+ W! o7 l# m U" M1 P 8 h8 {1 W! A! v- k3 P" B $ |* k3 m0 Y1 N& Y 要做游戏机,至少有显示屏,我用的是0.96寸128*64OLED屏,只需2个IO口驱动 8 x @' V: a; F7 h* g0 K/ C 麻烦!只剩下3个IO口,而且还要留一个做SWIM接口' t; I4 W, P) S8 s, x! n 不怕,有10bit ADC口,足够做单IO多按键输入。我用了一个5方向开关,使用TIM2大约30ms扫描一次。 下面是按键电路板与电路图- @# m$ I% m% ?( N) l 整机电路超简单,没有太多额外的电路1、STM8周边用了一个104,一个105电容,搭建单片机最小工作电路 2、用1117.33稳压模块,把USB的5V降为3.3V,共单片机、OLED屏和按键板用! T0 A8 {+ f |! _. e& M6 n' ^ 3、按键板的电路,上图。 4、单片机与OLED之间之间连接。2 j a1 u0 k. b 0 X7 C' p& k p" O& U: g' x 也就是整个游戏机只用了3个IO口,没用到Pin8,但曾经惨痛教训,复制粘贴其他程序,忘了修改引脚,悲剧发生!2 g9 j# `" Y2 n 使我锁死了2个单片机,我还是对Pin8做个防护。 我没用常规的延时方法,毕竟延时5秒对进入一个小游戏有点不爽。 void main(void)4 Y8 ?3 }* H0 d8 C- u3 Y2 J9 D5 N { CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);, G& \ ]1 I* k //初始化按键(Pin7),防锁代码8 f& U' k7 I: _4 J4 D# X6 D GPIO_Init(KEY1_PORT, (GPIO_Pin_TypeDef)KEY1_PINS, GPIO_MODE_IN_PU_NO_IT);* ~6 e% u% u; C0 V& g //判断按键是否按下,如果按下,进入死循环,下载使用。+ S! u/ m( W9 ?, \# s while(!GPIO_ReadInputPin(KEY1_PORT,KEY1_PINS))! o# X3 Z1 {- n/ Z {9 T) G6 R; c. u# `- }( d delay_ms(1); } ......& H3 X/ [1 T/ b$ j, d }6 e/ z6 l3 w: ]% v2 i) _2 h& q 为了降低存储空间,我把6*8的字库修改为5*8, 使用IO口模拟I2C方式与OLED屏通信,可以减少代码存储空间。 最后还剩有接近1k空间。 片内还有128Bytes EEPROM,用作游戏进度存储,每一步都存一次,不怕断电。 * V1 K i" v' e# ~ I- s3 I3 s ! O4 v4 @9 H" n( g3 Z/ B 附上源程序供大家参考。) [0 V) m$ U- T& O + q0 M( S# v' g% q6 c H6 y8 K- o |
User.rar
下载19.2 KB, 下载次数: 10
æºç¨åº
1、保存着昨天的残局* U# }& B; u8 E3 v
2、整机电路很简单5 T3 O( f- R2 {6 J
由于分辨率问题,超过4位数我采用叠放的方式来显示(图中1024)2 G9 \. e5 i" q) D
是操作问题还是游戏玩法问题?
如果是游戏玩法,你搜一下2048游戏
哦,谢谢