通(tōng)过(guò)编(biān)程实现按键控制OLED屏(píng)中的方块移动。"/>

大 创 实 验 室

更多内容请联系(xì)我(wǒ)们

第三(sān)章(zhāng) 科创板-键(jiàn)位控制

发表时间:2020-08-24 10:32作(zuò)者:大创实验室来源:大创实验室网址:http://www.hnfhclfz.bijie.shanxi.linyi.jiaxing.zz.pingliang.ww38.viennacitytours.com


第三章第2课 科(kē)创(chuàng)板(bǎn)-键位(wèi)控制




1、学会使用按键驱动板载(zǎi)蜂鸣器(qì)工作;

2、通过(guò)编(biān)程(chéng)实现按键(jiàn)控制(zhì)OLED屏中的方块移动。

1
按键驱动蜂鸣器(qì)——Science and Math

1、键位发声

我(wǒ)们首先用按键控制蜂鸣器执行简单(dān)的(de)功能:当按键上(shàng)按下时,蜂鸣器播放声音1秒,然后(hòu)停止发声。

认识“结束声音”代码块

“结束声音”代码块位(wèi)于(yú)“执行器”模块(kuài)中,它的功能是终止蜂鸣器的发声。


按键控制蜂鸣器发声程序如下:


将上图程序下载到(dào)科创板,当按键(jiàn)上按下时,蜂鸣(míng)器(qì)播放(fàng)声(shēng)音1秒,然(rán)后停止发声。

2、函数应用(yòng)

当我们(men)的程序中需要多次用到一组相同的代码时,我们可以用函(hán)数来实现,每次用到(dào)这段代码时调用即可。

认识“创建函(hán)数”代码块

“创(chuàng)建函数(shù)”代码(mǎ)块位于“函(hán)数”模块中(zhōng),它的功能是创建(jiàn)一(yī)个不带(dài)输出值的函数(shù)模块(kuài)。


在(zài)函数中可(kě)以设置变量,点击蓝(lán)色设置按钮,弹出参数框,将(jiāng)参数X拖到右(yòu)边输入下边即(jí)可 这时候代码块上出现了(le)变量参数(shù)X

下面我们以(yǐ)一个实际运用(yòng)来说明一(yī)下“创建函数”代码块(kuài)的使用方法(fǎ):


上面的函数表示:每间隔x微(wēi)秒(1秒(miǎo)=1000毫秒=1000000微(wēi)秒),蜂(fēng)鸣器电平切换一次,即(jí)表示生成(chéng)频率为1000000/2x的(de)声音信(xìn)号(hào)。

当我(wǒ)们创(chuàng)建好函数代码时,在“函数”模块中会出现一个新的代码(mǎ)块,“执行函(hán)数(shù)参数X”代码块,它的作用(yòng)是执行(háng)用户(hù)自(zì)定义(yì)参数(shù)为X的(de)函(hán)数块(kuài)。


通过上、下(xià)、左、右四(sì)个按键(jiàn)(对应的管脚分别为:12、23、36、2,其中按键左的逻辑是反的(de)),控制(zhì)蜂(fēng)鸣器发(fā)出不同频率声音的程序:


运行上面的程序,我们就可以通过点击不同(tóng)按键控制蜂(fēng)鸣器发出(chū)不同(tóng)频(pín)率的声音了。

3、程(chéng)序中(zhōng)断(duàn)命令

“中(zhōng)断”是指科创板在运行程(chéng)序的(de)过程(chéng)中,由于出现一些特别的情况,停(tíng)止当前(qián)的程序去执(zhí)行新的程序,等处理完成后再返回原(yuán)来(lái)被暂停(tíng)的(de)程序继续执(zhí)行(háng)。

中断可以类(lèi)比生活中的例子:比如你正在看电视,突然门口门铃响起,有快递送上门,所以(yǐ)你就暂停看电(diàn)视去拿快(kuài)递,等收完(wán)快递后继续看(kàn)电视。在(zài)这个过程(chéng)中,看电视是(shì)你主(zhǔ)要(yào)的任务(主程序),而收快递就是一(yī)个中断过程,门(mén)铃响起就是一个中断的标(biāo)志(zhì)(触发中断的条件)。中断示意图如(rú)下:


认识“中断(duàn)”代码块

“中断”代码块位于“输入/输出”模块中,它的功能是设置指定(dìng)管脚的中断模式为上(shàng)升、下降(jiàng)或者改变,并执行(háng)回调(diào)函数(shù)。

中断触发的条件有三种:上升、下降和改变(biàn)。上升模式为当管(guǎn)脚由低电平变为高电平时,触发中(zhōng)断;下(xià)降模式为当管(guǎn)脚由高电(diàn)平(píng)变为低电平时,触发中(zhōng)断;改变模式为当管脚的(de)电平(píng)发生(shēng)变化的(de)时候,触(chù)发中断。




这(zhè)里我们展示一个实际中断函数的程(chéng)序,做(zuò)完这个,大家就会更深(shēn)入的(de)了解(jiě)中断的含义了,程序如下:


此程序设置的中(zhōng)断是当(dāng)检测到按键上被按下时,就会执行(háng)回调函数里的程序。将上(shàng)面的程(chéng)序下载(zǎi)到科创板(bǎn)后,我们(men)点击按键(jiàn)上,就可以听到(dào)蜂鸣器发出的(de)三种不同声音了。

二、键位控制OLED屏——Technology and Math

我们(men)可以驱动按键去控制多彩LED灯以及蜂鸣器(qì)工作了,接下来,我们要(yào)做的就是要让按键功能(néng)更(gèng)加直观的(de)体现出来(lái)。大家来思考一个问题,我们可不可以通过按键移动屏幕上显示的方(fāng)块呢(ne),怎(zěn)样去实现这个功能呢?

为了实现上述的功能,我们可以(yǐ)分步(bù)进行:

1、绘(huì)制方块

在前面的课(kè)程里,我们已经学过用OLED屏显示矩形,这里(lǐ)用到同样的代码(mǎ)块“绘制矩形”,不过其中的参数需要调(diào)整一下(因为我们要控制方(fāng)块移动,所以方块尺寸要合(hé)适(shì))。

我们将方块的(de)边长定为(wéi)4,那么 “绘制矩形”代码(mǎ)块(kuài)里(lǐ)关于宽(kuān)度高(gāo)度设(shè)置的两个变量要改为4;开始时方块要显示在屏幕中央(yāng),相对应的(de)起点(diǎn)参(cān)数设置x=62,y=30。



上面两(liǎng)种程序表(biǎo)达(dá)方式都可(kě)以,第二种里面的“科创板oled初始化”代码块 ( “科创板oled初始化”代(dài)码块位于“科创板v2.0”模块里)与(yǔ)第一种里(lǐ)面的 两代码块的功能是一样的。相较于第(dì)一种程序表达,第二(èr)种更简洁,所以(yǐ)后面(miàn)我们使用第二种表达方式讲解剩余程序部分(fèn)。

此时绘(huì)制的(de)方(fāng)块只有(yǒu)四条边,中间是(shì)空的(de),所以要(yào)在“填充”后面打(dǎ)钩(gōu),这样这个边(biān)长为4的方块(kuài)才(cái)能填(tián)充起来(lái)。


运行以上程序,OLED屏中间会显示一个填充(chōng)后的小方块。


2、施加约束

认识“约束”代(dài)码块

“约束”代码块位于“数学”模块中(zhōng),它的功能是限制数字或者(zhě)变量介于两个指定的数(shù)字之间(jiān)。



因为屏幕的横向范围为0~127,纵向(xiàng)范围为0~63,方块边长为4,所以x的范围为0~124,y的(de)范围(wéi)为0~60,可以用以下代码块来限定x与y的(de)范围,这样方块就不会超出屏(píng)幕了。


3、按键控制

右键按下(xià)让x增加4,y保(bǎo)持不变(小方块(kuài)向(xiàng)右移动4步):


同理,可以推写出上、下、左键按下时的(de)程序块(需要注(zhù)意的是左(zuǒ)键的逻辑是反的,所以左键的判定(dìng)条件(jiàn)是当管脚(jiǎo)36的(de)值等于0时)。

我们(men)把确定键作(zuò)为初始化按键(让小方块(kuài)回(huí)到OLED屏幕中点):


程(chéng)序分块到这(zhè)里就讲解完成了,接下来我们只需要把之前编(biān)写好的(de)程序块结合起来就可以实现按键控制小(xiǎo)方块的移动了,程序如下:


运行以上程序,按键的上下左右可以控(kòng)制小方块的移动方向,确定键按下时,小方块回到屏幕中心(xīn)。

三、延伸与扩展——Arts

想(xiǎng)一想,我们可不(bú)可(kě)以用屏(píng)幕(mù)和按键做一(yī)个贪吃蛇(shé)游戏呢(ne),怎(zěn)样(yàng)去实现?


请以小组的形(xíng)式进行合作,尝试使用屏幕和按键(jiàn)做一个贪(tān)吃蛇游戏 。

设计要求:

能够用按键操(cāo)控贪吃蛇小游戏,其中确定键可以暂(zàn)停与开始游戏(xì);

保证控制方式安全(quán)可靠。



山东省济南(nán)市历下区舜华路(lù)750号大学科技(jì)园北区3号楼(lóu)
服(fú)务热线:13256445996                                  www.hnfhclfz.bijie.shanxi.linyi.jiaxing.zz.pingliang.ww38.viennacitytours.com

QY球友会

QY球友会