既然是“螺蛳壳里做道场”,用的当然是用最简单的STM8S001J3单片机来做。 STM8S001J3内置8KFlash,1K Ram,128Bytes EEPROM,SOP-8封装,除了电源脚外有5个IO脚。 - ]3 j: I( s* m. E, \ 要做游戏机,至少有显示屏,我用的是0.96寸128*64OLED屏,只需2个IO口驱动 2 A8 L$ y2 ]$ |% k 麻烦!只剩下3个IO口,而且还要留一个做SWIM接口 不怕,有10bit ADC口,足够做单IO多按键输入。我用了一个5方向开关,使用TIM2大约30ms扫描一次。 下面是按键电路板与电路图! o* l" m' F5 R # r: k! E0 b6 n0 l2 l 整机电路超简单,没有太多额外的电路1、STM8周边用了一个104,一个105电容,搭建单片机最小工作电路 2、用1117.33稳压模块,把USB的5V降为3.3V,共单片机、OLED屏和按键板用 3、按键板的电路,上图。 4、单片机与OLED之间之间连接。- V# |5 l% x0 m8 U1 e1 j* f n! X2 j8 L/ M- ]7 h1 h2 ^ 也就是整个游戏机只用了3个IO口,没用到Pin8,但曾经惨痛教训,复制粘贴其他程序,忘了修改引脚,悲剧发生!7 s6 u5 b2 N4 A$ N+ H 使我锁死了2个单片机,我还是对Pin8做个防护。 我没用常规的延时方法,毕竟延时5秒对进入一个小游戏有点不爽。 void main(void) {' W3 r; G) n3 _1 i' @$ z, q/ N( J/ K 2 R8 A+ p, f" P CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);& ?$ X" _9 A M$ b, N9 o* L% L6 A2 J9 t //初始化按键(Pin7),防锁代码- n. ^: k5 Q- X6 s- W5 M2 W GPIO_Init(KEY1_PORT, (GPIO_Pin_TypeDef)KEY1_PINS, GPIO_MODE_IN_PU_NO_IT); //判断按键是否按下,如果按下,进入死循环,下载使用。) ?/ U" R, K7 v, M9 [ }6 j$ s( r while(!GPIO_ReadInputPin(KEY1_PORT,KEY1_PINS)) {2 N$ u6 ^+ l& H6 \& L% k4 W delay_ms(1); } ...... } & k) {. E) v, c7 }: Z+ _9 ~7 ^ 为了降低存储空间,我把6*8的字库修改为5*8, 使用IO口模拟I2C方式与OLED屏通信,可以减少代码存储空间。 最后还剩有接近1k空间。+ j+ j3 d' d. }' u$ ? T$ P 片内还有128Bytes EEPROM,用作游戏进度存储,每一步都存一次,不怕断电。9 Y5 f2 o: E6 N! }+ M0 ?" ^ 附上源程序供大家参考。% Q6 r1 o4 f* V7 L6 c3 M y9 ?! K0 x% |' h0 \ |
User.rar
下载19.2 KB, 下载次数: 10
æºç¨åº
1、保存着昨天的残局- X$ W% E( V I# j6 o
2、整机电路很简单
由于分辨率问题,超过4位数我采用叠放的方式来显示(图中1024)+ W6 d- u/ G) Y8 G; [/ E
是操作问题还是游戏玩法问题?% J! B& S- r L1 z) f4 |2 k
如果是游戏玩法,你搜一下2048游戏
哦,谢谢