本帖最后由 w494143467 于 2020-12-6 22:15 编辑
1.介绍
花了一下午时间移植了之前的跑酷类小游戏,由于开发板上只有一个复位键没有用户按键,所以就使用了TouchKey,同时使用IIC驱动OLED屏幕,查看手册IIC的引脚在PB8(SCL)和PB9(SDA)上,使用UART上传游戏状态,整体游戏设计难度不高,只使用了三个外设。
2.设计
首先设计的是IIC驱动OLED屏幕这个可以在我的上一篇帖子【Part2:IIC驱动OLED屏幕】上看一下,由于每个例程都带有UART功能,所以UART部分基本不需要进行开发,OLED屏幕可以驱动起来之后就开始驱动TouchKey了,这个外设的驱动例程官方已经给出,通过观察例程的UART输出,可以知道Touch输出的是ADC的值,如图1。
图1
那么就需要进行按钮按下的设计,通过观察,不触摸时ADC的值大概在4000+,按下之后根据不同的人,ADC值约在3000以下,所以这边就设计当ADC小于3000则说明按键按下,并同时让按下标志位置1,下面是我的按键按下判断的代码,将下面一段放到函数中,返回Touch_Click_flag标志位,然后判断是否为1即可。
static u16 ADC_Click_flag = 0;
static u8 Touch_Click_flag = 0;
u16 ADC_val;
Touch_Click_flag = 0;
ADC_val = Touch_Key_Adc(ADC_Channel_2);
if(ADC_val < 3000 && ADC_Click_flag == 0)
{
ADC_Click_flag = 1;
Touch_Click_flag = 1; //判断这个标志位,可以得到是否产生一个按下事件
}
else if(ADC_val > 3000)//等待抬起
{
ADC_Click_flag = 0;
}
printf( "TouchKey:%04d\r\n", ADC_val );
if(ADC_val & 0x8000)
{
printf("This value is discarded\r\n");
}
TKEY_CR |=0x08000000; //Clear Flag
按钮部分完成了之后,就开始移植整体逻辑部分了,由于之前写的代码可移植性比较好,所以直接拿过来修改一小部分就可以用了,将刷屏判断等代码放入到主函数中,如下图2。
图2
先来看一下在游戏过程中,上位机显示的内容,0为未开始,1为正在游戏,2为游戏结束,2只会出现一次,1次之后便是游戏未开始(0)如图3。
图3
最后我们来看一下游戏的整体效果的动态图,游戏中是可以实现双连跳的,这个几连跳可以通过程序中的一个宏进行修改。
图4
3.总结
从这次移植小游戏的过程中,踩的坑比较少,不过有一点不太好的是,定时器中断的例程似乎并没有提供,这让我的一些程序只能在主程序里面跑,这样有点难受,希望官方能够出一个这样的例程。RISC-V MCU移植性还是非常好的,但是呢外设都在同一个文件,所以移植的时候只能复制文件内容,而不能将文件直接进行复制。对于测评,我比较喜欢做一些小游戏,一般都会使用板载的外设进行测评,在以后的测评中也会多制作一些好玩的小游戏,也希望喜欢小游戏的童鞋持续关注我哈~
@21小跑堂 原创**
下面放出小游戏的固件,使用的是华大板子上的OLED屏幕:
2020.12.07放出源码:
|
太棒了
酷 了 酷 了
定时器中断例程在沙发的位置,大家可以去那下载~