丁伟 李艳
随着技术的发展,计算机更多地被用来处理文字、图像、声音、视频等非直接用二进制形式呈现的信息。例如,用键盘输入文章,就需要把字母转换为计算机能够识别的二进制数据,然后对它们进行存储和处理,转换的过程需要用到计算机编码的知识。现代的键盘就是使用ASCⅡ编码的方式实现字符的输入的。
本实验通过使用掌控板模拟键盘按键输入,让学生了解键盘上的符号是如何通过编码的方式输入到计算机中的。然后再通过一个趣味输入的实验来体验其他的输入方式。首先,我们了解一下Python如何读取转换ASCII码。
● Python进行ASCII码转换
在Python中使用ord函数将ASCⅡ字符转换为对应的数值,反之,使用chr函数,将数值转换为对应的ASCⅡ字符,如图1所示。
● 用掌控板模拟键盘输入
掌控板是一块微控制器板,板载加速度传感器、按键、触摸引脚、声光传感器、128*64的OLED屏幕等,通过mPython编程,借助掌控板的显示屏就可以轻松显示字符和對应的ASCⅡ码值。mPython0.5.3是盛思技术团队在BBC官方原版PythonEditor基础上拓展开发的编程软件,可以进行可视化代码编程,有blockly、Python、Jupyter三种代码读写等功能。
将掌控板用USB线连接到计算机,启动mPython0.5.3,选择对应的端口号连接。将掌控板下面的六个触点作为键盘上的六个按键来使用,当按下任意一个触点时在显示屏上显示对应的字母和ASCⅡ码值。
下面以字母“P”为例,模拟键盘输入过程的代码。首先,写好代码后点击“刷入”按钮将程序写入到掌控板上,接着触摸下方的“P”键,屏幕上显示ASCⅡ码值“80”并在下方显示对应的字母“P”。当使用键盘输入“P”这个字母触摸“P”键的时候实际上是给了计算机“0101000”(十进制的80)这一串二进制数值(如图2)。
触摸“P”键时显示其他的字母,将上面的程序稍作修改即可实现其他字母和符号的显示,如图3中是触摸“P”键时显示字母A的程序。
以上两个字母输入的例子是借助掌控板上的触点完成的,当接触触点时将触点上的正负极接通,此时主控板接收到表示通、断的二进制电信号,显示对应编码的字母。
真实的计算机键盘将各个键所表示的数字或字母转换成计算机可以识别的信息编码,由于键盘上的按键较多,通常采用行列扫描的方法来确定按下键所在的行列位置。当按键被按下时电源接通称为接通扫描码,释放时电源断开称为断开扫描码,这样对键盘进行实时的行列扫描就可以确定按下键所在的位置和先后顺序,获得并输出扫描位置,然后转换为ASCⅡ码,由显示器显示出对应字符。
● 趣味输入方式——摇晃输入
现在的输入方式已经不局限于键盘,语音输入、手写输入等已经非常普遍,无论哪种输入方式都是将输入的内容转换为对应的编码。下面借助掌控板中的加速度传感器开发一种趣味输入方式——摇晃输入。
1.项目设计
项目设计的目的是让计算机操作人员的手腕放松,在缓解疲劳的同时还兼具趣味性。通过掌控板中的加速度传感器读取晃动手腕的次数,将这个数值转换成对应的ASCⅡ编码表中代表的字符,将其作为幸运符显示,对应的二进制数字作为密码显示在屏幕上。将掌控板放置于包装盒中,露出屏幕,盒子里可以加装移动电源,移动电源一方面用来供电,另一方面可以增加配重提高晃动的手感。上页图4所示是一个初步的产品。
2.项目实施
初始化程序,首先将前面显示的内容清空,然后显示“Ready”提示字样,同时亮灯一秒。在摇晃过程中,使用变量m来记录掌控板被摇晃的次数。然后分别显示一下摇晃的次数、对应的ASCⅡ字符和二进制数。点击上方的“刷入”按钮,将程序写入到掌控板上,进行测试(如图5)。
在测试过程中我们发现,摇晃的次数和对应的二进制数值均能正常显示,二进制前面的0b的意思是在程序中数字的表示形式是二进制。但是ASCⅡ对应的字符有时显示,有时不会显示。通过查阅ASCⅡ编码表格发现,在128个字符中0~32字符是控制字符,所以在屏幕上是显示不出来的。
3.项目改进
为了避免出现不显示幸运符的尴尬,将摇晃次数小于33的情况单独列出,此时显示为“功力不够,继续努力”;当摇晃次数介于33和127之间时按照上面的预设正常显示;当摇晃次大于127时显示“用力过猛,请重新开始”(如图6)。
通过研究模拟键盘输入字母实验的研究,学生了解了计算机编码的基本过程,掌握了键盘输入的工作原理,揭开了计算机工作过程的神秘面纱。实验中使用掌控板仅能模拟六个键,而且没有设计连续字符输入的模拟,这也是留给学生去探索的方向。