通过编程实现按键控(kòng)制OLED屏(píng)中的(de)方块移动(dòng)。"/>
大 创 实 验 室
第三章 科创板-键(jiàn)位控制第三章第2课 科(kē)创板-键位(wèi)控制 1、学会使用(yòng)按键(jiàn)驱动板载蜂(fēng)鸣(míng)器工(gōng)作; 2、通过编程实现(xiàn)按(àn)键控制OLED屏中的方块(kuài)移动。 1 1、键位发声 我们(men)首先用按键控制蜂鸣器执行(háng)简单的功能:当按键上按下(xià)时,蜂鸣器播放声音(yīn)1秒(miǎo),然后停(tíng)止发声。 认识“结束声音”代码块 “结束声音”代(dài)码块位于“执行器”模块中,它的功能是终止蜂(fēng)鸣器(qì)的发声。 按键控制蜂鸣器发声程序如下: 将上图程序下载(zǎi)到科创板,当按键上(shàng)按下时,蜂鸣器播(bō)放声(shēng)音1秒,然后(hòu)停止(zhǐ)发(fā)声(shēng)。 2、函数(shù)应用 当我们的(de)程序中需要多次用到一组相(xiàng)同的代码时,我们可(kě)以用函数来实(shí)现,每(měi)次用到(dào)这段代码(mǎ)时调用即可(kě)。 认识“创建函(hán)数”代码(mǎ)块 “创建函数(shù)”代码块(kuài)位于“函数”模(mó)块(kuài)中,它的功能是创建一(yī)个不带输出值的(de)函数(shù)模块。 在函(hán)数中可以(yǐ)设置变量,点击蓝色设置按钮,弹(dàn)出参(cān)数框,将参数X拖到右边输(shū)入(rù)下边即可 下(xià)面我们以一个实际(jì)运用来说明一(yī)下“创建函数”代(dài)码块的使用方法: 上(shàng)面的函数表示:每间(jiān)隔x微秒(1秒=1000毫(háo)秒=1000000微秒(miǎo)),蜂鸣器电平切换一次,即表示生成频(pín)率为1000000/2x的声(shēng)音信号。 当我们创建好(hǎo)函(hán)数代码时,在“函数”模块中(zhōng)会出现一个(gè)新的代码块,“执行函数参数X”代码块,它的(de)作用是执行用户自(zì)定义参数为X的函数块。 通过(guò)上、下、左(zuǒ)、右四个按键(jiàn)(对应的管脚分别为:12、23、36、2,其中按键左的逻辑是反的(de)),控制蜂(fēng)鸣器发出不(bú)同频率(lǜ)声音的程序: 运行上面的程序,我(wǒ)们(men)就可以通过(guò)点击不同(tóng)按键控制蜂鸣器发出不同(tóng)频率的声(shēng)音了。 3、程序中(zhōng)断命令(lìng) “中断”是指科创板在(zài)运(yùn)行(háng)程序的(de)过程中(zhōng),由(yóu)于出现一些(xiē)特(tè)别的情况,停止当前(qián)的程序去执行新(xīn)的程序,等处(chù)理完成后(hòu)再返回原来被暂停的程序(xù)继(jì)续执行。 中断可(kě)以类比生活中的例子:比如你正在(zài)看电(diàn)视(shì),突然门口门铃响(xiǎng)起,有快递送上门,所(suǒ)以你就暂(zàn)停(tíng)看(kàn)电视去拿快递,等收完(wán)快(kuài)递后(hòu)继续看(kàn)电视。在这个(gè)过(guò)程中,看电视是你主要的任务(主(zhǔ)程序),而收快(kuài)递就是一个中(zhōng)断(duàn)过程,门铃响起就是一个中断的标志(触(chù)发中断的条件)。中断(duàn)示(shì)意图如下(xià): 认识“中断(duàn)”代码块(kuài) “中断”代码块位(wèi)于“输入/输出”模(mó)块(kuài)中,它的功能(néng)是设置(zhì)指定管(guǎn)脚的(de)中断(duàn)模式(shì)为(wéi)上升、下降(jiàng)或者改变,并执行回调函数。 中断触发的条件有(yǒu)三种:上升、下降和(hé)改变。上升模式为当管脚由低电平变为高电平时,触发中断;下降(jiàng)模式为当管脚由高电平变为低电平时(shí),触发中断;改变模式为(wéi)当管脚(jiǎo)的(de)电平发生变化的时候,触发中(zhōng)断。 这里我们展示一个实际中断函数的程序,做完(wán)这个,大家就会更(gèng)深入的了解中断的含义(yì)了(le),程序如下: 此程序(xù)设置(zhì)的中(zhōng)断是(shì)当检测到按键上被按下时(shí),就会执行回调函数里(lǐ)的(de)程序(xù)。将上面的程序(xù)下载(zǎi)到科创板后,我们点击按键上,就可以听到蜂鸣器发出的(de)三种不(bú)同声音了(le)。 二(èr)、键位控(kòng)制(zhì)OLED屏——Technology and Math 我们可以(yǐ)驱动按键去控制多彩(cǎi)LED灯(dēng)以及蜂鸣器工作了,接(jiē)下(xià)来(lái),我们要(yào)做的就是(shì)要让按键功能更(gèng)加直观的体现出来。大家来思考一个问题,我们可不(bú)可以通(tōng)过按键移(yí)动屏幕上显示的方块呢,怎样(yàng)去实现(xiàn)这(zhè)个功能呢? 为了实现上(shàng)述的功能,我们可以分(fèn)步进行: 1、绘制方块(kuài) 在(zài)前(qián)面(miàn)的课(kè)程里,我(wǒ)们已经学过用OLED屏显示矩形,这(zhè)里用到同样的代码块“绘制矩形”,不过其(qí)中的参数需要(yào)调(diào)整一下(因为(wéi)我们要控制方块(kuài)移(yí)动(dòng),所以方(fāng)块(kuài)尺寸(cùn)要(yào)合(hé)适(shì))。 我们将方块的边(biān)长定(dìng)为4,那么(me) “绘制矩形”代码块里关(guān)于宽度高度设置的两个变量要(yào)改为(wéi)4;开始时方块要显示在屏幕中央,相对应(yīng)的起点参数设置x=62,y=30。 上面(miàn)两种程序表达方式都可以,第二种里(lǐ)面的“科(kē)创板oled初始化”代码(mǎ)块 此(cǐ)时(shí)绘(huì)制(zhì)的方块只有四条边,中间是空的(de),所以要在(zài)“填充”后面打钩,这样(yàng)这个边(biān)长为4的方块才能填(tián)充起来。 运行以上程序(xù),OLED屏(píng)中间会显(xiǎn)示一个填充后的小(xiǎo)方(fāng)块。 2、施(shī)加约束 认识“约束”代(dài)码块 “约(yuē)束”代码块位于“数学”模块中,它的功能是限制数字或者变量介于(yú)两个指定的数字之(zhī)间。 因为屏幕的横向范围为0~127,纵向范围为0~63,方块边(biān)长为(wéi)4,所(suǒ)以x的范围为0~124,y的范(fàn)围为0~60,可以用以下代码块来限(xiàn)定x与y的范(fàn)围,这样方块就不会超(chāo)出(chū)屏幕了。 3、按键(jiàn)控制 右键按下让x增加4,y保持(chí)不(bú)变(biàn)(小方块向右移动(dòng)4步): 同理,可以推写出上、下、左键按下(xià)时的(de)程序块(需要注意的是左键的逻辑是反的,所以左键的判(pàn)定条件是(shì)当管(guǎn)脚36的值等于0时)。 我(wǒ)们把确定键作为(wéi)初始化按键(让小方块回到OLED屏(píng)幕中点): 程(chéng)序分块到这里就(jiù)讲解完成了,接(jiē)下来我们只需要(yào)把之前编写好的程序块结合起(qǐ)来就可以实现按键控制小方块的(de)移动(dòng)了,程序如下: 运行以上程序,按键(jiàn)的上(shàng)下左右可以控制小方块的(de)移动方向,确定键按下时,小方块(kuài)回到(dào)屏(píng)幕中心。 三、延伸与扩展——Arts 想一(yī)想(xiǎng),我们可不(bú)可(kě)以用屏幕和按键做一个贪吃蛇游戏呢,怎样去实现? 请以小组的形式进(jìn)行合作,尝试使用屏幕(mù)和按(àn)键做(zuò)一个贪吃蛇游戏 。 设计(jì)要(yào)求(qiú): (能够用按键操控贪吃(chī)蛇小(xiǎo)游戏,其中确定键可以(yǐ)暂停与开始游戏; (保证控制方式(shì)安全可靠(kào)。 |