历史上的今天
返回首页

历史上的今天

今天是:2025年05月31日(星期六)

2019年05月31日 | STM32掌机教程9,完成掌机

2019-05-31 来源:eefocus

  这是教程的最后一篇了,完成之前的任务,到这里一切都应当水到渠成,没什么好讲的了。结尾可能略显仓储,未尽之处,自己看代码吧,看不懂的地方可以在下边评论。


修改BGM

  之前已经实现了根据不同的按键切换不同的BGM的功能。接下来把切换BGM的代码放到加命、减命、加分、升级的函数中。


//main.c

//加命并显示

void add_life(void)

{

BGM = LIFE_BGM;

BGM_change_flg = 1;//修改BGM

add_life_cnt++;

life++;

showNumber(56,2,life,DEC,8,FONT_16_EN);

}

//难度提升并显示

void level_up(void)

{

BGM = LEVEL_BGM;

BGM_change_flg = 1;//修改BGM

level_cnt = 0;

level++;

if(level>14)//默认14关

level = 14;

TIM_SetAutoreload(TIM2,level1_time_arr[level]);

showNumber(56,4,level,DEC,8,FONT_16_EN);

}

//按照level加分并显示

void add_score(void)

{

BGM = GOOD_BGM;

BGM_change_flg = 1;//修改BGM

score += level;

showNumber(56,6,score,DEC,8,FONT_16_EN);

}

//减命并显示

void sub_life(void)

{

BGM = BAD_BGM;

BGM_change_flg = 1;//修改BGM

life--;

showNumber(56,2,life,DEC,8,FONT_16_EN);

}


  把主函数恢复到没加音乐,但是已经实现了打地鼠全部功能的状态


初始化修改

  把原先去掉的初始化代码拿回来,并且写两个新的函数永夜设置默认参数。


void set_default(void)

{

life = LIFE_NUM;

mouse = 0;

score = 0;

level = 1;

next_flg = 1;

timeout_flg = 0;

level_cnt = 0;         

add_life_cnt = 1;     

}

//设置音量与背景

void set_BGM(u8 volum,u8 bgm_temp)

{

BGM_volum = volum;

BGM = bgm_temp;

}


主函数中的初始化代码如下


set_BGM(6,BEGIN_BGM);  //上电音乐与BGM 音量 1最大,10听不到

TIM5_Int_Init(9,7199);   //上电先播放背景音乐

TIM3_PWM_Init(0xfffe,8); //蜂鸣器频率定时器初始化

LED_Init();

KEY_Init();

delay_init();

initIIC();

initOLED();

set_default();

TIM4_Seed_Init();

FirstScreen();      //显示完屏幕内容以后,再开启打地鼠计时用的定时器

show_opt();

TIM2_Int_Init(level1_time_arr[level_cnt],7199);


复活操作

  等到没命以后,我想让按下PAUSE_PRES按键复活,参数都恢复初始化状态。


if(life)//还有命

{

...

}

else//没命了

{

AllLED_OFF();   //关掉所有的灯

BGM = BEGIN_BGM;

if(PAUSE_PRES == KEY_Scan(0))//重生

{

BGM = LIFE_BGM;

set_default();

show_opt();

TIM_SetAutoreload(TIM2,level1_time_arr[level]);

TIM_SetCounter(TIM2, 0);//定时器清零

}

}


  然后检查代码,添加一些注释,去掉一些没用的代码,算是大功告成了。


其它想法

到目前为止,我只是实现了最基本的打地鼠的功能。一开始设想的功能,就作为课后作业吧:

1、带提示功能的电子琴

2、点唱机,增加一些自己喜欢的歌曲

3、优化打地鼠,改成计时模式,允许多个地鼠出现,比单位时间内谁打的地鼠多

4、历史最高分功能

5、太鼓达人

6、追赶时光

7、QQ炫舞(这个是不是太膨胀了,哈哈哈)

8、其它可以用屏幕打的小游戏,比如坦克车,弹球,贪吃蛇,俄罗斯方块

9、借助USB库,把手柄与电脑相连接。

至此,STM32打地鼠掌机的系列教程都写完了。


推荐阅读

史海拾趣

Global Components & Controls公司的发展小趣事
接通电源后,调节RP1使灯光处于最亮状态。
FOCI Fiber Optic Communications Inc公司的发展小趣事
在保证性能和质量的前提下,合理控制元件成本,以提高产品的市场竞争力。
Bytesonic Corporation公司的发展小趣事

为了进一步加强对大陆市场的投资和管控,Bytesonic Corporation在1998年5月在英属维尔京群岛成立了控股公司——剑桥电子有限公司。这一举措不仅提升了公司的资本运作能力,也为其在全球范围内的业务拓展提供了更多的便利。

ELPIDA公司的发展小趣事

2008年全球金融危机的爆发对ELPIDA造成了巨大冲击。由于DRAM需求的急剧下降和价格的暴跌,公司的业绩急剧恶化。在这种情况下,ELPIDA不得不采取一系列措施来应对困境,包括削减成本、优化生产流程等。然而,这些措施并未能完全扭转公司的颓势。

Echelon公司的发展小趣事

进入21世纪后,Echelon在智能楼宇领域取得了重大突破。公司凭借其先进的LonWorks技术和能源管理服务方案,成功为多个大型楼宇提供了智能化的能源管理解决方案。这些解决方案不仅提高了楼宇的能源利用效率,还降低了运行成本,赢得了客户的广泛赞誉。Echelon在智能楼宇领域的成功,进一步巩固了其在能源管理市场的领先地位。

ABL Aluminum Components公司的发展小趣事

ABL Aluminum Components公司自成立以来,一直注重技术创新。早期,公司研发出了一种新型铝合金材料,这种材料具有优异的导电性和轻量化特点,迅速在电子行业引起关注。随着技术的不断迭代,ABL公司逐步将这种材料应用于手机、电脑等消费电子产品的内部组件,大大提高了产品的性能和用户体验。凭借这一技术优势,ABL公司逐渐在电子行业中占据了一席之地。

问答坊 | AI 解惑

求固态硬盘SSD方案!

RT.那个兄弟可提供一下,谢谢!…

查看全部问答>

求帮写一个CPLD分频的程序(Verilog)

具体要求是: 由8MHz的晶振分频至0.8Hz, 占空比为80%,低电平时间为0.25s,高电平时间为1s …

查看全部问答>

求购二手51单片机开发板,坛友谁有闲置的?

距离毕业还有一个月。毕设用的是FPGA, 以前学过单片机的基础知识,我想实际做一下。 作为单片机的入门,还有就是熟悉C语言的开发。 DSP开发板和仿真器比较贵,所以目前暂时考虑要一块单片机的开发板。 坛友里面,有没有闲置的呢? 由于本人目 ...…

查看全部问答>

SD卡驱动

不带操作系统,经bootloader引导后,从SD卡里读数据,现在对SD卡驱动的流程很是模糊,求高手指点下,具体的步骤~~ 谢谢…

查看全部问答>

mc55发短消息问题

这是我的AT指令; AT+CMGF=1 OK AT+CSCS=\"GSM\" OK AT+CSMP=17,168,0,0 OK AT+CSCA=\"+8613800472500\" OK AT+CMGS=\"13684724106\" >  +CMS ERROR: 500 为什么会返回这个错误呢,期待大家帮忙解答…

查看全部问答>

单片机高手帮帮我

我想学习单片机,但不知道该怎么入手,例如说,我应该有什么基础,该看些什么书之类的,大家帮我解决一下吧!…

查看全部问答>

ARM7 内部时钟问题 见鬼了!!!

PREINT = (CLK_Apb_PclkFreq()>>15) -1 ;// 设置基准时钟分频器 CLK_Apb_PclkFreq() / 32768 -1 PREFRAC = (UINT32)CLK_Apb_PclkFreq() & 0x7fff;//CLK_Apb_PclkFreq() - (CLK_Apb_PclkFreq() / 32768) * 32768; printf(\"PCLK:%d\",CLK_Apb_Pclk ...…

查看全部问答>

【求助】急问:413液晶显示问题!急急急急急急急急急急急急急急急急急急急急急急

SetupBT       mov.b   #018H,&BTCTL                ;设置LCD 频率 = ACLK / 128…

查看全部问答>

嵌入式工程师招聘

北京索德电气工业有限公司   北京索德电气工业有限公司,创建于1999年,总部在北京,下设深圳和上海分公司,是一家专业从事电气传动控制研发和生产的高新技术企业,公司主要产品有无刷双馈船舶发电系统,无刷电力船舶推进系统,多相同步电机 ...…

查看全部问答>

MSP430G2X电路图

MSP-EXP430G2_Schematic+Silkscreen [ 本帖最后由 wstt 于 2012-7-12 14:56 编辑 ]…

查看全部问答>