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