跟我学单片机创意坊

       五段码
一种填空就能玩单片机的代码语言

DP801、DP811升级换代产品


作为DP801、DP811的升级换代产品, “五段吗”解析型代码语言,一种由数字和英文字母按特定规律;不会发生语义歧义的代码组合构成的解释型代码指令语言。
一条指令由六个字符(代码)分成五段,即指令段加四个参数段;指令段占用两个字符位置,四个参数段各占一个字符位置;每个字符可填入十六进制的表述符号,即数字0 ~ 9和英文字母A ~ F。在不同的指令里,这些数字和字母代表着不同的含义;每条指令段的代码都是唯一的、没有重复的;参数代码则可以表示该指令的操作源寄存器或端口、操作目的寄存器或端口、以及操作数和操作类型。
指令结构如下表。

01

2

3

4

5

指令

参数1

参数2

参数3

参数4

  第一段是指令,由没有重复的两位十六进制数构成。2、3、4、5段是参数段。这些参数在不同的指令里会有不同的解释,代表不同的意思。
例如端口引脚设置指令“01”,其结构如下:


01 P B 0 N

  1. 01 为指令码。
  2. P 是端口,取值0、1、2、3,表示51单片机的4个不同端口
  3. B 是端口的引脚,取值0、1、2、3、4、5、6、7,代表一个端口的8只引脚
  4. 0 表示空,即无用。
  5. N 是设置值,取值0、1;0表示低电平,1表示高电平。

举一个具体实例:011200,意思是:设置端口1的第2引脚为低电平。
代码段可以单独使用,也可以组合使用。一般是由两段代码构成一个字节,表示一个十六进制数,或是一个地址值。
简言之,五段码就是从千变万化的计算机语言集中,将最常用、最基础的归纳出有限的几十条,以代码的形式来表现,用简单、单一的规则:填空的方式编写程序。   
例如,假设点亮一只接在端口P0,引脚5上的LED,我们选择一条指令,这里选指令“01”端口送数指令,其格式为01PB0N,我们需要填入的是‘P’代表端口号,这里填入‘0’,而‘B’代表是引脚,于是填入‘5’,我们要赋予的值是低电平(假设LED阳极已接入高电平)也就是‘0’,如此构成了一条语句:

010500

其意义是将端口P0的引脚5置低电平。
五段码提供的代码足以满足信息技术、人工智能等科普活动(通用技术课)所接触的大部分实验科目,避免初学者特别是中小学生过早被正统计算机语言羁绊,而难以把玩、体验信息技术、人工智能等这些现代技术的乐趣。五段码最适合小学生或初中生,仅用填空的技巧就能比较广泛的接触新兴技术,发现自己的兴趣点,自己的能力,注重体验和过程而不必过于深究(绕过去)软件编程等这些可以放到以后再学的知识。

五段码语言特点

  1. 五段码是一种解释型程序语言。驻留在硬件平台(单片机)内部的解释程序(固件)逐句解析代码语句完成特定任务。为保证掉电后代码语句不丢失,下载的代码语句保存在单片机内部EEPROM中,由于EEPROM的容量限制,构成一个程序的最多语句数为170条,最大地址为0xAA。
  2. 系统内部包含有16个寄存器,编号依次为0~F,五段码中的很多语句都借用这些寄存器存取或交换数据。一般用法是在指令中直接使用寄存器号引用单个寄存器,或是指令中只给出一组寄存器的第一个寄存器号,然后成组引用的方式。
  3. 五段码程序语言的指令分为两大类。一类是基本指令,涵盖了公知的计算机语言的三种执行类型:顺序、循环和分支;包括对寄存器存取数据操作、寄存器位逻辑操作、寄存器算术运算、寄存器移位与循环操作,智能控制芯片端口操作以及对端口某个位的操作、条件转移,无条件转移,以及中断。另一类是功能模块子程序调用机制,涵盖多种常用智能控制芯片的外围周边器件的控制子程序的调用,采用系统内的16个寄存器传递初始化数据和被调用子程序运行后的结果。
  4. 包含两个串口:串口1、串口2的操作指令,可达成与电脑或其他科学仪器间的RS232串口通讯。
  5. 包含串口透传操作指令可连接蓝牙(借助串口2),并支持AT指令,实现手机与包含智能控制芯片的系统互联;可连接WIFI实现互联网与包含智能控制芯片的系统互联,实现物联网。
  6. 包含定时操作以及PWM操作指令,可操控直流电机、步进电机和伺服电机;可完成机器人以及带有机械运动部件的系统的操控。
  7. 支持两个外部中断,可实现较为复杂的单片机程序。
  8. 包含对中文字符的处理指令,可显示中文。
  9. 支持以双斜杠为标志的注释语句。程序中加入注释更有利于程序的阅读、理解和交流。
  10. 五段码程序文件是一个宽展名为“.cod”的为纯文本文件,其专属编辑器CodeEditer是一款用户友好的编辑软件,具有丰富的帮助文件和鼠标右键调出的快捷提示菜单,便于用户随时查阅检索代码指令,使得编程成为一个类似填空答题的超简单的过程。

五段码指令体系

 

  1. 端口操作类
    1. 指令 01 端口引脚设置,
    2. 指令 02 端口送数据
    3. 指令 04 端口内容送寄存器
    4. 指令 20 P0强推挽输出
  2. 寄存器操作类
    1. 指令 03 寄存器送数据
    2. 指令 05 寄存器内容送端口
    3. 指令 06 寄存器设置端口引脚
    4. 指令 07 寄存器位移动
    5. 指令 08 寄存器循环
    6. 指令 0D 寄存器自增/自减
    7. 指令 0E 寄存器算术运行
    8. 指令 0F 寄存器位逻辑运算
  3. 程序流程控制(跳转)类
    1. 指令 00 无条件跳转
    2. 指令 0C 端口引脚判零跳转
    3. 指令 0A 寄存器与寄存器比较不等跳转
    4. 指令 0B 寄存器与数比较不等跳转
    5. 指令 18 串口2接收命令跳转
  4. 中断类
    1. 指令 1F 初始化外部中断0、1
  5. 定时类
    1. 指令 10 定时
  6. 串口类
    1. 指令 11 串口1中断设置
    2. 指令 12 串口1字符输出
    3. 指令 13 串口1字符输入
    4. 指令 14 串口1字符串输入
    5. 指令 15 串口2初始化
    6. 指令 16 串口2字符输出
    7. 指令 17 串口2字符输入
    8. 指令 1C 串口1输出中文字符
  7. 其他
    1. 指令 19 初始化数组指针
    2. 指令 1A 存数组元素
    3. 指令 1B 取数组元素
    4. 指令 1D BCD码输出
    5. 指令 1E 随机数
  8. 功能模块
    1. 指令 21 并行数码管模块显示操作
    2. 指令 22 串行数码管模块显示操作
    3. 指令 24 初始化LCD
    4. 指令 25 LCD指令
    5. 指令 26 LCD数据输出
    6. 指令 27 LCD中文输出
    7. 指令 28 LCD显示光标位置
    8. 指令 2F 读4X4矩阵键盘
    9. 指令 30 初始化ADC
    10. 指令 31 采集ADC
    11. 指令 40 初始化PWM
    12. 指令 41 输出PWM
    13. 指令 42 机器人小车PWM运行控制
    14. 指令 50 读温湿度数据
    15. 指令 51 读DS1307时间数据
    16. 指令 52 写DS1307时间数据
    17. 指令 60 红外遥控初始化
    18. 指令 61 获取红外值
    19. 指令 70 演奏音乐
    20. 指令 71 接收超声波
    21. 指令 AA 发送AT指令

编辑平台:CodeEditer

   五段码的特点是规则简单便于编写(类似填空),问题是不易阅读,编辑平台CodeEditer.exe提供了解决方案。 CodeEditer.exe是一款用户友好的,小巧的、Windows界面的文本编辑软件,具有以下功能:

  1. 程序文本录入、编辑、保存
  2. 中文注释
  3. 自动插入行号
  4. 将程序下载至单片机
  5. 鼠标右键弹出快捷指令检索、指令格式提示
  6. 丰富的帮助文件,详解指令的格式、功能、以及例程,图 1 是主界面。

2

    其中各项介绍如下。

主菜单

主菜单中大部分条目都与通常Windows编辑软件雷同,这里不再赘述。重点介绍【编辑】菜单下的几个特殊条目,图 2。

  1. 【只读】选中此项,当前打开的文本成为只读,不能修改。此功能可以防止浏览阅读时误改文件。
  2. 【字体】点按此项,调出字体对话框,用户可以选择自己喜欢的字体与大小。
  3. 【插入行号】行号对五段码程序来说是非常重要的,但在程序编写过程中人工设置很容易出错。点按此项,系统将自动给当前程序添加行号,即使是混乱的编号,也能自动予以修正。
  4. 【插入符号标记】点按此项调出子菜单如图 3,其中含有10个标记号,点按一个标记号后,该标记号将显现在当前光标所在行的标记栏上,如图 4。[清除所有标记]将清除以前所做的所有标记。
  5. 【跳转至标记】点按此项调出子菜单如图 5 点按一条已做过标记的标记号,则当前文档的光标将跳至该标记号所在的行。此功能对有跳转的程序语句的调试非常有帮助。

48610

 

 

 

 

 

 

 

 

工具条

12工具条中的特殊项有以下几个,图 。

  1. 【插入行号】功能同主菜单的项。
  2. 【下载程序】在主机与五段码开发平台通过串口连通,串口被打开,运行/下载功能键处于下载位置的情况下,点按此按钮将完成程序的下载。如果成功报告如图 7,如果失败报告如图 8。
  3. 【串口设置】首先要在[设备管理器]中找到系统给你的CH341 USB-串口转换器分配的串口号,如图 9 ,然后点按该按钮调出串口设置图 10,从串口号下拉框中选择刚才的串口号,点按确定,即完成设置。
  4. 【打开串口】此按键打开串口,成功后按键标题变为关闭串口。
141618

 

 

20

 

 

 

关于串口对话框和帮助将在后面详尽介绍。

帮助与提示

五段码是一种代码语言,简洁是其优点同时也是缺点,就是不易记忆和阅读。为弥补这一缺陷,五段码系统提供了完备的在线帮助文档和编辑界面鼠标右键的快捷指令提示功能,使用者完全不用记背指令。程序编写过程中,正确的方法是首先明确要做什么,然后运用以上两种方法寻找恰当的指令并填写正确的参数即可。

帮助文档

22

 

    点按工具条的【帮助】按钮或主菜单的【帮助】项都能调出图 11的在线帮助窗口。帮助文档按指令条目提供了详细介绍,语法以及语法解释,例程以及与其他相关指令的参照跳转。

快捷指令提示

    编写程序过程中,在编辑窗口点按鼠标右键调出快捷指令提示菜单图 12,选取想要的指令项,该指令项的右侧会弹出指令的格式说明,点按[格式],再松开,该指令就会自动填入当前光标所在行。此时还是一条空指令,你需要按照指令的语法格式完成其他参数的填写(填空)。

24

串口对话框

    虽然今日人们不断开发新的通讯手段,但是古老的串行通讯技术依然被广泛使用,而且在许多场合还是最佳的、无可替代的方案。特别是在单片机技术的应用领域,在电脑与被控系统之间的通信等领域,串口是最廉价便利的通讯方案。 因此,单片机技术的培训过程就不可避免的要学习和掌握串口通讯技术。五段码系统提供了专门的串口对话框,方便演练串口通讯的实验例程。
点按工具条的【串口对话框】按钮调出串口对话框如图 13。

    26

    • 【波特率】选项提供串口通讯所需的速率即波特率的选择。五段码的宗旨是尽可能地简单,所有系统将波特率固定为9600,无需用户设定。
    • 【串口号】就是你的单片机所用的串口连接设备(USB接口的)在电脑里的编号。在控制面板的设备管理器里可以查到并通过[串口设置]进行了设置,见前节。
    • 【打开串口】打开选中的串口,并以选择的波特率工作。串口打开成功后小南瓜会睁开双眼,否则报错。
    • 【接收区】接收单片机或其他设备经串口发来的信息。
    • 【清空】点按此按钮清空接收窗口里的文字。
    • 【十六进制显示】选中此框,接收到的信息将以十六进制形式显示。比如收到字符‘0’将显示30。此特性主要用于观察不可见字符(如回车换行等控制符)和纯数字的信息。
    • 【RX】显示已接收的字符数。
    • 【发送区】输入要发送的文字,点按[发送]按钮,信息即发送出去。发送之前,可以选择[发送时]的选项,在信息文字串的后面添加诸如‘空白’、‘回车’、‘换行’等控制符号,这往往是接收端需要的以确定信息流的终止点。
    • 【十六进制发送】在发送区里写入十六进制数,不需要“0x”。例如:30,35,45中间以空格分开,接收方收到的是03E三个字符。
    • 【发送时】有时接收方要求在发送的信息结尾处加入控制字符,以利判断信息的结束。此列表提供一些控制字符如“回车”,“换行”。选择某一项后,当发送时字符串后面自动添加该控制字符。
    • 【TX】显示已发送的字符数。

    开发平台

        五段码开发平台就是一个STC单片机的最小系统,其实物如图 14,首先将板上各部分器件功能与使用详细说明如下。

    2

    1. LCD插座,可接插LCD1602和LCD12864两种型号的LCD显示屏模块,无论是那种显示屏模块都将1脚对准插座的1脚插入即可。从第7脚至第14脚直接接P0端口的8只引脚,与端口P0的8位插针连通。
    2. P0端口的8位插针,与LCD的第7至第14脚连通。
    3. P2端口的8位插针与插座,并带有VCC和GND引出位置。
    4. P3端口的8位插针与插座,并带有VCC和GND引出位置。
    5. USB串口接口。4位插针红(VCC)、黑(GND)、白(RXT)、绿(TXT)排列。
    6. P1端口的8位插针与插座,并带有一排VCC和一排GND引出插针。
    7. 蓝牙接口。
    8. WIFI接口。
    9. 外接电池盒插座。
    10. 外接电源适配器插座。
    11. 复位按钮。
    12. 总电源开关。
    13. 下载/运行状态开关。
    14. 两路PWM输出插针。
    15. LCD亮度对比电位器。
    16. STC12C5A60S2单片机。
    17. 两只74HC00芯片与两只9012三极管构成的PWM控制电路。
    18. 提供3.3V电源的稳压芯片。

    下面为读者详尽介绍各电路部分,请参照图 14。

    3

    1. 图15 为单片机电路,使用的是44脚贴片STC12C5A60S2单片机,晶振为11.0592Mhz。电路中的USB接口为一组4芯排针,接插USB转串口桥接器,为市面上(淘宝)大量供应的成熟商品;接口有四根杜邦插头分别为红(5V),黑(GND),白(RXT),绿(TXT)。 电路中的1N5817二极管是为阻止从串口TXT端施加电源而设。开关“RUN”是设置系统处于“运行”或“下载”状态的开关。
    2. 4

    3. 图 16 是WIFI接口,蓝牙接口以及复位电路。WIFI与蓝牙接口启用了STC12C5A60S2单片机的第二串口,这些接口为日后应用WIFI、蓝牙提供了便利,使用时只要将模块插入即可。图中可见各模块都有3.3V的接入,满足这些模块的需要。复位电路为标准的高电位复位电路。
    4. 5

    5. 图 17 是LCD接口插座,即可接插LCD1602,也可接插LCD12864,完全满足常用LCD显示屏的实验。两种不同型号的LCD模块接插时都将模块引脚1对齐插座的插口1插入即可。
    6. 6

    7. 图 18 是PWM控制电路部分。STC12C5A60S2单片机自带PWM产生电路可以从P1.3,P1.4或P4.2,P4.3输出。问题是当用于机器人小车时往往至少驱动两只电机并要求可以改变电机的运转方向,但是单片机是从固定引脚输出PWM信号,因此需要附加控制电路。图中是两片74HC00芯片和两只9012三极管。信号引脚PWM_En、RD、LD、PWMa、PWMb均来自单片机,见图 15。 信号PWM_En为总控制信号,电阻R12、13构成一个电压锁定电路,系统上电时A点为低电平,避免电机误动作。PWMa、PWMb为PWM信号,RD、LD为左右电机旋转方向控制。最终PWM波形信号将从4排针的RPA、RPB、LPA、LPB输出,接功率驱动模块。具体电路逻辑读者可自行分析。
    8. 7

    9. 图 19 为电源部分,分别配备了外接电池盒插座和外接适配器插头。另外专门配备了3.3V的电源供给电路,供WIFI、蓝牙等模块的需要。
    10. 8

    11. 图 20 是辅助插座部分,将51单片机的四个端口引脚全部接出。另外还有5V与GND的排针引脚,可供外接实验模块使用。实验电路的构成即可以使用杜邦插头直接接插模块,也可以将元件插在面包板上然后使用跳线接插面包板。

    不难看出五段码开发平台是一个以STC12C5A60S2为核心的51体系单片机的最小系统,四个传统端口P0、P1、P2、P3的引脚全部引出,并提供插座与排针两种接插模式,即方便配有杜邦插头的模块直接接插,也方便使用跳线连接面包板的实验的接线。通过软件这些端口与引脚,既可以一个引脚,一个引脚的单独使用,也可以以端口为单位的整体使用,大大方便实验的操作。同时,配有多组VCC与GND的引出插针或插座,便于其它模块接入电源。
    LCD插座满足两种常用LCD模块的接插。WIFI、蓝牙插座方便这两种通讯模块的实验,WIFI、蓝牙还可直接用于机器人小车的操控。
    PWM控制电路不仅使得机器人小车的操控更加便利也简化了软件的编程,PWM输出插针可以直接连接功率驱动电路如L298等。
    外接电源适配器与电池盒插座为系统提供了多种电源的选择。

    安装与调试

    9

    五段码为绿色软件,安装目录包从网上下载,内容如图 21。只要将安装目录直接拖拽至目的硬盘即可。硬件由五段码开发平台和CH341 USB-串口转换器构成核心件,配以不同的外围模块、器件构成初级套装或高级套装,也可在网上购得。系统安装调试步骤如下。

    1. 运行“CH341SER”目录内的“Setup.exe”,安装CH341 USB-串口转换器。弹出窗口如图 22,点按【安装】按钮,开始安装。
    2. 10

    3. 安装成功后,可以在[设备管理器]中找到系统给你的CH341 USB-串口转换器分配的串口号,见图 9 。
    4. CH341 USB-串口转换器的4位插针,按颜色标识插入五段码开发平台的对应引脚,如图 23。
    5. 11

    6. 进入“CodeEditer”目录,运行五段码编辑器“CodeEditer.exe”,从目录“Code_file”中载入一个例程,建议首先实验流水灯的程序。按照要求配接好流水灯模块。
    7. 点按工具条(图 6)的【打开串口】按钮打开串口,然后将五段码开发平台的“下载/运行”开关(图 14-13)拨至下载端,即可通过点按开发平台工具条上的【下载程序】按钮完成下载。然后,拨回到运行端即可观看实验效果。(需要提醒的是,由于前一个程序可能含有循环等指令,程序可能处于死循环状态,这不是问题而是程序功能需要,比如流水灯程序,这时还需按动复位按钮以使系统恢复初始化,才能顺利完成下载。)

     

    其他附件

    电子音谱编辑器Music_Editer.exe

    五段码支持简单的电子音乐,比一般的做个蜂鸣器有趣多了。打开安装目录(图 21)内的《电子乐编辑》目录,运行Music_Editer.exe,开启“电子乐谱编辑”小程序界面,图 24。将自己喜爱的乐曲转为五段码可以识别的电子乐文件,下载至开发平台,运行指令70就可以播放出乐曲。

    1

    1. 【音符】选择框,选择音符。音符从低音1 至高音7,包括半音和休止符。为了便于区分,低音部分的音符旁边标有‘D’字符,中音标有‘Z’字符,高音标有‘G’字符。半音符标有‘#’符号区分。
    2. 【节拍】选择框,选择节拍。节拍从八分之一音符到四拍全音符。
    3. 【小节】组成框,内容是音符加该音符的节拍,也就是演奏时长,构成一条记录,通过点按【插入】按钮插入到【乐谱】编辑框内。
    4. 【乐谱】编辑框,插入、删除、显示全部的小节,也就是当前整个乐谱。
    5. 【插入】按钮向【乐谱】编辑框插入小节。
    6. 【删除】按钮删除【乐谱】编辑框内已有的小节。
    7. 【打开文件】按钮打开一个已有的以“.mus”为扩展名的乐谱文件。文件内容显示在【乐谱】编辑框内。
    8. 【保存文件】按钮保存已编辑好的乐谱,一个扩展名为“.mus”的文件。
    9. 【退出】按钮,退出应用程序。
    10. 【打开串口】按钮打开选中的串口,如果串口被占用,就报错。
    11. 【串口号】选中框,选中已被系统识别的USB串口并赋予串口号的,连接五段码硬件平台的串口。
    12. 【下载】按钮将乐谱文件转换成专用数据下载至五段码硬件平台中。下载之前需先将硬件平台上的【运行/下载】按钮拨到下载位置,下载完毕拨回到运行位置,然后编写指令70即可演奏了。

     

    多功能汉字处理器 Font_Op.exe

      计算机显示汉字是学习单片机乃至计算机都应当掌握至少是了解的知识点。汉字的显示实际上是由一组有序排列的像素构成。如果有笔画的像素不亮,而其周围的像素都是亮的,就能看到一个黑色笔画的汉字。能够清楚显示一个汉字的最小像素数是16×16 = 256,这是DOS时代就定下的规矩。
    在其他语言环境下,处理汉字是比较简单的,只要像处理一般字符一样输入、输出就可以了。五段码不具备这样的条件,但也不是说就不能处理汉字了,方法是直接处理机内码,指令1C的功能就是输出汉字。我们来看这条指令的格式。

    1C

    N

    N

    N

    N

     指令段1C后紧跟4个十六进制数NNNN,正是一个汉字的机内码。比如,‘啊’字,其机内码是0xB0A1,写成指令就是:1CB0A1。这就是五段码输出汉字的方法。但要获得一个汉字的机内码需要辅助工具,汉字点阵编辑器能够解决这个问题。这个小工具处理获得机内码外还可获得一个汉字的计算机显示点阵,这个功能可用于LED显示屏等的应用。
    打开安装目录(图 21 )内的《中文处理》目录,运行Font_Op.exe,调出汉字点阵编辑器的界面如图 25,各部分功能作用介绍如下。

    2 

    1. 汉字点阵棋盘格
      这是一个16X16棋盘格区,用鼠标点重某个格子,这个格子就变成红点,再点又变回灰格。该区域有两个作用,一是显示汉字点阵,另一个作用是用户可以修改或自行描绘图案以供显示。
    2. 汉字库字模按区位码浏览
        这是一套可以用区位码选择汉字的工具。拨动“区号”选择选区号,滑动“位号”滑杆选择位号,如果该区位码不是空号,则A区会显示该汉字或符号的点阵图案。
    3. 输入汉字
      鼠标放入该框,输入汉字,A区随即显示出该汉字的点阵,同时D输入机内码框内出现该汉字的机内码。
    4. 输入机内码
      鼠标放入该框,输入正确的机内码,点按TAB键,或将鼠标焦点移开,A区随即显示出该汉字的点阵,同时C输入汉字框内出现该机内码的汉字。
    5. 点阵数据
      所谓汉字点阵就是一组两进制数,组成16X16的点阵,描绘出一个汉字的笔画,如图 26。计算机里8位组成一个字节,两个字节构成16位,因此一个汉字点阵一共要32个字节。这些组成汉字的字节按区位码顺序存储在汉字库文件中,计算机就是通过将机内码转成区位码检索汉字点阵数组的(这里指最基本的点阵字库,现代的矢量汉字的结构要复杂的多)。
      将汉字点阵棋盘格划分成四个区域,每个区域含有8个字节,点阵数据区里的四组数组正是这些字节的内容。
    6. 3   

    7. 点阵代码字节存储顺序
      实际上汉字点阵主要应用于LED点阵屏,例如将4个8X8的LED点阵屏组成一个16X16的LED点阵屏,刷新、显示数据的硬件可以有多种模式,例如可以先A、C区再B、D区或是先A、B区再C、D区。将代码字节也按此规律排列将有利于存取数据的编程。
    8. 代码字节存储格式
      自动生成C语言或汇编语言或BASIC语言格式的十六进制数据的文本文件,便于放入剪贴板,然后粘贴到程序文件,构成一组数组。

     

    电脑交互游戏之机器人

    4

        电子游戏无疑是青少年都喜欢的。五段码结合电脑动画软件也可以组成富有教育意义的项目,机器人是其中之一。打开安装目录(图 21)内的《机器人》目录,运行Robot.exe,出现图 27的界面。
    这个项目的要点是单片机与电脑通过串口通讯,指引动画中的机器人完成一些特定动作。单片机部分编程的要点是根据Robot.exe反馈的状况做出判断并根据机器人运行策略,比如沿右手边前行发出指令;Robot.exe收到指令后做出反应,或报告目前状况,或前进一步,或转弯,或点亮一只灯等等。
    该项目不但有趣,重要的是锻炼决策分析技巧,可以应用到实际的机器人项目。具体规则见目录内的说明书。

    电脑交互游戏之红绿灯

    5

    十进制、二进制、十六进制之间的相互转换是学习单片机乃至计算机编程的基本功之一。单纯的学习难免枯燥,一款红绿灯动画软件提供了一条有趣的途径。打开安装目录(图 21)内的《交通灯》目录,运行Traffic_Light.exe,调出图 28的界面。
    这个游戏的核心是用两个字节共16位里的12位来标示一个路口四个方向共12盏交通灯的状态,1为亮,0为灭。单片机通过串口定时发送两个字节来控制交通灯。电脑的动画软件则根据灯的状态,控制路口四个方向的车辆通行。具体规则见目录内的说明书。

    同步系统时间

    6

    五段码的指令50、51是专门支持DS1307时间模块的,可以练习制作实时电子钟等。 但在类似的项目中往往是使用按键完成时间的调整,这在初级的体验为主的项目中显得过于复杂。安装目录(图 21)内的《系统时间》目录里的Systime.exe就是为解决此问题而设。运行这个程序弹出界面如图 29,其中“日期”、“时间”框内显示的是电脑当前系统时间,点按【打开串口】,同时将开发平台上的下载/运行键拨至下载位置,点按【发送】,系统时间就传送给开发平台上的单片机,再将下载/运行键拨至运行位置,系统就会以获取的时间显示。

    竞赛篇

    迎冬奥——机器人冰雪项目比赛

    总则

    第24届冬季奥林匹克运动会,将在2022年02月在我国北京市和张家口市联合举行。这是中国历史上第一次举办冬季奥运会,同时也在全国掀起了前所未有的冰雪运动高潮。
    除了参加实际的冰雪运动外,作为青少年科普活动的机器人比赛项目也可融入奥运精神,举办一些模拟冰雪运动的竞赛项目。下面给出两项用蓝牙遥控的机器人小车的竞赛项目;冰球比赛项目和障碍滑雪项目。

    冰球比赛

    基本规则

    1. 场地
      冰球场地为3M X 1.5M的矩形场地。用黑色电工胶带在平整地面粘贴而成。场地中心有一个直径10公分的圆,为发球区。球门为在端线粘贴的50cm X 30cm矩形。矩形内涂不同颜色,以便选手区分各自球门。距两边端线1米处各有一条虚线,为等待线。
      此场尺寸地方案仅供参考,读者可根据自身实际情况施划场地。
    2. 冰球
      标准型机器人采用直径7.5公分,高2.5公分的专业冰球。
    3. 赛时
      每场比赛15分钟。双方将机器人放在等待线,裁判将冰球放在发球区后鸣笛后,比赛开始并开始计时。15分钟后鸣笛结束。裁判鸣笛后的任何进球判为无效。
    4. 赛前准备
      正式比赛开始前,选手进入准备区,完成对蓝牙的连接工作。然后,举手示意裁判,可以开始比赛。之后,将参赛机器人小车放在自己一方的等待线后,等候裁判发令。
      准备时间最长5分钟。超时后,将自动判罚出局。
    5. 1

      冰球赛场地

    6. 进球
      选手操作机器人小车将冰球推入对方球门,只要冰球部分压住球门线,即可判为进球。
    7. 死球
      如果双方同时顶住冰球,任何一方也无法将球带开,则判为死球。此时裁判鸣笛,双方将各自的机器人小车放回等待线,裁判将冰球放回发球区,比赛从新开始。判罚时间计入总时间(即判罚期间不停止计时)。
    8. 边球
      冰球被一方推出场地边线,判罚为边球。由对方选手在冰球出界处开任意球。双人制比赛时,罚球机器人由判罚方任选。判罚开始时,判罚方可手动将自己的机器人任意摆放到冰球附近,然后开球。被罚方只能操控自己的机器人在场内作机动运动,不得停在冰球前不动。双人制比赛时,罚球方的另一名选手也可在场内做策应机动运动。判罚时间计入总时间(即判罚期间不停止计时)。
    9. 计分
      进球,进球方得10分。
      死球,双方各判罚 —2 分。
      边球,造成边球方判罚 —2 分。
      比赛15分钟结束后,总分高者胜出。
    10. 单人制
      比赛各方只出一名选手参赛。
    11. 双人制
      比赛各方各出两名选手参赛。

    障碍滑雪比赛

    比赛开始时,每位选手持有100分的基础分。场地上摆放若干个障碍物,选手操作机器人从起点开始,绕行通过所有障碍物,最后到达终点。绕行过程中碰到障碍物将罚分,最终以得分最高并用时最少为优胜。

    基本规则

    1. 场地
      障碍滑雪的场地由一串间隔80至100公分的障碍物(一次性口杯),共8至10只,以任意图形排列构成。另设直径为30公分的起点圈和终点圈,如下图。下图仅为示例,实际比赛场地布置,障碍物数量,选手进场后获知。
    2. 2

      障碍滑雪场地示例

    3. 进场准备
      比赛正式开始前,选手进场,有最多5分钟的准备时间(超时判罚出局),在准备区,连接自己的机器人蓝牙。连接好后,举手示意裁判。得到允许后,将机器人放到起点圈内,等待裁判发令。裁判发令后,立即操纵机器人完成比赛。
    4. 绕障碍
      选手操纵机器人依次绕行通过各个障碍物,不得碰到障碍物,不得跳过障碍物。碰到或跳过障碍物均要扣分。
    5. 3

      图A

      4

      图B
      图A、图B为正确的绕行路线。

      5

      图C

      6

      图D
      图C、图D为跳过障碍物的路线,均要判失分。

    6. 单人赛
      由一名选手单独完成全程比赛。
    7. 单人赛计分
      每个选手具有100分的基础分。比赛时,每碰到一个障碍物,减3分;每跳过一个障碍物,减2分。最后计总分,总分相同的比用时,用时短的胜出。
    8. 四人接力
      由四名选手组成接力队,接力完成。
      第一选手从起点出发,绕过所有障碍物后到达终点。只有在第一选手的机器人到达终点圈后(压线即可),第二选手的机器人才能自终点圈出发,最终返回起点圈。第三、四选手依次类推。
    9. 接力赛计分
      每队有基础分200分,扣除碰障碍物、跳过等罚分(罚分分数与单人赛一致)最后计总分,以及全队完成时间。赛后总分高且用时最短者胜出。

    其他

    程序采用“蓝牙小车程序”,可在此基础上改进。
    手机采用Android(安桌)操作系统手机,原因是只有Android系统是开放的,可以插入App。手机在同队队员中可以共用,因为每个蓝牙模块都有各自唯一的地址码,比赛时连接自己车上的蓝牙,所以不会发生混乱。

    五段码的设计目的是为了满足我国青少年对现代电子、信息、人工智能科普的需求,满足涉猎知识面要广但专业学识深度要浅的要求。采用五段码开展活动和教学时强调的是过程与体验,一个过程由若干个环节构成。比如:关于流水灯这个实验过程,首先的环节是学习和了解LED发光二极管的特性,当然仅限于一般知识性的了解。下一个环节是了解如何使其发光,要用怎样的电路连接,最后是可以使用那些指令(编程)完成点亮发光二极管的实验。先点亮一只然后循序渐进地学习控制流水灯模块的实验。这里编程的环节就很简单了,只要能够选择合适的指令,填写正确的参数就可以了。这些指令的组合实际上隐含了计算机程序里很重要的概念:算法,将来随着学习的深入就不难掌握专业正规计算机语言了。如此,知识储备有限的青少年在不用过深的纠缠计算机语言的前提下,只是通过简单的类似填空的过程,即广泛体验了电子技术的乐趣,又在无形中培养了计算机编程逻辑思维方法,了解了典型算法,这无疑会对以后的发展打下基础。

     

跟我学单片机创意坊 Copyright 2007 - 2018, All Rights Reserved
单片机学习|单片机培训|单片机入门|单片机教程
京ICP备10017461号-2