通过编程实现按键控制OLED屏中的方块移动。"/>

大 创(chuàng) 实 验(yàn) 室

更多(duō)内(nèi)容请联系我们

第(dì)三(sān)章 科创板-键位控制

发(fā)表时(shí)间:2020-08-24 10:32作(zuò)者(zhě):大创(chuàng)实(shí)验室(shì)来(lái)源:大(dà)创实(shí)验室网址:http://www.haozhou.shangrao.huangnan.sys.jixi.ww38.viennacitytours.com


第三章第2课 科(kē)创板-键位控制




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

2、通(tōng)过编程(chéng)实现按(àn)键控(kòng)制OLED屏中(zhōng)的方(fāng)块移动(dòng)。

1
按键驱动蜂鸣器——Science and Math

1、键位(wèi)发(fā)声(shēng)

我们(men)首先用按键控制蜂鸣器执行简(jiǎn)单的功能:当按键上按(àn)下时,蜂鸣器播放声音1秒,然后停止发声。

认识(shí)“结束声音”代码块

“结束(shù)声音(yīn)”代码块位于“执行器”模块(kuài)中,它的功能是终止蜂鸣器的发声(shēng)。


按键控制蜂鸣器(qì)发声程序如下:


将上图程(chéng)序下载到科创板(bǎn),当按(àn)键上按下(xià)时,蜂鸣器播放声音(yīn)1秒,然后停止发(fā)声。

2、函数应用

当我(wǒ)们的(de)程序中(zhōng)需要多次用到一组相同(tóng)的代码(mǎ)时,我们可以用函数来实(shí)现,每次用到这段代码时调用(yòng)即可。

认识“创建函数”代码块

“创建函数”代码块(kuài)位于“函(hán)数”模块(kuài)中,它的功能是创(chuàng)建一个不(bú)带输出值的(de)函数模块。


在函数中可以设置变量,点击蓝色设置按(àn)钮,弹(dàn)出参数(shù)框(kuàng),将参数X拖到(dào)右边输(shū)入下边即(jí)可 这时候代码块(kuài)上出现了变量参数(shù)X

下面我(wǒ)们以一个实(shí)际运用来说明(míng)一(yī)下“创建(jiàn)函数”代码块的使用方法:


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

当我们创建好函数代码(mǎ)时,在“函数”模块中会出现一(yī)个(gè)新(xīn)的代(dài)码块,“执(zhí)行函(hán)数参数X”代码块,它的作(zuò)用是(shì)执行用(yòng)户自定义参数为X的函数块。


通过上、下、左、右四个按键(jiàn)(对应的管脚分(fèn)别为:12、23、36、2,其中按键左的逻辑(jí)是(shì)反的),控(kòng)制蜂(fēng)鸣器发出不同(tóng)频率声音(yīn)的程序:


运行上面的(de)程(chéng)序(xù),我们就(jiù)可以通(tōng)过点(diǎn)击不(bú)同按键控制(zhì)蜂鸣器发(fā)出不(bú)同频率的声音了。

3、程序中断命令

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

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


认识“中断”代码块(kuài)

“中(zhōng)断(duàn)”代(dài)码块(kuài)位于(yú)“输入/输出”模块中,它的功能是设(shè)置指(zhǐ)定管脚的中断模式为(wéi)上(shàng)升、下降或(huò)者改变(biàn),并(bìng)执(zhí)行回(huí)调函数。

中断触发的条件有(yǒu)三种:上升、下(xià)降(jiàng)和改变(biàn)。上升模式为当管脚由低电平(píng)变为(wéi)高电平时,触发中断;下(xià)降(jiàng)模式为当管脚(jiǎo)由(yóu)高电平变为低(dī)电平时,触发中断;改变(biàn)模式为(wéi)当管脚的电平发生变化的时候,触发中断。




这里我(wǒ)们展示一个实际中断函数的程序,做完这个(gè),大家就会更深入的了解中断的含义了,程序如下(xià):


此程序设置(zhì)的中断是当检测到按键上被按下时,就(jiù)会(huì)执(zhí)行回调函数里的程序。将上面的(de)程(chéng)序(xù)下载到科(kē)创板后,我们(men)点击按键上(shàng),就可以听到蜂鸣器发出的(de)三种(zhǒng)不同声音了。

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

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

为(wéi)了实(shí)现(xiàn)上述的功能,我们可以分步进行:

1、绘(huì)制方(fāng)块(kuài)

在前面的(de)课程(chéng)里(lǐ),我们已(yǐ)经学过用OLED屏显示矩(jǔ)形(xíng),这(zhè)里用(yòng)到同样(yàng)的代码块“绘(huì)制矩(jǔ)形(xíng)”,不过其(qí)中的参数需要调整一下(xià)(因为我们要控制方块移动,所以方块(kuài)尺寸(cùn)要合适)。

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



上面两种(zhǒng)程序表达方式都可以(yǐ),第二种里面的“科创板oled初始化”代码块 ( “科创(chuàng)板(bǎn)oled初始化”代码块位于(yú)“科创板(bǎn)v2.0”模(mó)块里)与第一种(zhǒng)里面的 两代码块的功能(néng)是一样的。相(xiàng)较于第一种程序表达,第二种更简洁,所以后(hòu)面我们使用第二(èr)种表达方式讲解剩余(yú)程序部分。

此时(shí)绘制(zhì)的方块只(zhī)有四条边,中间(jiān)是空的,所以要(yào)在“填充”后面打钩,这样(yàng)这个边长为4的方块才能填充起来。


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


2、施加约束

认(rèn)识(shí)“约束”代码(mǎ)块

“约束”代码块(kuài)位于(yú)“数学”模(mó)块中(zhōng),它的功能是限(xiàn)制数字或者变量介于两个指定的数字之间。



因(yīn)为屏幕的横(héng)向范围为(wéi)0~127,纵向范围(wéi)为0~63,方块(kuài)边(biān)长为4,所以x的范围为(wéi)0~124,y的范围为0~60,可以用(yòng)以(yǐ)下代码块来限定(dìng)x与y的范(fàn)围(wéi),这样方块就不会超出屏幕了。


3、按键控制(zhì)

右键(jiàn)按下让x增加4,y保持不变(biàn)(小方块向右(yòu)移动4步(bù)):


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

我们把确定键(jiàn)作为初始化按键(让小方块回(huí)到OLED屏幕中(zhōng)点):


程序分块到(dào)这(zhè)里就讲(jiǎng)解完成了(le),接下来我们(men)只需(xū)要把之前编写(xiě)好的程序块结合起来就可以实现按键控制小方(fāng)块的移动了,程序如下:


运行(háng)以上程序,按键的(de)上(shàng)下左右(yòu)可以(yǐ)控制小(xiǎo)方块的移动方(fāng)向,确定键按下时(shí),小方(fāng)块回到屏幕中(zhōng)心。

三、延伸与扩展——Arts

想一想,我(wǒ)们可不可以用(yòng)屏幕和按键做一个贪吃蛇游(yóu)戏呢,怎样去实现?


请以小组(zǔ)的(de)形式(shì)进行合作(zuò),尝(cháng)试使(shǐ)用屏(píng)幕和按键做(zuò)一个贪吃蛇游戏 。

设计(jì)要求:

能够用按键操控(kòng)贪吃蛇小游戏,其中(zhōng)确定键可以暂停与开始(shǐ)游戏;

保证(zhèng)控制方式安全可靠。



山东省济(jì)南市(shì)历下区(qū)舜华路750号大(dà)学(xué)科技园北区3号楼
服(fú)务热(rè)线:13256445996                                  www.haozhou.shangrao.huangnan.sys.jixi.ww38.viennacitytours.com

欧宝官方端平台-欧宝(中国)

欧宝官方端平台-欧宝(中国)