|
既然是“螺蛳壳里做道场”,用的当然是用最简单的STM8S001J3单片机来做。 STM8S001J3内置8KFlash,1K Ram,128Bytes EEPROM,SOP-8封装,除了电源脚外有5个IO脚。
* d8 q9 t) V1 T* J9 E) X) ] 要做游戏机,至少有显示屏,我用的是0.96寸128*64OLED屏,只需2个IO口驱动 麻烦!只剩下3个IO口,而且还要留一个做SWIM接口* x' {& U8 R1 c2 _% n) k" E8 h5 B2 e4 w 不怕,有10bit ADC口,足够做单IO多按键输入。我用了一个5方向开关,使用TIM2大约30ms扫描一次。 下面是按键电路板与电路图 }) O4 [& k3 r/ [3 {2 @ d* H
3 u* a6 j# u+ S: {) h 整机电路超简单,没有太多额外的电路1、STM8周边用了一个104,一个105电容,搭建单片机最小工作电路+ h7 s" p( l' x 2、用1117.33稳压模块,把USB的5V降为3.3V,共单片机、OLED屏和按键板用$ M4 Y, g% h( e8 v3 c 3、按键板的电路,上图。 4、单片机与OLED之间之间连接。4 A/ r2 O) G4 F$ e) `( h 也就是整个游戏机只用了3个IO口,没用到Pin8,但曾经惨痛教训,复制粘贴其他程序,忘了修改引脚,悲剧发生! 使我锁死了2个单片机,我还是对Pin8做个防护。 我没用常规的延时方法,毕竟延时5秒对进入一个小游戏有点不爽。 void main(void) {# V8 h3 Q1 }9 i: }% _' k) g ) g f) i+ M/ h% Q CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); //初始化按键(Pin7),防锁代码 GPIO_Init(KEY1_PORT, (GPIO_Pin_TypeDef)KEY1_PINS, GPIO_MODE_IN_PU_NO_IT); //判断按键是否按下,如果按下,进入死循环,下载使用。 while(!GPIO_ReadInputPin(KEY1_PORT,KEY1_PINS))0 t1 Q& @* J1 ^1 }# e% v( ^" h3 { { delay_ms(1);& @$ k( M! w2 w8 ] v2 j3 @! I2 _ }+ t# j1 z) ]: m6 F: I/ \ - }4 R; C+ J# m8 _6 }5 R ......8 v1 k# n% q: ] } 6 ^8 X$ m# d: c& [! T9 ~! v% o 为了降低存储空间,我把6*8的字库修改为5*8,; i5 n% \" C/ L) h/ O 使用IO口模拟I2C方式与OLED屏通信,可以减少代码存储空间。7 \2 q6 ~ n( I 最后还剩有接近1k空间。 a: C7 W" g- Q) W8 C 片内还有128Bytes EEPROM,用作游戏进度存储,每一步都存一次,不怕断电。/ u6 |1 D: I! E/ y8 o# u% J ' F# U$ V6 J" p- X3 W4 s7 n, t
) k |. |1 B3 G+ b
附上源程序供大家参考。7 r4 i8 R: @! x2 F2 C: Z ! L! }$ H9 V# N7 o; s |
User.rar
下载19.2 KB, 下载次数: 10
æºç¨åº
微信公众号
手机版
1、保存着昨天的残局* R5 ~8 h$ `0 ]2 C- c4 b/ `
2、整机电路很简单) F# c x) W) Z& k
由于分辨率问题,超过4位数我采用叠放的方式来显示(图中1024)
5 o9 y) X3 q b. H7 i! d) ?
是操作问题还是游戏玩法问题?
如果是游戏玩法,你搜一下2048游戏
哦,谢谢