第46届世界技能大赛电子设计项目C模块嵌入式系统编程_样题
- 格式:pdf
- 大小:829.43 KB
- 文档页数:7
C模块嵌入式系统编程
姓名:
一笔画完游戏
目录
这个试题任务包括以下文档与文件:
1.简介
2.项目和任务描述
3.编程环境
4.接口表
5.编程任务
简介
本次测试项目设计一笔画完游戏。
项目和任务描述
设计一笔画完游戏,一笔画完的游戏规则是将所有可用点用一条线连接,所有点只能经过一次。
在三色点阵上,使用绿色的点表示需要经过的点,蓝色表示已经经过的点,红色表示线头。
分成以下两个任务:
1、完成LCD页面切换状态机:包括开机动画、游戏介绍、关卡提示、游戏页面、通关
提示等页面的切换。
2、完成一笔画画完游戏功能:包括关卡计时、摇杆移动、通关判断等功能。
编程环境
编程环境如下图所示:
接口表
CPU GPIO Type信号名Notes
PA0ADC_IN0JS_CH0摇杆电位器纵向输入
PA1ADC_IN1JS_CH1摇杆电位器横向输入
PA2GPIO_Input JS_SW摇杆按键输入
PA6GPIO_Output STCP74HC595移位寄存器时钟
PA7GPIO_Output DIN74HC595串行数据输出
PA5GPIO_Output SHCP74HC595移位寄存器时钟
PA8GPIO_Output SCLR74HC596复位信号,低电平有效
PA9GPIO_Output LCD_CLK LCD12864串行时钟
PA15GPIO_Output LCD_CS LCD12864片选信号
PA10GPIO_Output LCD_SID LCD12864串行输入
PA4GPIO_Output LCD_RST LCD12864复位信号
PB5GPIO_Output BUZZER蜂鸣器
(注:只列出本次任务所涉及的端口)
你可以使用函数HAL_GPIO_WritePin控制管脚的输出电平,上表中的信号名可以在函数HAL_GPIO_WritePin和HAL_GPIO_ReadPin中使用.
HAL_GPIO_WritePin函数使用示例:
HAL_GPIO_WritePin(STCP_GPIO_Port,STCP_Pin,GPIO_PIN_RESET);//输出低电平
HAL_GPIO_WritePin(STCP_GPIO_Port,STCP_Pin,GPIO_PIN_SET);//输出高电平HAL_GPIO_ReadPin函数使用示例:
If(HAL_GPIO_ReadPin(JS_SW_GPIO_Port,JS_SW_Pin)==0)
提醒:记得在操作IO口后加上一个小延时(5us),以保证任务板上的IC能正确稳定处理信号。
提供给选手的工程中,已经完成驱动外设的驱动,并且提供了部分示例代码供选手参考。
编程任务
第一阶段编程任务
阶段1.1
请在系统初始化完成后,使用蜂鸣器发出提示音:蜂鸣器发出3次声音,每次持续50ms,间隔50ms。
你可以使用函数HAL_Delay(uint32_t)来实现毫秒级的延时。
阶段1.2
提示音之后加载开机动画:LCD12864以30ms的间隔从上到下逐行显示worldskill图案,再以10ms 的间隔从上到下逐行清空画面。
Worldskill图案的像素点信息保存在数组worldSkillPhoto中,每个字节为8个像素点信息,保存的顺序为从上到下、从左到右。
你可以使用函数lcdDrawLine来实现该阶段功能:
阶段1.3
加载动画完成后,进入游戏介绍页面(已完成),按照提示按下摇杆按键进入游戏关卡。
请参考loop函数中的状态机示例完成LCD页面的切换。
切换顺序如下:
关卡提示的内容如下,NN为关卡号(01/02/03):
一笔画完
关卡NN
祝您游戏愉快
按下摇杆继续..
关卡计时的内容如下,NN为关卡号(01/02/03),MM为分钟数,SS为秒钟数:一笔画完
关卡NN
本关用时MM:SS
总用时MM:SS
通关提示的内容如下,MM为分钟数,SS为秒钟数:
一笔画完
恭喜您已经通关!
总用时MM:SS
按下摇杆重新开始
以上内容涉及分钟数和秒钟数均默认为00,摇杆按键每按下一次切换一次页面。
第二阶段编程任务
阶段2.1
请完成游戏计时功能,计时功能包括单个关卡的计时、所有关卡的用时。
进入关卡计时页面后开始计时,并按秒更新到关卡计时页面上;在通关提示页面上显示总用时,按下摇杆后所有关卡的用时清零。
你可以使用HAL_GetTick函数来获取系统毫秒计数值。
阶段2.2
请在关卡提示页面刷新的时候加载一笔画完游戏关卡地图到三色点阵上,红色表示起点,绿色表示需要经过的点。
你可以使用函数setDotColor来设置点阵的颜色,dotMatrixdisplay函数用于动态刷新
三色点阵,已经在loop函数的最后调用。
关卡1~关卡3的地图如下:
阶段2.3
请完成关卡游戏过程中的移动控制。
波动摇杆一次,红色的点移动一步,用蓝色表示已经画过的点。
当要移动的下一步没有颜色,则不移动,蜂鸣器发出两次100ms的告警音,间隔50ms;当要移动的下一步是有颜色的,蜂鸣器发出一次50ms的提示音;如果下一步是已经走过的点,则回退到该点。
阶段2.4
请完成关卡计时页面的跳转。
在阶段1我们使用与摇杆按下作为该页面切换的条件。
现修改为根据关卡是否通过作为跳转条件。
关卡通过的条件为红点经过了所有绿点,如果所有游戏关卡都已经通过,则进入通过提示页面,否则进入下一个关卡提示页面。