CN111773692A - 基于MicroPython的硬件驱动方法、设备及存储介质 - Google Patents

基于MicroPython的硬件驱动方法、设备及存储介质 Download PDF

Info

Publication number
CN111773692A
CN111773692A CN202010634189.5A CN202010634189A CN111773692A CN 111773692 A CN111773692 A CN 111773692A CN 202010634189 A CN202010634189 A CN 202010634189A CN 111773692 A CN111773692 A CN 111773692A
Authority
CN
China
Prior art keywords
interface
game
physical button
display
micropython
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010634189.5A
Other languages
English (en)
Inventor
杨立斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Siming Qichuang Technology Co ltd
Original Assignee
Beijing Siming Qichuang Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Siming Qichuang Technology Co ltd filed Critical Beijing Siming Qichuang Technology Co ltd
Priority to CN202010634189.5A priority Critical patent/CN111773692A/zh
Publication of CN111773692A publication Critical patent/CN111773692A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • A63F13/52Controlling the output signals based on the game progress involving aspects of the displayed game scene
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/30Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by output arrangements for receiving control signals generated by the game device
    • A63F2300/308Details of the user interface

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Control Of Indicators Other Than Cathode Ray Tubes (AREA)

Abstract

本申请实施例提供一种基于MicroPython的硬件驱动方法、设备及存储介质。在本申请实施例中,通过对MicroPython的底层驱动接口进行封装,可以生成具有多个数据图层和LCD显示器硬件底层驱动的显示驱动程序,丰富了底层驱动接口的功能,使得上层应用在调用底层显示驱动程序时,可以通过基于MicroPython的SPI驱动接口封装而成的硬件底层驱动将多个数据图层中的游戏数据输出至LCD显示器上进行显示,以对游戏画面的显示效果进行更加具体的控制,丰富了游戏画面的视觉效果和趣味性,提升了用户体验。

Description

基于MicroPython的硬件驱动方法、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于MicroPython的硬件驱动方法、设备及存储介质。
背景技术
MicroPython是Python3编程语言的一个完整软件实现,用C语言编写,被优化与运行在微控制器上,提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。MicroPython除了包含选定的核心Python库,MicroPython还包括给予编程者访问底层硬件的模块。编程者可以通过MicroPython的驱动接口实现对底层硬件的控制和访问,比如读取电压、温湿度、超声测距、控制舵机、电机、加速度计等。但是,现有通过MicroPython驱动接口对底层硬件的控制和访问相对有限,无法满足编程硬件游戏中对底层硬件的控制和访问需求。
发明内容
本申请的多个方面提供一种基于MicroPython的硬件驱动方法、设备及存储介质,用以丰富底层硬件驱动接口对底层硬件的控制功能,提升可编程设备的趣味性。
本申请实施例提供一种基于MicroPython的硬件驱动方法,所述方法包括:基于游戏逻辑,利用不同类型的游戏数据构建显示驱动程序中的多个数据图层;基于MicroPython的SPI驱动接口,实现所述显示驱动程序中用于驱动可编程硬件设备上的LCD显示器的硬件底层驱动;所述硬件底层驱动还用于将所述多个数据图层中的游戏数据输出至所述LCD显示器上,以供编程人员利用所述显示驱动程序在所述LCD显示器上对游戏进行显示控制。
本申请实施例还提供一种可编程硬件设备,包括:处理器、存储有计算机程序的存储器以及LED显示器;所述处理器,用于执行所述计算机程序,以用于:响应编程人员的第一编程指令,调用基于MicroPython的SPI驱动接口实现的显示驱动程序,以供编程人员利用所述显示驱动程序在所述可编程硬件设备上的LCD显示器上至少进行游戏背景和游戏角色的显示控制。
本申请实施例还提供了一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器至少实现以下动作:响应编程人员的第一编程指令,调用基于MicroPython的SPI驱动接口实现的显示驱动程序,以供编程人员利用所述显示驱动程序在所述可编程硬件设备上的LCD显示器上至少进行游戏背景和游戏角色的显示控制。
在本申请实施例中,通过对MicroPython的底层驱动接口进行封装,可以生成具有多个数据图层和LCD显示器硬件底层驱动的显示驱动程序,丰富了底层驱动接口的功能,使得上层应用在调用底层显示驱动程序时,可以通过基于MicroPython的SPI驱动接口封装而成的硬件底层驱动将多个数据图层中的游戏数据输出至LCD显示器上进行显示,以对游戏画面的显示效果进行更加具体的控制,丰富了游戏画面的视觉效果和趣味性,提升了用户体验。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请实施例提供的一种基于MicroPython的硬件驱动方法的流程图;
图1b为本申请实施例提供的一种显示驱动程序的结构逻辑示意图;
图1c为本申请实施例提供的一种角色坐标位置示意图;
图1d为本申请实施例提供的一种角色未碰撞的坐标位置示意图;
图1e为本申请实施例提供的一种角色发生碰撞的坐标位置示意图;
图2a为本申请实施例提供的一种按钮驱动程序的逻辑示意图;
图2b为本申请实施例提供的一种位接口的逻辑示意图;
图2c为本申请实施例提供的一种ID接口的逻辑示意图;
图2d为本申请实施例提供的一种高低值接口的逻辑示意图;
图2e为本申请实施例提供的一种下降沿接口的逻辑示意图;
图3a为本申请实施例提供的一种音频驱动程序的逻辑示意图;
图3b为本申请实施例提供的另一种音频驱动程序的逻辑示意图;
图4a为本申请实施例提供的一种彩灯驱动程序的逻辑示意图;
图4b为本申请实施例提供的另一种彩灯驱动程序的逻辑示意图;
图5为本申请实施例提供的一种可编程硬件设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在现有技术中,MicroPython为编程者提供了可以控制和访问底层硬件的驱动接口,编程者通过访问这些驱动接口可以实现对硬件设备的访问和控制。例如,读取电压、温湿度、超声测距、控制舵机、电机、加速度计等参数。然而,由于MicroPython所提供的驱动接口功能相对简单,只能为编程者提供基础的控制服务,当需要对硬件设备进行更多的功能控制时,MicroPython所提供的驱动接口无法满足编程者的需求,尤其是对于具有丰富游戏功能的可编程硬件设备,因其对底层硬件的控制需求更为具体、多样性和灵活,所以MicroPython所提供的驱动接口更是无法满足编程者对可编程硬件设备底层硬件的控制需求。因此,针对该技术问题,有必要对MicroPython所提供的驱动接口进行二次封装和功能自定义,增加更丰富的处理功能,以满足对具有游戏功能的可编程硬件设备底层硬件的控制和访问等需求。
在具有游戏功能的可编程硬件设备上,为了增加游戏交互、趣味性,需要设置有LCD显示器,通过LCD显示器可以显示游戏画面中的游戏信息。关于如何通过LCD显示器显示游戏信息以及如何设置游戏信息的底层实现方式,本申请实施例提供了一种基于MicroPython的硬件驱动方法,图1a为该方法的流程图,如图1a所示,方法包括:
S1a、基于游戏逻辑,利用不同类型的游戏数据构建显示驱动程序中的多个数据图层。
S2a、基于MicroPython的SPI驱动接口,实现显示驱动程序中用于驱动可编程硬件设备上的LCD显示器的硬件底层驱动。
S3a、硬件底层驱动还用于将多个数据图层中的游戏数据输出至LCD显示器上,以供编程人员利用显示驱动程序在LCD显示器上对游戏进行显示控制。
在本申请实施例中,根据游戏逻辑中的不同类型的游戏数据构建不同的数据图层,针对不同类型的游戏数据(不同数据图层中的游戏数据)可以进行具体的处理,丰富了底层显示驱动接口的处理功能。例如,在游戏数据中包含蓝天、白云和人物三种游戏数据,在构建数据图层时,可以根据上述三种游戏数据构建三个不同的数据图层,即构建成包含蓝天类型游戏数据的图层、包含白云类型游戏数据的图层和包含人物类型游戏数据的图层。
进一步,通过基于MicroPython的SPI驱动接口封装而成的LCD显示器硬件底层驱动,可以将多个数据图层中的游戏数据的处理结果输出至LCD显示器,并对不同数据图层中的游戏数据处理结果进行有针对性的显示控制,丰富游戏画面的显示效果。例如,通过硬件底层驱动分别将上述三个数据图层的处理结果输出至LCD显示器上,并在LCD显示器上的上半部分显示蓝天和白云,在在LCD显示器上的下半部分显示人物。
可选地,可编程硬件设备上除了包含LCD显示器外,还可以包含有物理按钮、彩灯以及音频电路(如扬声器)等硬件模块,通过这些硬件模块与LCD显示器配合,使得可编程硬件设备的功能更强大。因此,为了丰富可编程设备硬件模块的功能,在本申请实施例的方法中,还可以包括:基于MicroPython的I/O驱动接口实现按钮驱动程序,以供编程人员利用按钮驱动程序在可编程硬件设备上自定义使用的物理按钮并通过物理按钮实现对游戏角色的控制;和/或,基于MicroPython的PWM驱动接口实现音频驱动程序,以供编程人员利用音频驱动程序对可编程硬件设备上的音频电路进行播放控制;和/或,基于MicroPython的SPI驱动接口实现彩灯驱动程序,以供编程人员利用彩灯驱动程序对可编程硬件设备上的LED彩灯进行显示控制。
在上述实施例中,通过对MicroPython的I/O驱动接口进行封装,增加自定义物理按钮功能的内容,以对选定的物理按钮进行功能自定义,可以实现对LCD显示器中的游戏画面进行特定的功能控制。通过对MicroPython的PWM驱动接口进行封装,增加对可编程硬件设备的音频电路进行播放控制的功能,可以实现在玩家使用可编程硬件设备时播放指定的音频。通过对MicroPython的SPI驱动接口进行封装,增加控制LED彩灯显示的功能,可以实现在玩家使用可编程硬件设备时,控制LED彩灯的显示。
在本上述实施例中,基于MicroPython原有的驱动接口,经过二次封装处理后,形成了可以为底层硬件提供更为丰富的控制功能驱动接口,通过访问这些驱动接口,即可实对底层硬件的控制,进而丰富游戏的趣味性。玩家在使用可编程硬件设备玩游戏时,可以通过操作物理按钮实现对LCD显示器中的游戏画面进行控制。并且,根据不同的游戏场景,可编程硬件设备还可以通过音频电路和彩灯进行音频和灯光提示。例如,以贪吃蛇游戏为例,玩家可以通过操作物理按钮控制小蛇的方向,以改变小蛇的行进路径,促使小蛇顺利吃到小球,进而不断增长变成大蛇。又例如,以推箱子游戏为例,玩家可以通过操作物理按钮控制小人推箱子的方向,进而将箱子顺利推到指定位置。在玩家玩游戏的过程中,根据不同的游戏的规则和游戏场景,底层硬件驱动接口还可以通过控制LED彩灯和音频电路对玩家进行相应的提示。例如,在玩家开机、启动游戏以及关机时,音频电路可以播放不同的音乐予以提示。又例如,当玩家游戏闯关成功时,音频电路可以播放一段欢快的音乐,用以祝贺玩家闯关成功;当玩家游戏闯关失败时,音频电路可以播放一段悲伤的音乐,用以提示玩家闯关失败。又例如,在玩家玩游戏过程中,根据不同的游戏场景,在玩家操作物理按钮对游戏角色进行不同的控制时,也可以伴随有不同的音频。例如在上述贪吃蛇游戏的实施例中,玩家在控制小蛇前进时可以持续伴随有音乐1,当小蛇吃到小球的时可便随有音乐2等。并且,在上述音乐播放的同时,还可以亮起LED灯,更醒目的提示玩家。
在本申请实施例中,对于不同的可编程硬件设备,所包含的硬件模块可能相同,也可能不同。例如,一款可编程硬件设备同时包含LCD显示器、物理按钮、彩灯以及音频电路;另一款可编程硬件设备同时包含LCD显示器、物理按钮和彩灯;再一款可编程硬件设备同时包含LCD显示器和物理按钮;等等。在本实施例中,上述方法中的步骤是根据可编程设备上的硬件模块而定的,在可编程设备上包含哪些硬件模块,本申请实施例的方法即可包含与硬件模块对应的底层驱动程序的生成步骤,因此,对于本申请实施例方法中的步骤不做限定。并且,对于可编程硬件设备的实现形态不做限定,除了包含上述LCD显示器、物理按钮、音频电路以及彩灯等硬件模块外,还可以包含其他硬件模块。例如,操作键盘、触摸屏或者其他硬件模块等,根据不同的功能需求可以包含不同的硬件模块,相应地,在本申请实施例的方法中对应各硬件模块的底层驱动程序的生成步骤也会不同,上述仅为是示例性说明。进一步,对于可编程硬件设备的外观形态也不做限定,可以是可编程机器人、可编程小车、可编程计算机等。
在本申请实施例中,并不限定基于MicroPython的驱动接口二次封装所实现的各硬件模块的驱动程序的功能,除了包含上述功能外,各硬件模块对应的驱动程序还可以对硬件模块进行更丰富的控制。下面以基于MicroPython的驱动接口二次封装得到LCD显示器、物理按钮、音频电路以及彩灯等硬件模块对应的驱动程序的封装的过程为例,进行详细说明。
图1b为本申请实施例中基于MicroPython的SPI接口实现的显示驱动程序的逻辑示意图,如图1b所示,显示驱动程序100包括:游戏图层110、屏幕显示层120和硬件底层驱动130。意味着,实现显示驱动程序100的过程包括:基于游戏逻辑,利用不同类型的游戏数据构建显示驱动程序100中的多个数据图层;以及基于MicroPython的SPI驱动接口,实现显示驱动程序100中用于驱动可编程硬件设备上的LCD显示器的硬件底层驱动130。其中,游戏图层110用于构建游戏背景和游戏角色,通过屏幕显示层120和硬件底层驱动130,可以将多个数据图层中的游戏数据(构建的游戏背景和游戏角色)输出至LCD显示器上,以供编程人员利用显示驱动程序100在LCD显示器上对游戏进行显示控制。其中,游戏图层110至少包括用于存储游戏图形数据的图形数据空间111,用于基于游戏图形数据设定游戏背景的背景图层112和用于基于游戏图形数据构建游戏角色的角色图层113;屏幕显示层120用于对背景图层112和角色图层113进行显示计算以得到图层像素。在本实施例中,游戏图形数据是指存储在图片中的游戏中的数据元素,这些数据源数元素在存储时以像素为单位进行存储。例如,可以将游戏中的数据元素存储在bmp图片中,假设每张图片的大小为16*256个像素单位,每个数据元素的大小为16*16个像素单位,则一张图片可以存储16个数据元素。当游戏中有较多数据元素时,可以存储在多张图片中,即图形数据空间111中可包含多张图片,这多张图片中的数据元素构成游戏图形数据。在本实施例中,并不限定对游戏图形数据的获取方式,例如可以预先存储在图形数据空间111中,也可以如图1b所示通过MicroPython的文件获取接口读取指定位置中的游戏图形数据。
进一步,当图形数据空间111中存储有游戏图形数据后,背景图层112即可从图形数据空间111中获取游戏图形数据,用于构建在LCD显示器中显示的游戏背景。对于不同的可编程硬件设备,其LCD显示器的屏幕尺寸可能不同,因此,对于背景图层112从图形数据空间111中获取游戏图形数据的大小有一定的要求。在本实施例中,并不限定背景图层112获取游戏图形数据大小方式,例如,根据可编程硬件设备LCD显示器屏幕尺寸,预先对背景图层112设置一个默认像素值,并获取与该默认像素值相同大小的游戏图形数据,以便于构建适应LCD显示器屏幕尺寸的游戏背景。又例如,在背景图层112每次获取游戏图形数据之前,可以实时读取可编程硬件设备LCD显示器的屏幕尺寸,基于此,获取与可编程硬件设备LCD显示器的屏幕尺寸相同大小的游戏图形数据,以构建适应LCD显示器屏幕尺寸的游戏背景。例如,可编程硬件设备LCD显示器的屏幕尺寸为160*128个像素单位,若游戏图形数据中每个数据元素的大小为16*16个像素单位,则可以将背景图层112的默认像素值设置为10*8个像素单位,并从图形数据空间111中获取10*8个像素单位的游戏图形数据,用于构建适应LCD显示器屏幕尺寸的游戏背景。或者,背景图层112在获取游戏图形数据之前,读取可编程硬件设备LCD显示器的屏幕尺寸,根据读取到的结果从图形数据空间111中获取10*8个像素单位的游戏图形数据,用于构建适应LCD显示器屏幕尺寸的游戏背景。在本实施例中,背景图层112除了构建适应LCD显示器的屏幕尺寸的游戏背景外,还可以对游戏界面中指定的位置设置游戏背景。例如,游戏界面中的背景中包括草坪和街道两部分,这两部分对应的背景颜色并不相同,即草坪和街道分别对应的游戏图形数据不相同。因此,当背景图层112在构建该游戏背景时,可以从图形数据空间111中获取与草坪和街道在游戏界面中的坐标位置对应的游戏图形数据,并将对应的游戏图像数据分别构建在游戏界面中对应的坐标位置处,形成包含草坪和街道的游戏背景。
在本申请实施例中,角色图层113在构建游戏角色时需要从图形数据空间111中获取游戏图形数据,在构建游戏角色时,可在游戏界面中为每个游戏角色设定初始坐标位置,将游戏角色构建在对应的初始坐标位置处。例如,以(x,y)标识游戏角色在游戏界面中的坐标位置,通过改变坐标位置可以实现游戏角色的移动,进一步可选地,在游戏角色移动过程中,还可以获取与游戏角色刚刚移动经过的坐标位置对应的游戏图形数据,并将获取到的游戏图形数据构建在游戏角色刚刚移动经过的坐标位置处,实现短暂的显示,以形成渐变的效果,标识游戏角色的移动轨迹。进一步,如图1b所示,通过背景图层112构建的游戏背景和角色图层113构建的游戏角色,可以通过屏幕显示层120进行显示计算以得到图层像素,该图层像素中包含的游戏图形数据的坐标位置与游戏界面中每个像素的坐标位置对应。例如,可编程硬件设备LCD显示器的屏幕尺寸为160*128个像素单位,则该图层像素的大小也为160*128个像素单位,且每个像素单位对应游戏界面中的背景颜色。在上述实施例中,以游戏界面以全屏方式展示在可编程硬件设备的LCD显示器上为例进行说明。
在本申请实施例中,如图1b所示,游戏图层110还包括用于基于游戏图形数据构建游戏文本的文本图层114;屏幕显示层120还用于在被调用时将游戏文本转换为文本像素;硬件底层驱动130还用于在被调用时将文本像素输出至LCD显示器上。在本实施例中,并不限定游戏文本的形式和内容,在形式上可以是汉字也可以是数字;在内容上可以是对游戏规则的介绍和说明,也可是根据玩游戏的场景对玩家给予的提醒。例如,文本图层114可以设置包含在游戏开始或者进入下一关之前倒计时内容的游戏文本,并通过屏幕显示层120将该游戏文本转换成文本像素,在游戏开始或者进入下一关之前,可以通过调用硬件底层驱动130将“3、2、1、开始!”字样的文本像素输出至LCD显示器上,并以倒计时的方式在LCD显示器上显示。又例如,文本图层114可以设置包含游戏的规则说明和每个游戏角色的技能介绍内容的游戏文本,并通过屏幕显示层120将该游戏文本转换成文本像素,当玩家打开游戏时,可以通过调用硬件底层驱动130将游戏的规则说明和每个游戏角色的技能介绍对应的本文像素输出至LCD显示器上进行显示。在本实施例中,对于构建游戏文本的方式和游戏文本在LCD显示器上显示的位置不做限定。例如,可以直接在文本图层114中构建游戏文本并设置游戏文本在LCD显示器上显示的坐标位置,硬件底层驱动130可根据该位坐标置将游戏文本对应的文本像素输出至LCD显示器上对应该坐标位置处进行展示。或者,文本图层114可以基于游戏图形数据设置文本内容及其位置,以构建出游戏文本。文本图层114可从图形数据空间111中获取游戏图形数据及其对应的坐标位置,基于此,构建对应的游戏文本,硬件底层驱动130可根据游戏图形数据中坐标位置将游戏文本对应的文本像素输出至LCD显示器上对应该坐标位置处进行展示。进一步可选地,文本图层114还可以设定游戏文本在LCD显示器上展示的时长,进而实现对游戏文本的清除。例如,设定游戏文本在LCD显示器上展示30秒,则当硬件底层驱动130将游戏文本对应的文像素输出至LCD显示器上进行显示后,30秒后将自动清除。
在本申请实施例中,在硬件底层驱动130将图层像素和文本像素输出至LCD显示器上时,为了适配不同的LCD显示器,可以对MicroPython底层SPI接口进行封装,得到硬件底层驱动130中的多个显示控制接口。例如,硬件底层驱动130可以包括LCD显示器对应的SPI引脚接口,该SPI引脚接口可以连接并控制LCD显示器显示图层像素和文本像素;还可以包括屏幕大小接口,用于调整图层像素和文本像素显示界面的大小,以适应LCD显示器的屏幕大小;还可以包括位置校准接口,用于确定图层像素和文本像素在LCD显示器中的坐标位置,以将图层像素和文本像素显示在LCD显示器上的正确位置;还可以包含图形旋转接口和屏幕亮度接口等,用于调整图层像素和文本像素在LCD显示器中显示的方向和亮度等。硬件底层驱动130通过上述显示控制接口可以适配LCD显示器的屏幕,并根据屏幕显示层120的调用,通过多个显示控制接口将图层像素和文本像素输出至LCD显示器上。在本申请实施例中,并不限定硬件底层驱动130包含的显示控制接口的个数和功能,根据不同的可编程硬件设备具有不同的功能和不同的游戏场景,硬件底层驱动130所包含的显示控制接口也可以不同,编程者可以根据具体需求灵活扩展。
在本申请实施例中,屏幕显示层120除了将背景图层112构建的游戏背景和角色图层113构建的游戏角色转换成图层像素,以及将文本图层114构建的游戏文本转换成文本像素外,还可以对背景图层112和角色图层113进行更新。在实际游戏场景中,游戏界面中的游戏背景变化的可能性很小,随着游戏的进行,游戏角色的信息会随着游戏场景不断变化。因此,屏幕显示层120可以在可编程硬件设备开机启动游戏时对背景图层更新一次,并在玩家玩游戏过程中按照设定的更新频率对角色图层进行周期性更新;根据周期性更新后的角色图层与开机启动游戏时更新后的背景图层进行显示计算,以得到游戏中动态变化的图层像素。进而,周期性调用硬件底层驱动130,将更新后的图层像素输出至LCD显示器上,以实现游戏界面的动态效果显示。例如,若在游戏界面中,游戏背景为绿色,游戏角色为一个移动的红色小球,移动速率为1毫秒一个像素单位。则屏幕显示层120可以设置更新周期为1毫秒,每隔1毫秒计算一次小球的位置坐标,并对背景图层112和角色图层113进行更新。进而,每隔1毫秒调用一次硬件底层驱动130将更新后的图层像素传输至LCD显示器上,实现游戏界面的动态效果显示。
进一步地,屏幕显示层120还用于监控不同游戏角色在移动过程中的坐标位置,通过不同游戏角色之间的坐标位置关系对不同游戏角色进行碰撞控制。在玩家玩游戏的过程中,随着玩家操控游戏角色的移动,游戏角色对应的坐标位置会不断变化,当在一个游戏界面中至少存在2个游戏角色时,就可能发生游戏角色碰撞的情况。图1c以游戏角色分别为小人和足球为例进行说明,如图1c所示,小人的左上角坐标为(ax0,ay0),右下角坐标为(ax1,ay1);足球的左上角坐标为(bx0,by0),右下角坐标为(bx1,by1)。屏幕显示层120通过读取小人和足球之间坐标的位置关系可以判断小人和足球是否碰撞。如图1d和1e所示,小人分别在足球的左、上、右、下四个方向,在图1d所示的场景中,屏幕显示层120读取到小人和足球之间的坐标位置关系为:小人在足球的左边时,ax1<bx0;小人在足球的上边时,ay1<by0;小人在足球的右边时,ax0>bx1;小人在足球的下边时,ay0>by1。通过上述坐标位置关系可以判断小人和足球所覆盖的像素没有重合部分,因此,小人和足球没有发生碰撞。在图1e所示的场景中,屏幕显示层120读取到小人和足球之间的坐标位置关系为:小人在足球的左边时,ax1>bx0;小人在足球的上边时,ay1>by0;小人在足球的右边时,ax0<bx1;小人在足球的下边时,ay0<by1。通过上述坐标位置关系可以判断小人和足球所覆盖的像素有重合部分,因此,小人和足球发生了碰撞。例如,以编程者借助(Integrated DevelopmentEnvironment,IDE)编程工具进行游戏编程为例,可通过执行代码:def collide(ax0,ay0,ax1,ay1,bx0,bx1,bx1,by1);定义小人和足球的坐标,进一步通过执行代码:return not(ax1<bx0 or ay1<by0 or ax0>bx1or ay0>by1);判断小人和足球是否发生碰撞。
根据上述实施例可知,本申请实施例通过对MicroPython的SPI驱动接口进行封装,得到具有游戏图层、屏幕显示层以及硬件底层驱动功能的显示驱动程序,该显示驱动程序可以为编程者提供更多的底层硬件控制功能,将游戏图形数据构建成游戏背景、游戏角色以及游戏文本,并且通过屏幕显示层将构建的游戏背景、游戏角色和游戏文本转换为图层像素和文本像素,进而调用硬件底层驱动输出至LCD显示器上进行显示,丰富了可编程硬件设备的游戏功能和趣味性,提升了用户体验。下面结合具体的场景实施例,对显示驱动程序的功能进行实例性说明。
场景实施例1:
以编程者利用显示驱动程序完成构建游戏背景、游戏角色和游戏文本为例进行说明。初始状态,编程者可在可编程硬件设备上导入上述显示驱动程序程序,并初始化可编程设备的LCD显示器,当软件驱动和硬件设备都准备好后,编程者即可在可编程硬件设备上编写游戏程序(该游戏程序属于需要调用显示驱动程序的上层应用)。当需要在屏幕上显示图像时,可调用显示驱动程序,并向显示驱动程序提供待显示的图形数据。参见图1b可知,显示驱动程序通过调用MicroPython中的文本获取接口读取存储有游戏数据元素的bmp图片,并将读取到的bmp图片存储到图形数据空间;在显示驱动程序中,游戏图层获取图形数据存储空间中的游戏图形数据,构建背景图层对应的游戏背景,角色图层获取图形数据存储空间中的游戏图形数据,根据游戏图形数据的角色构建游戏角色以及文本图层对应的游戏文本。进一步,通过调用屏幕显示驱动获取构建好的数据,并将游戏背景和游戏角色转化成对应的图层像素,将游戏文本转化成文本像素,进而调用底层硬件驱动获取图层像素和文本像素,并通过多个显示控制接口将图层像素和文本像素显示到LCD显示器上,实现游戏背景、游戏角色和游戏文本的构建过程。
在上述构建游戏背景、游戏角色和游戏文本的过程中,编程者可以根据具体需求设置游戏图形数据的内容,以及基于游戏图形数据构建的游戏背景、游戏角色和游戏文本的内容和属性,以实现丰富的功能。例如,可以设置游戏文本的内容、在LCD显示器上的显示位置、显示时长、显示方式;设置背景图层和角色图层的刷新周期、游戏角色的形状、初始显示坐标、移动效果以及碰撞效果等,具体实现方式可参见上述实施例,在此不再赘述。
场景实施例2:
以编程者借助IDE编程工具进行游戏编程,完成游戏背景和游戏角色的构建为例进行说明。在对游戏背景和游戏角色构建之前,编程者通过执行代码inport displayio;import stage;导入屏幕和游戏驱动文件;进一步,通过执行代码bank=stage.Bank.from_bmp16(“test.bmp”);完成倒入存储有游戏数据元素的bmp图片并读取游戏图形数据,在准备工作做好之后,即可实现构建游戏背景和游戏角色的功能。例如,首先执行代码background=stage.Grid(bank,10,8);设置游戏背景的大小为10*8个像素单位;再通过执行代码sprite=stage.Sprite(bank,1,8,8);设置游戏角色(精灵)的坐标为(8,8);通过执行代码game=stage.Stage(display,12);设置屏幕的刷新率为12毫秒刷新一次;进而,通过执行代码game.layers=[sparite,background];将游戏背景和游戏角色显示在屏幕上;根据屏幕的刷新率,每隔12毫秒可执行一次代码game.render_black();实现对屏幕的刷新,以实现在屏幕上动态显示游戏画面的效果。
图2a为本申请实施例中基于MicroPython的SPI的I/O驱动接口实现按钮驱动程序的逻辑示意图,如图2a所示,按钮驱动程序200包括多个按钮控制接口。在生成多个按钮控制接口之前,需编程人员调用MicroPython的I/O驱动接口为自定义使用的目标物理按钮进行注册,初始化目标物理按钮,并将目标物理按钮的位置编号存放在列表中;针对目标物理按钮实现多个按钮控制接口,以供编程人员通过多个按钮控制接口获取到的目标物理按钮的状态信息实现对游戏角色的控制。其中,目标物理按钮是指可编程硬件设备上包含的一个或多个物理按钮,每个物理按钮可对应一个唯一的位置编号。在本实施例中,对于物理按钮的数量不做限定,视可编程硬件设备的具体实现形态和功能而定,另外,也不限定目标物理按钮的数量,可以小于或等于可编程硬件设备上的物理按钮数。编程者通过MicroPython的I/O驱动接口为自定的目标物理按钮注册和初始化是指将目标物理按钮的I/O引脚与按钮控制接口建立对应关系的过程,以实现在调用按钮控制接口时通过对应的I/O引脚对对应的目标物理按钮实现控制功能。进一步,将注册后的目标物理按钮对应的位置编号存储在列表中,以供多个按钮控制接口根据列表中的位置编号控制对应的目标物理按钮。在本实施例中,不限定对目标物理按钮进行初始化的内容,编程者可根据具体的需求灵活设置。例如,对目标物理按钮初始化的过程,主要是指设置目标物理按钮对应的I/O引脚输入状态和工作模式的过程,例如,可以设置目标物理按钮对应的I/O引脚的输入为低电平,模式为上拉;也可以设置目标物理按钮对应的I/O引脚的输入为高电平,模式为下拉等。在本申请实施例中,并不限定按钮控制接口的个数和功能,根据不同的可编程硬件设备所包含不同的功能和游戏场景,上述按钮控制接口的个数和功能可以不同。在实施例中,包括但不限于如图2a所示的位接口210、ID接口220、高低值接口230和下降沿接口240。下面以位接口210、ID接口220、高低值接口230和下降沿接口240为例,对按钮驱动程序200的实现进行具体说明。
在本实施例中,位接口210用于在被调用时返回一个二进制数据,该二进制数据中每位的值表示一个物理按钮是否被按下,其中,二进制数据的位数大于或等于可编程硬件设备上物理按钮的数量。位接口210通过读取列表中的位置编号可以确定在可编程硬件设备上的物理按钮中,哪些物理按钮被编程者定义为目标物理按钮,进而,可以设置物理按钮对应的二进制数据,并为调用方返回该二进制数据。在本实施例中,并不限定返回的二进制数据的形式,编程者可根据具体需求灵活设置。例如,在可编程硬件设备上有16个物理按钮,编程者当前选中4个物理按钮作为目标物理按钮,想要为这4个物理按钮定义“上、下、左、右”的功能,以操作游戏角色的移动。假设可编程硬件设备上的16个物理按钮对应的位置编号为0-15,其中,被选中的4个目标物理按钮对应的位置编号分别为1、2、3、4,则位接口210在读取列表后可确定位置编号为1、2、3、4对应的物理按钮被设置为目标物理按钮。其中,随着目标物理按钮不断被按下,位接口210可以读取到的二进制数据也会发生变化。在本实施例中,并不限定位接口210返回的二进制数据的形式,例如,可对被按下的物理按钮对应位的取值为1,其余物理按钮对应位的取值为0;或者,对被按下的目标物理按钮对应位的取值为0,其余物理按钮对应位的取值为1;或者,对于没有按下的物理按钮对应位不取值等。例如,对物理按钮对应的位置编号进行从左到右升序排列,当位置编号为1的目标物理按钮被按下时,位接口210返回的二进制数据为0100000000000000,此时的二进制数据表示位置编号为1的目标物理按钮被按下了;当位置编号为4的目标物理按钮被按下时,位接口210返回的二进制数据为0000100000000000,此时的二进制数据表示位置编号为4的目标物理按钮被按下了;当位置编号为1的目标物理按钮被按住后,再次按下位置编号为4的目标物理按钮时,位接口210返回的二进制数据为0100100000000000,此时的二进制数据表示位置编号为1和4的目标物理按钮被按下了。
图2b为实现位接口210的逻辑示意图,如图2b所示,位接口210在被调用时,通过从MicroPython的I/O驱动接口获取目标物理按钮的状态值,基于目标物理按钮的状态值来进行位运算。在本实施例中,MicroPython的I/O驱动接口在对目标物理注册时,可以将注册的目标物理按钮的状态值设置为1,其余物理按钮的状态值设置为0;或者,将注册的目标物理按钮的状态值设置为0,其余物理按钮的状态值设置为1;具体的设置方式不做限定,编程者可根据需求灵活设置。进一步,在根据物理按钮对应的状态值进行计算时,可通过设置检测值判断目标物理按钮对应的状态值,该检测值与注册的目标物理按钮对应的状态值相同,设置在物理按钮对应的状态值经过升序排列后的最低位。例如,以物理按钮对应的位置编号为0-15为例,若物理按钮的状态值从右到左升序排列,则检测值可设置在位置编号为0的物理按钮对应的状态值的位置,即右侧第0位;若物理按钮的状态值从左到右升序排列,则检测值可设置在位置编号为0的物理按钮对应的状态值的位置,即左侧第0位。图2b中以注册的目标物理按钮对应的状态值为1,状态值从右到左升序排列为例,则在位接口210获取到的目标物理按钮对应的状态值中,若目标物理按钮的状态值为1,则将检测值1向左移动目标物理按钮的位置编号位后与上一二进制数据按位进行或运算,以得到当前二进制数据;若目标物理按钮的状态值为0,则将检测值1向左移动目标物理按钮的位置编号后取反与上一二进制数据结果按位进行与运算,以得到当前二进制数据。下面以可编程硬件设备有16个物理按钮,对应的位置编号为0-15,注册的目标按钮对应的状态值为1,状态值从右到左升序排列为例,对位接口210的逻辑进行说明。假设位接口210获取的上一目标物理按钮对应的二进制数据为0000000000000010,若当前获取的目标物理按钮对应的位置编号为3,状态值为1,则将检测值1向左移动3位后,与上一二进制数据按位进行或运算后得到当前的二进制数据为0000000000001010;假设位接口210获取的上一目标物理按钮对应的二进制数据为0000000000000010,若当前获取的目标物理按钮对应的位置编号为1,状态值为0,则将检测值1向左移动1位后取反,再与上一二进制数据按位进行与运算后得到当前的二进制数据为0000000000000000。
通过上述实施例可知,当目标物理按钮被不断按下后,经过位接口210计算即可得到每一次被按下的目标物理按钮对应的二进制数据。进一步地,每当目标物理按钮被按下时,ID接口220通过调用位接口210可得到返回的二进制数据,进而确定哪个目标物理按钮被按下,并根据判断结果返回一个十进制的数字,该数字表示最后被按下的目标物理按钮的ID值,ID值表示目标物理按钮的位置编号。例如,表示“上、下、左、右”功能的物理按钮对应的位置编号分别为1、2、3、4,当玩家在玩游戏过程中,按下表示“左”的物理按钮控制游戏角色向左转弯时,ID接口220通过调用位接口210得到返回的二进制数据为0000000000001000,则可以确定被按下的目标物理按钮对应的位置编号为3,因此,ID接口220可以将3作为结果返回给调用方。具体地,如图2c所示,图2c为ID接口的逻辑示意图,ID接口220调用位接口210获取当前二进制数据后,将当前二进制数据与上一二进制数据进行比较;如果当前二进制数据大于上一二进制数据,则利用当前二进制数据减去上一二进制数据,以及利用公式math.ceil(math.log(newbuttons,2))+1将差值对2进行自然对数运算后取整加1,得到最后被按下的目标物理按钮的ID值并输出,并且记录当前二进制数据,以用于下一次计算;其中,newbuttons表示当前二进制数据与上一二进制数据的差值。若果当前二进制数据等于上一二进制数据,说明没有物理按钮被按下,目标物理按钮的ID值不变,无需记录新的二进制数据,可返回没有操作的标识信息,例如返回0。若当前二进制数据小于上一二进制数据,说明有物理按钮松开,无需计算目标物理按钮的ID值,直接记录当前二进制数据,以用于下一次计算。在上述计算ID值的过程中,只有当有新的目标物理按钮被按下后才输出对应的ID值,对于其他情况的输出不做限制,可以不做输出,也可以输出一标识信息,例如输出0,表示没有目标按钮被按下。在本实施例中,高低值接口230用于在被调用时返回指定物理按钮是否被持续按住的状态值,以供编程人员根据指定物理按钮对游戏角色进行持续控制。在本申请实施例中,编程者对于可编程硬件设备上的物理按钮可以赋予不同的功能,玩家在玩游戏时可以操作指定的物理按钮完成指定的功能,这些指定的物理按钮可以是一个或多个。例如,玩家可以选择某个物理按钮控制游戏角色实现跳跃的功能;或者,选择某个物理按钮控制游戏角色实现前进的功能;或者,同时选择上述2个物理按钮控制游戏角色实现跳跃的同时前进的功能等。图2d为高低值接口230的逻辑示意图,具体地,高低值接口230通过调用位接口210获取当前二进制数据,以及获取指定物理按钮的位置编号,根据当前二进制数据和指定物理按钮的位置编号可以判断调用按钮驱动程序200的上层应用指定的物理按钮的位置编号是否在列表中。如果不在,输出无效操作的信息,例如输出0;如果在,则根据指定物理按钮的位置编号对当前二进制数据进行位运算,以得到指定物理按钮是否被持续按住的状态值并输出;如果是任意物理按钮位置编号,则返回任意物理按钮被按住的状态信息,例如返回1。
在本实施例中,并不限定对当前二进制数据进行位运算的方式,上述仅为示例性说明,根据可编程硬件设备物理按钮位置编号和状态值设置方式的不同,位运算的方式也可以不同。下面以可编程硬件设备有16个物理按钮,对应的位置编号为0-15,注册的目标物理按钮对应的状态值为1,对应的位置标号为1-4,状态值从右到左升序排列为例,对高低值接口230的逻辑进行说明。若高低值接口230调用位接口210得到的二进制数据为00000000100000000,以及获取到调用按钮驱动程序200的上层应用指定的物理按钮的位置编号为8,则可以判断出指定的物理按钮不在列表中,则输出0,即目标物理按钮没被按住,操作无效。若高低值接口230调用位接口210得到的二进制数据为00000000000001000,以及获取到调用按钮驱动程序200的上层应用指定的物理按钮的位置编号为3,则可以判断出指定的物理按钮在列表中,则将当前二进制数据向右移3位后与检测值1进行与运算,得到对应的状态值为1,即位置编号为3的目标物理按钮被按住了。若高低值接口230调用位接口210没有获得到二进制数据或者获取到其他数据,则当前按住的物理按钮为其他任意物理按钮,例如开机按钮等;则为例标识有任意物理按钮被按住可返回一标识信息,例如返回1。
在本实施例中,下降沿接口240用于在被调用时返回指定物理按钮是否被按下的状态值,以供编程人员根据指定物理按钮对游戏角色进行单次控制。例如,玩家通过指定物理按钮控制游戏角色跳一下或者前进一步等;其中,指定物理按钮属于目标物理按钮。图2e为下降沿接口240的逻辑示意图,如图2e所示,下降沿接口240用于获取调用按钮驱动程序200的上层应用指定的物理按钮的位置编号,以及通过调用位接口210获取当前二进制数据;并将当前二进制数据与上一二进制数据进行比较。如果当前二进制数据小于上一二进制数据,则存储当前二进制数据,以用于下一次计算。如果当前二进制数据大于上一二进制数据,则根据上述位接口210、ID接口220和高低值接口230可以获取被按下物理按钮的位值、任意物理按钮是否被按下和是否有物理按钮被按下等状态。如图2e所示,当判断有物理按钮被按下时,若根据当前被按下的物理按钮的位置编号判断其对应二进制数据的状态值为0,说明新被按下的物理按钮松开了,则返回状态值0并存储有物理按钮被按下的状态,以用于下一次计算。若根据当前被按下的物理按钮的位置编号判断其对应的二进制数据在位接口210设定的二进制数据范围内,则利用当前二进制数据减去上一二进制数据,以及利用公式math.ceil(math.log(newbuttons,2))+1将差值对2进行自然对数运算后取整加1,得到最后被按下的目标物理按钮的ID值;其中,ceil()函数返回数字的上入整数,log()返回数字的自然对数,newbuttons表示当前二进制数据与上一二进制数据的差值。进一步,根据最后被按下的目标物理按钮的ID值和调用按钮驱动程序200的上层应用指定的物理按钮的ID值计算最后被按下物理按钮的状态值;若最后被按下的目标物理按钮的ID值和指定的物理按钮的ID值相等,说明指定的物理按钮被按下,则输出指定物理按钮被按下的状态值,例如输出1;若最后被按下的目标物理按钮的ID值和指定的物理按钮的ID值不相等,说明指定的物理按钮没被按下,输出指定按钮没被按下的状态值,例如输出0。当判断有任意物理按钮被按下时,例如开机按钮被按下,则存储有任意物理按钮被按下的状态,以用于下一次计算。
需要说明的是,上述示例也与设定的各物理按钮的初始值和被按下时的取值等有关系,在上述示例中各物理按钮的初始值默认为0,被按下时对应的取值为1,未被按下或被松开时对应的取值为0;基于此,关于位接口、ID接口、高低值接口以及下降沿接口相关的运算方式仅为示例,根据位运算、与或运算等逻辑,本领域技术人员很容易想到其他运算方式,例如通过将初始值和被按下时的取值进行调换,从而得到和上述示例相关的运算方式。
根据上述实施例可知,本申请实施例通过对MicroPython的I/O驱动接口进行封装,得到具有位接口、ID接口、高低值接口以及下降沿接口等功能的按钮驱动程序,该按钮驱动程序可以为编程者提供更多的底层硬件控制功能,通过获取物理按钮的位值、ID值、高低值以及下降沿等信息判断物理按钮被按住的状态,进而实现对游戏角色的操作,丰富了可编程硬件设备的游戏功能和趣味性,提升了用户体验。下面结合具体的场景实施例,对按钮驱动程序的功能进行实例性说明。
场景实施例3:
以编程者使用IDE编程工具进行游戏编程实现位接口为例,在实现位接口时,首先通过执行代码:import joypad;调用操作物理按钮的API,再从物理按钮中选择目标物理按钮进行注册,例如选择4个物理按钮作为目标物理按钮,得应的名称分别位A1、B1、B0和B2,则通过执行代码:btn=joypad.Buttons(‘A1’,‘B1’,‘B0’,‘B2’);为目标按钮进行注册。当判断物理按钮被按下时,即条件:while true;则执行代码:print(bin(btn.getPressed()));打印物理按钮对应的二进制数据。例如,假设物理按钮有16个,上述目标物理按钮A1、B1、B0和B2分别对应二进制数据中的低1、8、9、10位,则打印出来的二进制数据为0000011100000010。
进一步地,在位接口注册完目标物理按钮后,在实现ID接口时可直接调用位接口获取当前被按下的物理按钮对应的二进制数据,进而,可通过执行代码:print(btn.getPressedID());打印被按下的物理按钮对应的ID值。例如,上述16个按钮分别为A0-A7和B0-B7,分别对应位接口中二进制数据中的0-15位,假设按钮B2被按下,则打印出10,若目标按钮没有被按下时,则打印出0。当实现高低值接口判断目标物理按钮是否被按住时,同样先通过调用位接口获取被按下的目标物理按钮对应的位值,基于获取到的位置判断当前目标物理按钮是否被按下;进而,可通过执行代码:if btn.isPressing(joypad.K_A1):print(‘up’);elif btn.isPressing(joypad.K_B1):print(‘down’);elifbtn.isPressing(joypad.K_B0):print(‘left’);elif btn.isPressing(joypad.K_B2):print(‘right’);else:print(‘===’);查看目标物理按钮A1、B1、B0和B2被按下的结果,判断是否有目标物理按钮被按住。若目标物理按钮A1、B1、B0和B2被按下了,则会分别打印出:up、down、left和right;若没有目标物理按钮被按下,则打印出:===。根据每种结果打印的次数可以判断目标物理按钮是否被按住以及按住的时长,例如,设置30毫秒打印一次信息,则连续打印出两个相同的信息说明当前目标物理按钮被按住60毫秒。例如,打印出的结果为:===right right===则可以判断出按钮B2被按住了60毫秒。
进一步地,在实现下降沿接口时,通过调用位接口获取到被按下的目标物理按钮对应的位值后,同样可执行与上述高低值接口同样的代码,判断哪些物理按钮被按下了,具体参见上述示例,不在赘述。
图3a为本申请实施例中基于MicroPython的PWM驱动接口实现的音频驱动程序的逻辑示意图,如图3a所示,在本实施例中,基于MicroPython的PWM驱动接口实现音频驱动接口300,在音频驱动程序300包括:生成至少一个播放控制接口,以用于提供音频播放数据;进而,通过调用音频驱动接口中的PWM驱动接口可以控制音频电路播放音频播放数据。在生成至少一个播放控制接口之前,需编程人员调用MicroPython的I/O驱动接口注册MicroPython的PWM驱动接口,为音频电路进行初始化,以便于编程者可以使用音频驱动程序300中的播放控制接口对音频进行处理和控制,进而通过MicroPython的PWM驱动接口对处理后的音频进行播放。其中,初始化的内容包括:注册音频使能I/O引脚,并利用MicroPython的I/O驱动接口初始化音频使能I/O引脚,例如,设置音频使能I/O引脚的模式为输出,有效电平为低电平;还需要注册音频播放I/O引脚,并利用MicroPython的PWM驱动接口初始化音频播放I/O引脚,例如,设置为音频播放I/O引脚产生PWM波形的定时器的频率和占空比,并启动与PWM驱动接口对应的PWM定时器通道。
在本实施例中,不限定播放控制接口的个数,可以时一个或多个,根据不同的可编程硬件设备,播放控制接口的个数可以不同;进一步,也不限定播放控制接口的功能,图3a中仅是以声调接口、声音接口、旋律接口和音量接口为例进行示例性说明,在实际应用中,若可编程硬件设备的功能更加丰富,对音频播放的需求更具体,则还可以包括具有其他功能的播放控制接口。在本实施例中,也不限定对PWM接口初始化的内容,根据播放控制接口功能的不同,需要注册的内容有可能不同。以本实施例中,初始化主要是指设置音频电路对应的使能引脚的输入状态和播放引脚的功能。例如,可以设置使能引脚对应的输入为低电平,当然也可以使能引脚的输入为高电平,在此不做限定。进一步,启动播放引脚的定时器并为其设置初始值,例如,设置定时器的频率为30000HZ;以及启动PWM定时器通道和设置PWM的占空比,例如,设置PWM的占空比为50%等。在本实施例中,并不限定使能引脚和播放引脚的初始值,根据不同的需求上述初始值也可以不同。在PWM驱动接口注册后,即可实现音频控制接口,进而通过PWM驱动接口对处理后的音频进行播放控制。下面以声调接口310、声音接口320、旋律接口330和音量接口340为例,对音频驱动程序300的实现进行具体说明。
在本实施例中,音调接口包括播放和关闭功能,并且支持可变数量的输入参数。在输入参数为1个时,用于获取编程人员提供的目标频率,用于设置为音频播放I/O引脚产生PWM波形的定时器的频率实现发音。例如,编程者提供了一段高音频率,则音调接口在获取到该高音频率后,可直接将该频率设置为音频播放I/O引脚产生PWM波形的定时器的频率,当通过PWM驱动接口播放音频时,即播放该高音频率对应的音频。进一步,在输入参数为2个时,获取编程人员提供的音调和时长,音调在播放该时长之后可自动停止,通过时长的限制可以实现定时播放功能。在本实施例中,并不限定编程者提供的音调频率的形式,可以是低音频率、中音频率也可以是高音频率,对于每个音区包含音的个数也不做限定,例如,包含低音频率、中音频率和高音频率供21个音。对于输入一个参数的情况,播放音频的时长不做限制,例如,在没有人为主动停止的情况下可以一直播放。
在本实施例中,声音接口用于内置多段旋律,用以调整定时器的频率实现多段旋律的播放。对于内置的旋律数量不做限定,可以内置几段旋律,例如5段;也可以内置一个旋律列表,包含很多旋律。当玩家想要在可编程硬件设备上播放一段旋律时,可以执行对应的操作,例如,按下播放音频的物理按钮,当播放音频的物理按钮被按下后,可直接调用声音接口,读取内置的旋律进行播放。在本实施例中,对于旋律的播放方式不做限定,例如,可以随机播放,也可以顺序播放,或者循环播放等。当玩家想要停止播放音频时,可以再次停止播放音频的按钮或者再次按下播放音频的按钮,具体方式可根据可编程硬件设备而定。进一步,也不限定内置旋律的内容,可以是简单的经典旋律,例如,生日快乐歌旋律、圣诞节歌旋律,也可以是交响乐、民乐、流行音乐等。
在本实施例中,旋律接口用于获取编程人员自定义的旋律,用以调整定时器的频率实现旋律的播放;其中,编程人员也可以是玩家。与音乐接口不同的是,编程人员可以通过调用音频驱动程序的上层应用所包含的功能,自定义设置音调和节拍,当旋律接口获取到编程人员自定义的音调和节拍后,可基于该音调和节拍更改PWM波形定时器的频率,以实现在通过PWM驱动接口播放音频是,播放编程者自定义的音频,丰富可编程硬件设备的趣味性。例如,可编程硬件设备内置的音频为几段简单的音乐,播放出来比较单调,无法引起孩子的兴趣,则编程人员可以自定以一段欢快的旋律,以用于在播放时更吸引孩子。
在本实施例中,音量接口用于获取音量信息,用以调整定时器的占空比实现按照音量信息的播放。根据编程人员提供的音量参数可用于更改PWM的占空比,PWM的占空比越大,则通过PWM驱动接口播放出来的音频音量越高,反之,PWM的占空比越小,则通过PWM驱动接口播放出来的音频音量调越低,因此,可通过改变PWM的占空比来改变播放的音频音量。在本实施例中,并不限定输入的音量参数大小和可调节的音频音量范围,可以根据不同的可编程硬件设备具体设置。例如,输入的音量参数范围为1-100,对应PWM占空比1%-100%,进而对应播放音频音量的区间值为1-100;或者,输入的音量参数范围为1-200,对应PWM占空比1%-100%,进而对应播放音频音量的区间值为1-100。
图3b为音频驱动程序通过声调接口、声音接口、旋律接口和音量接口实现对音频进行处理和控制的逻辑示意图。如图3b所示,通过MicroPython的PWM驱动接口对使能引脚进行初始化,设置为低电平输出模式;通过MicroPython的I/O驱动接口对播放引脚进行初始化,启动并设置定时器的频率,以及启动PWM定时器通道,设置PWM的占空比。进一步,可通过音量接口改变PWM的占空比来改变音调、通过音调接口根据输入的参数改变定时器的频率和播放时长,以及通过声音接口内置的旋律、通过旋律接口自定义的音调和节拍改变定时器的频率,得到不同的音频数据,进一步可通过MicroPython的PWM驱动接口播放处理后的音频数据。下面结合场景实施例对音频驱动程序的处理逻辑进行说明。
场景实施例4:
以编程者使用IDE编程工具进行游戏编程实现音频驱动程序,通过音频控制接口对音频进行处理为例。在处理音频之前,首先可以通过执行代码:from audiotone import;导入音频处理API,进一步,可以通过执行代码:speaker=tone(volume=100);来注册音频驱动程序,并设置音频的音量为100。准备工作做好之后,即可通过执行代码:speaker.tone(M_C);和speaker.noTone();来调用音调接口,控制音频的播放和停止。进一步,可以通过执行代码:speaker.playSong(BaDing);来调用声音接口播放内置的旋律,其中,BaDing为内置旋律中的一种。进一步地,还可以自定义一段旋律用于播放,例如,调用旋律接口并执行代码:HappyBirthDay=[M_G,0.5,M_G,0.5,M_A,1,M_G,1,H_C,1,M_B,2,M_G,0.5,M_G,0.5,M_A,1,M_G,1,H_D,1,H_C,2];自定义一段生日快乐歌的旋律;进一步,通过后执行代码:speaker.playSong(HappyBirthDay,pause=1);设置两个旋律播放过程中的暂停时间,例如暂停时间为1毫秒。进而,可以将上述处理好的音频数据通过MicroPython的PWM驱动接口进行播放,实现对音频控制的整个过程。
图4a为本申请实施例中基于MicroPython的SPI驱动接口实现的彩灯驱动程序的逻辑示意图,如图4a所示,在本实施例中,在基于MicroPython的SPI驱动接口实现彩灯驱动程序400时,首先需要注册彩灯对应的MicroPython的SPI驱动接口,初始化彩灯的id和属性数据作为缓存数据;其中,SPI驱动接口支持可变数量的输入参数,可用于对单个彩灯或者多个彩灯的显示控制。通过输入的参数对彩灯的更新彩灯的缓存数据,进而通过MicroPython的SPI接口根据更新后的缓存数据控制彩灯显示。在本实施例中,不限定彩灯属性数据的内容,例如可以时亮度值、颜色值以及显示时长或频率等属性数据,还可以时彩灯链接的引脚对应的波特率。由于MicroPython的SPI驱动接口可用于驱动与彩灯链接的SPI引脚控制对应的彩灯进行显示,因此,需要初始化彩灯的id和属性数据,用以控制指定id对应彩灯的属性。例如,彩灯链接在引脚SPI1上,则需要注册SPI1接口,并设置对应的波特率为3200000,同时设定控制彩灯需要的数据缓存,例如缓存数据为:彩灯id为2,颜色值为0xff0000红色。
图4b为彩灯驱动程序的逻辑示意图,如图4b所示,彩灯驱动程序400还包括:设置单个彩灯接口410、设置多个彩灯接口420和设置彩灯显示接口430,用于对单个或多个彩灯设置颜色、亮度、显示时长、频率,以及控制MicroPython的SPI驱动接口显示设置的彩灯属性。在本实施例中,由于MicroPython的SPI驱动接口支持可变参数输入,因此,如图4b所示,在上层应用调用MicroPython的SPI驱动接口时,需要判断输入参数的个数是否符合预先设置的数量要求,即输入的参数个数是否在设定的个数范围内,并判断输入的彩灯id是否属于已注册的彩灯id;若判断结果均为是,则根据输入的彩灯id和属性数据更新缓存数据,基于更新后的缓存数据,通过设置彩灯显示接口430调用MicroPython的SPI驱动接口对彩灯进行显示控制。在本实施例中,并不限定输入参数的数量和内容,根据不同的需求可以灵活设置。例如,可设定输出两个参数,第一个参数为彩灯的注册id,第二个参数为彩灯的颜色,以此来控制指定彩灯的颜色;例如,控制id为2的彩灯的颜色值为0xff0000红色。或者设定四个参数,第一个参数为彩灯的注册id,第二个参数为彩灯的颜色,第三个参数为彩灯显示的时长,第四个参数为彩灯显示的频率,以此来控制彩灯闪烁的功能;例如,设置id为4的彩灯没2毫秒显示一次绿色。或者,还可以设置多个参数,第一个为彩灯注册的id,中间为多个参数为颜色值,倒数第二个参数为彩灯显示的时长,最后一个为彩灯显示的频率,以此来控制一个彩灯闪烁不同颜色的功能;例如,设置id为6的彩灯按照红、蓝、黄、绿的顺序每个5毫秒显示一次;或者,也可以同时对多个彩灯进行控制,例如,前两位分别代表不同的彩灯id,后两位代表颜色,第三个参数的颜色对应第一个参数id,第四个参数对应第二个参数id;具体可灵活设置。另外,对于输入参数的顺序所表示的含义也不做限定了,例如,彩灯id可做位第一个参数也可以作为最后一个参数。进一步,如图4b所示,在得到正确的输入参数后,可根据输入的参数更新彩灯缓存数据,进而通过设置彩灯显示接口430调用MicroPython的SPI驱动接口,控制对应的彩灯显示设置的颜色。下面结合场景实施例对彩灯驱动程序的处理逻辑进行说明。
场景实施例5:
以编程者使用IDE编程工具进行游戏编程实现彩灯驱动程序为例,在实现彩灯驱动程序之前,可以通过执行代码:import colorled;调用控制彩灯的API,进一步,通过执行代码:led=colorled.strip();为彩灯驱动程序引脚接口。准备工作做好之后,即可为彩灯设置缓存数据,例如,通过执行代码:led.setOneLED(0,0x1F0000);将第一个彩灯设置为红色;通过执行代码:led.setOneLED(1,20,0,0);将第二个彩灯颜色值为红色的缓存数据;通过执行代码:led.setAllLED(0x1F0000);将所有彩灯设置为红色;以及通过执行代码:led.setAllLED(0,15,15);将所有彩灯设置为青色的缓存数据。进一步,可以通过设置彩灯显示接口调用MicroPython的SPI驱动接口执行代码:led.show();显示彩灯颜色;若将所有彩灯颜色值设置为0,则为关闭彩灯。
在本申请实施例中,通过对MicroPython的底层驱动接口进行封装,增加了LCD显示驱动程序、按钮控制驱动程序、音频驱动程序以及彩灯驱动程序,可以丰富底层驱动接口的功能,使得上层应用在调底层接口对底层硬件进行控制时,对可编程硬件设备的游戏实现更具体、灵活和丰富的操作,提升游戏的趣味性和用户体验。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤S1a至步骤S4a的执行主体可以为设备A;又比如,步骤S1a和S2a的执行主体可以为设备A,步骤S3a和S4a的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如S1a、S2a等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图5为本申请实施例提供的一种可编程硬件设备的结构示意图。在本申请实施例中,并不限定可编程硬件设备的实现形态,例如,可以是可编程机器人、可编程小车、可编程计算器或者其他可编程硬件设备。
如图5所示,本申请实施例的可编程硬件设备包括:处理器10、存储有计算机程序的存储器20以及LCD显示器30。
存储器20,主要用于存储计算机程序,这些计算机程序可被处理器10执行,致使处理器10控制可编程硬件设备500实现相应功能、完成相应动作或任务。除了存储计算机程序之外,存储器20还可被配置为存储其它各种数据以支持在可编程硬件设备500上的操作。这些数据的示例包括用于在可编程硬件设备500上操作的任何应用程序或方法的指令。
存储器20,可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
在本申请实施例中,并不限定处理器10的实现形态,例如可以是但不限于CPU、GPU或MCU等。处理器10,可以看作是可编程硬件设备500的控制系统,可用于执行存储器20中存储的计算机程序,以控制可编程硬件设备500实现相应功能、完成相应动作或任务。值得说明的是,根据可编程硬件设备500实现形态以及所处于场景的不同,其所需实现的功能、完成的动作或任务会有所不同;相应地,存储器20中存储的计算机程序也会有所不同,而处理器10执行不同计算机程序可控制可编程硬件设备500实现不同的功能、完成不同的动作或任务。
在本申请实施例中,当处理器10执行存储器20中的计算机程序时,以用于:响应编程人员的第一编程指令,调用基于MicroPython的SPI驱动接口实现的显示驱动程序,以供编程人员利用显示驱动程序在可编程硬件设备500上的LCD显示器30上至少进行游戏背景和游戏角色的显示控制。
在一些可选实施例中,如图5所示,可编程硬件设备500还可包括:物理按钮40、音频电路50和彩灯60中的至少一种硬件模块,以及驱动组件70、电源组件80和通信组件90等其它组件。图5中仅示意性给出部分组件,并不意味着可编程硬件设备500只包括图5所示组件,针对不同的应用需求,可编程硬件设备500可包含不同的组件。其中,驱动组件70可以包括驱动轮、驱动电机、万向轮等。在图5中,可以理解为虚线框内的组件为可选组件,而非必选组件,具体可视可编程硬件设备500的产品形态而定,在此不做过多说明。
在一可选实施例中,当处理器10执行存储器20中的计算机程序时,还用于执行以下至少一种操作:响应编程人员的第二编程指令,调用基于MicroPython的I/O驱动接口实现的按钮驱动程序,以供编程人员利用按钮驱动程序在可编程硬件设备500上自定义使用的物理按钮40并通过物理按钮实现对游戏角色的控制;和/或
响应编程人员的第三编程指令,调用基于MicroPython的PWM驱动接口实现的音频驱动程序,以供编程人员利用音频驱动程序对可编程硬件设备500上的音频电路50进行播放控制;和/或
响应编程人员的第四编程指令,调用基于MicroPython的SPI驱动接口实现的彩灯驱动程序,以供编程人员利用彩灯驱动程序对可编程硬件设备500上的彩灯60进行显示控制。
其中,第一编程指令、第二编程指令、第三编程指令和第四编程指令是分别控制LCD显示器30实现显示功能、控制和响应物理按钮40的操作、控制音频电路50播放音频以及控制彩灯60显示的指令,也是上述实施例中提到的上层应用调用底层驱动执行的指令。
在一可选实施例中,处理器10在响应编程人员的第一编程指令,调用基于MicroPython的SPI接口实现的显示驱动程序时,用于:调用游戏图层,通过背景图层基于游戏图形数据设定游戏背景,通过角色图层基于游戏图形数据构建游戏角色;调用屏幕显示层,以用于对背景图层和角色图层进行显示计算以得到图层像素。
在一可选实施例中,处理器10在响应编程人员的第一编程指令,调用基于MicroPython的SPI接口实现的显示驱动程序时,还用于:调用基于游戏图形数据构建游戏文本的文本图层;以用于在调用屏幕显示层时将游戏文本转换为文本像素;进一步,在调用硬件底层驱动时将文本像素输出至LCD显示器30上。其中,文本图层是基于游戏图形数据设置文本内容及其位置所构建出的游戏文本。
在一可选实施例中,处理器10在基于MicroPython的SPI驱动接口,实现显示驱动程序中用于驱动可编程硬件设备500上的LCD显示器30的硬件底层驱动时,用于:对MicroPython的SPI驱动接口进行封装,得到用于驱动LCD显示器30的硬件底层驱动中的多个显示控制接口;多个显示控制接口用于适配LCD显示器30的屏幕,并根据屏幕显示层的调用,将图层像素和文本像素输出至LCD显示器30上。其中,多个显示控制接口包括LCD显示器30对应的SPI引脚接口、屏幕大小接口、位置校准接口、图形旋转接口和屏幕亮度接口等多个显示控制接口。
在一可选实施例中,处理器10在调用屏幕显示层时,具体用于:在可编程硬件设备500开机启动时对背景图层更新一次,并在游戏过程中按照设定的更新频率对角色图层进行周期性更新;根据周期性更新后的角色图像与开机启动时更新后的背景图层进行显示计算,以得到游戏中动态变化的图层像素。
在一可选实施例中,处理器10在调用屏幕显示层时,还用于:监控不同游戏角色在移动过程中的坐标位置,通过不同游戏角色之间的坐标位置关系对不同游戏角色进行碰撞控制。
在一可选实施例中,处理器10在响应编程人员的第二编程指令,调用基于MicroPython的I/O驱动接口实现的按钮驱动程序时,用于:调用注册编程人员自定义使用的目标物理按钮对应的MicroPython的I/O驱动接口,以初始化目标物理按钮,以及将目标物理按钮的位置编号存放在列表中;调用针对目标物理按钮实现的多个按钮控制接口,以供编程人员通过多个按钮控制接口获取到的目标物理按钮的状态信息实现对游戏角色的控制。
在一可选实施例中,处理器10在调用多个按钮控制接口时,具体用于:调用位接口,以返回一个二进制数据,二进制数据中每位的值表示一个物理按钮40是否被按下,二进制数据的位数大于或等于可编程硬件设备500上物理按钮40的数量;调用ID接口,以返回十进制的数字,数字表示最后被按下的目标物理按钮的ID值,ID值表示目标物理按钮的位置编号;调用高低值接口,以返回指定物理按钮是否被持续按住的状态值,以供编程人员根据指定物理按钮对游戏角色进行持续控制;调用下降沿接口,以返回指定物理按钮是否被按下的状态值,以供编程人员根据指定物理按钮对游戏角色进行单次控制;其中,指定物理按钮属于目标物理按钮。
在一可选实施例中,处理器10在调用位接口时,具体用于:从MicroPython的I/O驱动接口获取目标物理按钮的状态值;若目标物理按钮的状态值为1,则将1向左移动目标物理按钮的位置编号位后与上一二进制数据按位进行或运算,以得到当前二进制数据;若目标物理按钮的状态值为0,则将1向左移动目标物理按钮的位置编号后取反与上一二进制数据结果按位进行与运算,以得到当前二进制数据。
在一可选实施例中,处理器10在调用ID接口时,具体用于:调用位接口获取当前二进制数据;将当前二进制数据与上一二进制数据进行比较;如果当前二进制数据大于上一二进制数据,则利用当前二进制数据减去上一二进制数据,将差值对2进行自然对数运算后取整加1,得到最后被按下的目标物理按钮的ID值并输出。
在一可选实施例中,处理器10在调用高低值接口时,具体用于:调用位接口获取当前二进制数据;判断调用按钮驱动程序的上层应用指定的物理按钮的位置编号是否在列表中;如果不在,输出0;如果在,则根据指定物理按钮的位置编号对当前二进制数据进行向右的位运算,以得到指定物理按钮是否被持续按住的状态值并输出。
在一可选实施例中,处理器10在调用下降沿接口时,具体用于:调用位接口获取当前二进制数据;将当前二进制数据与上一二进制数据进行比较;如果当前二进制数据大于上一二进制数据,则利用当前二进制数据减去上一二进制数据,将差值对2进行自然对数运算后取整加1,得到最后被按下的目标物理按钮的ID值;根据最后被按下的目标物理按钮的ID值和调用按钮驱动程序的上层应用指定的物理按钮的ID值,输出指定物理按钮是否被按下的状态值。
在一可选实施例中,处理器10在响应编程人员的第三编程指令,调用基于MicroPython的PWM驱动接口实现的音频驱动程序时,用于:调用至少一个播放控制接口,至少一个控制接口用于提供音频播放数据;调用音频驱动接口中的PWM驱动接口,以控制音频电路50播放音频播放数据。
在一可选实施例中,处理器10在响应编程人员的第三编程指令,调用基于MicroPython的PWM驱动接口实现的音频驱动程序时,具体用于:注册音频使能I/O引脚,并利用MicroPython的I/O驱动接口初始化音频使能I/O引脚:设置音频使能I/O引脚的模式为输出,有效电平为低电平;注册音频播放I/O引脚,并利用MicroPython的PWM驱动接口初始化音频播放I/O引脚:设置为音频播放I/O引脚产生PWM波形的定时器的频率和占空比,并启动与PWM驱动接口对应的PWM定时器通道。
在一可选实施例中,处理器10在调用至少一个播放控制接口时,用于:调用支持可变数量的输入参数的音调接口,在输入参数为1个时,获取编程人员提供的目标频率,用于设置为音频播放I/O引脚产生PWM波形的定时器的频率实现发音;在输入参数为2个时,获取编程人员提供的音调和时长,音调在播放时长之后自动停止;调用内置多段旋律的声音接口,用以调整定时器的频率实现多段旋律的播放;调用旋律接口,用于获取编程人员自定义的旋律,用以调整定时器的频率实现旋律的播放;调用音量接口,用于获取音量信息,用以调整定时器的占空比实现按照音量信息的播放。
在一可选实施例中,处理器10在响应编程人员的第四编程指令,调用基于MicroPython的SPI驱动接口实现的彩灯驱动程序时,用于:调用注册彩灯60对应的MicroPython的SPI驱动接口,初始化彩灯60的id和属性数据作为缓存数据;SPI驱动接口支持可变数量的输入参数;判断输入参数的数量是否符合预先设置的数量要求,并判断输入的彩灯id是否属于已注册的彩灯id;若判断结果均为是,则根据输入的彩灯id和属性数据更新缓存数据,根据更新后的缓存数据调用MicroPython的SPI驱动接口对彩灯60进行显示控制。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器至少实现以下动作:
响应编程人员的第一编程指令,调用基于MicroPython的SPI驱动接口实现的显示驱动程序,以供编程人员利用显示驱动程序在可编程硬件设备上的LCD显示器上至少进行游戏背景和游戏角色的显示控制。
上述图5中的通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
上述图5中的显示器包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
上述图5中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述图5中的音频电路,可被配置为输出和/或输入音频信号。例如,音频电路包括一个麦克风(MIC),当音频电路所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (22)

1.一种基于MicroPython的硬件驱动方法,其特征在于,所述方法包括:
基于游戏逻辑,利用不同类型的游戏数据构建显示驱动程序中的多个数据图层;
基于MicroPython的SPI驱动接口,实现所述显示驱动程序中用于驱动可编程硬件设备上的LCD显示器的硬件底层驱动;
所述硬件底层驱动还用于将所述多个数据图层中的游戏数据输出至所述LCD显示器上,以供编程人员利用所述显示驱动程序在所述LCD显示器上对游戏进行显示控制。
2.根据权利要求1所述的方法,其特征在于,基于游戏逻辑,利用不同类型的游戏数据构建显示驱动程序中的多个数据图层,包括:
生成游戏图层,所述游戏图层至少包括:用于存储游戏图形数据的图形数据空间,用于基于游戏图形数据设定游戏背景的背景图层和用于基于游戏图形数据构建游戏角色的角色图层;
生成屏幕显示层,所述屏幕显示层用于对所述背景图层和所述角色图层进行显示计算以得到图层像素。
3.根据权利要求2所述的方法,其特征在于,所述游戏图层还包括:用于基于游戏图形数据构建游戏文本的文本图层;所述屏幕显示层还用于在被调用时将所述游戏文本转换为文本像素;所述硬件底层驱动还用于在被调用时将所述文本像素输出至所述LCD显示器上。
4.根据权利要求3所述的方法,其特征在于,所述文本图层具体用于:基于游戏图形数据设置文本内容及其位置,以构建出游戏文本。
5.根据权利要求1所述的方法,其特征在于,基于MicroPython的SPI驱动接口,实现所述显示驱动程序中用于驱动可编程硬件设备上的LCD显示器的硬件底层驱动,包括:
对MicroPython的SPI驱动接口进行封装,得到用于驱动LCD显示器的硬件底层驱动中的多个显示控制接口;
所述多个显示控制接口用于适配所述LCD显示器的屏幕,并根据所述屏幕显示层的调用,将所述图层像素和所述文本像素输出至所述LCD显示器上。
6.根据权利要求5所述的方法,其特征在于,所述多个显示控制接口包括:LCD显示器对应的SPI引脚接口、屏幕大小接口、位置校准接口、图形旋转接口和屏幕亮度接口。
7.根据权利要求2所述的方法,其特征在于,所述屏幕显示层具体用于:在可编程硬件设备开机启动时对所述背景图层更新一次,并在游戏过程中按照设定的更新频率对所述角色图层进行周期性更新;根据周期性更新后的角色图像与开机启动时更新后的背景图层进行显示计算,以得到游戏中动态变化的图层像素。
8.根据权利要求7所述的方法,其特征在于,所述屏幕显示层还用于:监控不同游戏角色在移动过程中的坐标位置,通过不同游戏角色之间的坐标位置关系对不同游戏角色进行碰撞控制。
9.根据权利要求1-8任一项所述的方法,其特征在于,还包括以下至少一种操作:
基于MicroPython的I/O驱动接口实现按钮驱动程序,以供编程人员利用所述按钮驱动程序在可编程硬件设备上自定义使用的物理按钮并通过所述物理按钮实现对游戏角色的控制;
和/或
基于MicroPython的PWM驱动接口实现音频驱动程序,以供编程人员利用所述音频驱动程序对可编程硬件设备上的音频电路进行播放控制;
和/或
基于MicroPython的SPI驱动接口实现彩灯驱动程序,以供编程人员利用所述彩灯驱动程序对可编程硬件设备上的LED彩灯进行显示控制。
10.根据权利要求9所述的方法,其特征在于,基于MicroPython的I/O驱动接口实现按钮驱动程序,包括:
注册编程人员自定义使用的目标物理按钮对应的MicroPython的I/O驱动接口,初始化所述目标物理按钮,并将所述目标物理按钮的位置编号存放在列表中;
针对所述目标物理按钮实现多个按钮控制接口,以供所述编程人员通过所述多个按钮控制接口获取到的所述目标物理按钮的状态信息实现对游戏角色的控制。
11.根据权利要求10所述的方法,其特征在于,所述多个按钮控制接口至少包括:
位接口,用于在被调用时返回一个二进制数据,所述二进制数据中每位的值表示一个物理按钮是否被按下,所述二进制数据的位数大于或等于可编程硬件设备上物理按钮的数量;
ID接口,用于在被调用时返回十进制的数字,所述数字表示最后被按下的目标物理按钮的ID值,所述ID值表示目标物理按钮的位置编号;
高低值接口,用于在被调用时返回指定物理按钮是否被持续按住的状态值,以供编程人员根据指定物理按钮对游戏角色进行持续控制;
下降沿接口,用于在被调用时返回指定物理按钮是否被按下的状态值,以供编程人员根据指定物理按钮对游戏角色进行单次控制;其中,指定物理按钮属于目标物理按钮。
12.根据权利要求11所述的方法,其特征在于,所述位接口具体用于:
从所述MicroPython的I/O驱动接口获取目标物理按钮的状态值;
若所述目标物理按钮的状态值为1,则将1向左移动所述目标物理按钮的位置编号位后与上一二进制数据按位进行或运算,以得到当前二进制数据;
若所述目标物理按钮的状态值为0,则将1向左移动所述目标物理按钮的位置编号后取反与上一二进制数据结果按位进行与运算,以得到当前二进制数据。
13.根据权利要求12所述的方法,其特征在于,所述ID接口具体用于:
调用所述位接口获取当前二进制数据;将当前二进制数据与上一二进制数据进行比较;如果当前二进制数据大于上一二进制数据,则利用当前二进制数据减去上一二进制数据,将差值对2进行自然对数运算后取整加1,得到最后被按下的目标物理按钮的ID值并输出。
14.根据权利要求12所述的方法,其特征在于,所述高低值接口具体用于:
调用所述位接口获取当前二进制数据;判断调用所述按钮驱动程序的上层应用指定的物理按钮的位置编号是否在所述列表中;如果不在,输出0;如果在,则根据指定物理按钮的位置编号对当前二进制数据进行向右的位运算,以得到指定物理按钮是否被持续按住的状态值并输出。
15.根据权利要求12所述的方法,其特征在于,所述下降沿接口具体用于:
调用所述位接口获取当前二进制数据;将当前二进制数据与上一二进制数据进行比较;如果当前二进制数据大于上一二进制数据,则利用当前二进制数据减去上一二进制数据,将差值对2进行自然对数运算后取整加1,得到最后被按下的目标物理按钮的ID值;根据最后被按下的目标物理按钮的ID值和调用所述按钮驱动程序的上层应用指定的物理按钮的ID值,输出指定物理按钮是否被按下的状态值。
16.根据权利要求9所述的方法,其特征在于,基于MicroPython的PWM驱动接口实现音频驱动程序,包括:
基于MicroPython的PWM驱动接口实现音频驱动接口;
生成至少一个播放控制接口,所述至少一个控制接口用于提供音频播放数据;
调用所述音频驱动接口中的PWM驱动接口,以控制所述音频电路播放所述音频播放数据。
17.根据权利要求16所述的方法,其特征在于,基于MicroPython的PWM驱动接口实现音频驱动接口,包括:
注册音频使能I/O引脚,并利用MicroPython的I/O驱动接口初始化音频使能I/O引脚:设置音频使能I/O引脚的模式为输出,有效电平为低电平;
注册音频播放I/O引脚,并利用MicroPython的PWM驱动接口初始化音频播放I/O引脚:设置为音频播放I/O引脚产生PWM波形的定时器的频率和占空比,并启动与所述PWM驱动接口对应的PWM定时器通道。
18.根据权利要求17所述的方法,其特征在于,所述至少一个播放控制接口包括:
音调接口,支持可变数量的输入参数;在输入参数为1个时,用于获取编程人员提供的目标频率,用于设置为音频播放I/O引脚产生PWM波形的定时器的频率实现发音;在输入参数为2个时,获取编程人员提供的音调和时长,所述音调在播放所述时长之后自动停止;
声音接口,用于内置多段旋律,用以调整所述定时器的频率实现所述多段旋律的播放;
旋律接口,用于获取编程人员自定义的旋律,用以调整所述定时器的频率实现旋律的播放;
音量接口,用于获取音量信息,用以调整所述定时器的占空比实现按照所述音量信息的播放。
19.根据权利要求9所述的方法,其特征在于,基于MicroPython的SPI驱动接口实现彩灯驱动程序,包括:
注册彩灯对应的MicroPython的SPI驱动接口,初始化所述彩灯的id和属性数据作为缓存数据;所述SPI驱动接口支持可变数量的输入参数;
在被调用时,判断输入参数的数量是否符合预先设置的数量要求,并判断输入的彩灯id是否属于已注册的彩灯id;
若判断结果均为是,则根据输入的彩灯id和属性数据更新所述缓存数据,根据更新后的缓存数据调用MicroPython的SPI驱动接口对所述彩灯进行显示控制。
20.一种可编程硬件设备,其特征在于,包括:处理器、存储有计算机程序的存储器以及LCD显示器;
所述处理器,用于执行所述计算机程序,以用于:
响应编程人员的第一编程指令,调用基于MicroPython的SPI驱动接口实现的显示驱动程序,以供编程人员利用所述显示驱动程序在所述可编程硬件设备上的LCD显示器上至少进行游戏背景和游戏角色的显示控制。
21.根据权利要求20所述的设备,其特征在于,还包括:物理按钮、音频电路和彩灯中的至少一种硬件模块;
当所述处理器执行所述计算机程序时,还用于执行以下至少一种操作:
响应编程人员的第二编程指令,调用基于MicroPython的I/O驱动接口实现的按钮驱动程序,以供编程人员利用所述按钮驱动程序在所述可编程硬件设备上自定义使用的物理按钮并通过所述物理按钮实现对游戏角色的控制;
和/或
响应编程人员的第三编程指令,调用基于MicroPython的PWM驱动接口实现的音频驱动程序,以供编程人员利用所述音频驱动程序对所述可编程硬件设备上的音频电路进行播放控制;
和/或
响应编程人员的第四编程指令,调用基于MicroPython的SPI驱动接口实现的彩灯驱动程序,以供编程人员利用所述彩灯驱动程序对所述可编程硬件设备上的LED彩灯进行显示控制。
22.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器至少实现以下动作:
响应编程人员的第一编程指令,调用基于MicroPython的SPI驱动接口实现的显示驱动程序,以供编程人员利用所述显示驱动程序在所述可编程硬件设备上的LCD显示器上至少进行游戏背景和游戏角色的显示控制。
CN202010634189.5A 2020-07-02 2020-07-02 基于MicroPython的硬件驱动方法、设备及存储介质 Pending CN111773692A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010634189.5A CN111773692A (zh) 2020-07-02 2020-07-02 基于MicroPython的硬件驱动方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010634189.5A CN111773692A (zh) 2020-07-02 2020-07-02 基于MicroPython的硬件驱动方法、设备及存储介质

Publications (1)

Publication Number Publication Date
CN111773692A true CN111773692A (zh) 2020-10-16

Family

ID=72758597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010634189.5A Pending CN111773692A (zh) 2020-07-02 2020-07-02 基于MicroPython的硬件驱动方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN111773692A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112486579A (zh) * 2020-11-20 2021-03-12 中国人寿保险股份有限公司 自助终端设备驱动调用标准化方法及相关设备

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5680534A (en) * 1994-10-31 1997-10-21 Nintendo Co., Ltd. Video game/videographics program fabricating system and method with superimpose control
WO2003039698A1 (en) * 2001-11-02 2003-05-15 Atlantis Cyberspace, Inc. Virtual reality game system with pseudo 3d display driver & mission control
CN103207338A (zh) * 2013-04-25 2013-07-17 上海纳恩汽车技术有限公司 一种基于Python脚本的汽车电子测试平台
CN104731543A (zh) * 2015-03-23 2015-06-24 深圳市欧珀通信软件有限公司 一种屏幕刷新率的显示方法和装置
CN109545035A (zh) * 2018-09-30 2019-03-29 上海畅学教育科技有限公司 多消息交互图形化硬件编程兼容系统和方法
CN109568940A (zh) * 2018-12-24 2019-04-05 武汉西山艺创文化有限公司 一种基于透明液晶显示屏的ar游戏掌机及交互方法
CN109599048A (zh) * 2019-01-09 2019-04-09 惠科股份有限公司 一种显示装置及其驱动方法和显示器
CN109669885A (zh) * 2018-11-01 2019-04-23 广州市中海达测绘仪器有限公司 Oled显示驱动系统、方法及存储介质
CN109725941A (zh) * 2018-12-18 2019-05-07 深圳吉迪思电子科技有限公司 一种用于显示驱动芯片的可编程初始化方法及系统
CN110300212A (zh) * 2018-03-21 2019-10-01 努比亚技术有限公司 终端炫彩灯动态控制方法、终端及计算机可读存储介质
CN110384924A (zh) * 2019-08-21 2019-10-29 网易(杭州)网络有限公司 游戏场景中虚拟对象的显示控制方法、装置、介质及设备
CN110415502A (zh) * 2019-05-21 2019-11-05 浙江工业大学 一种基于ESP32的光谱传感器模块驱动与WiFi传输装置及方法
CN110917610A (zh) * 2019-08-21 2020-03-27 努比亚技术有限公司 辅助游戏显示效果的方法、移动终端及计算机可读存储介质

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5680534A (en) * 1994-10-31 1997-10-21 Nintendo Co., Ltd. Video game/videographics program fabricating system and method with superimpose control
WO2003039698A1 (en) * 2001-11-02 2003-05-15 Atlantis Cyberspace, Inc. Virtual reality game system with pseudo 3d display driver & mission control
CN103207338A (zh) * 2013-04-25 2013-07-17 上海纳恩汽车技术有限公司 一种基于Python脚本的汽车电子测试平台
CN104731543A (zh) * 2015-03-23 2015-06-24 深圳市欧珀通信软件有限公司 一种屏幕刷新率的显示方法和装置
CN110300212A (zh) * 2018-03-21 2019-10-01 努比亚技术有限公司 终端炫彩灯动态控制方法、终端及计算机可读存储介质
CN109545035A (zh) * 2018-09-30 2019-03-29 上海畅学教育科技有限公司 多消息交互图形化硬件编程兼容系统和方法
CN109669885A (zh) * 2018-11-01 2019-04-23 广州市中海达测绘仪器有限公司 Oled显示驱动系统、方法及存储介质
CN109725941A (zh) * 2018-12-18 2019-05-07 深圳吉迪思电子科技有限公司 一种用于显示驱动芯片的可编程初始化方法及系统
CN109568940A (zh) * 2018-12-24 2019-04-05 武汉西山艺创文化有限公司 一种基于透明液晶显示屏的ar游戏掌机及交互方法
CN109599048A (zh) * 2019-01-09 2019-04-09 惠科股份有限公司 一种显示装置及其驱动方法和显示器
CN110415502A (zh) * 2019-05-21 2019-11-05 浙江工业大学 一种基于ESP32的光谱传感器模块驱动与WiFi传输装置及方法
CN110384924A (zh) * 2019-08-21 2019-10-29 网易(杭州)网络有限公司 游戏场景中虚拟对象的显示控制方法、装置、介质及设备
CN110917610A (zh) * 2019-08-21 2020-03-27 努比亚技术有限公司 辅助游戏显示效果的方法、移动终端及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李勇 等: "基于STM32的动漫游戏系统设计", 《电子世界》, no. 09, 15 May 2014 (2014-05-15), pages 123 - 124 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112486579A (zh) * 2020-11-20 2021-03-12 中国人寿保险股份有限公司 自助终端设备驱动调用标准化方法及相关设备

Similar Documents

Publication Publication Date Title
Yu et al. A review of computational toys and kits for young children
US11645934B2 (en) Systems and methods for customized lesson creation and application
CA2912243C (en) Immersive story creation
US20190236975A1 (en) Integrated development environment for visual and text coding
Bers et al. The official ScratchJr book: Help your kids learn to code
Tollervey Programming with MicroPython: embedded programming with microcontrollers and Python
US20160184724A1 (en) Dynamic App Programming Environment with Physical Object Interaction
CN113082721B (zh) 集成游戏模块的应用程序的资源管理方法、装置、电子设备及存储介质
US20150279371A1 (en) System and Method for Providing an Audio Interface for a Tablet Computer
CN104867511A (zh) 卡拉ok互动关键词特效系统
CN108762878A (zh) 一种应用程序互动界面生成方法、装置、设备及存储介质
CN111773692A (zh) 基于MicroPython的硬件驱动方法、设备及存储介质
CN111381794B (zh) 机器人眼灯的控制方法、装置、终端设备及介质
US20240139626A1 (en) Game interaction method and apparatus, device and medium
Murray-Browne Interactive music: Balancing creative freedom with musical development.
CN114415924A (zh) 一种基于实物编程的多模态交互方法及相关设备
CN111773733B (zh) 基于Arcade平台的编程方法、设备及存储介质
CN114610311A (zh) 面向实物编程的虚拟化方法及相关设备
JP2004533171A (ja) リアルタイムストリームのコンテンツと対話するデバイス
TW592777B (en) A toy robot, a system for controlling such a toy robot and a method of constructing such a toy robot
CN110860080A (zh) 一种基于儿童智能交互的灯光游戏方法和系统
JP7202006B2 (ja) ブロックにコンテンツを関連付けする装置
JP2002273674A (ja) ロボットの制御装置及びその方法並びにプログラムコード、記憶媒体
McCue Getting started with coding: get creative with code!
US20140368450A1 (en) Information processing system, information processing apparatus, storage medium having stored therein information processing program, and information processing method

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination