丁偉 李艷



隨著技術(shù)的發(fā)展,計(jì)算機(jī)更多地被用來(lái)處理文字、圖像、聲音、視頻等非直接用二進(jìn)制形式呈現(xiàn)的信息。例如,用鍵盤輸入文章,就需要把字母轉(zhuǎn)換為計(jì)算機(jī)能夠識(shí)別的二進(jìn)制數(shù)據(jù),然后對(duì)它們進(jìn)行存儲(chǔ)和處理,轉(zhuǎn)換的過(guò)程需要用到計(jì)算機(jī)編碼的知識(shí)。現(xiàn)代的鍵盤就是使用ASCⅡ編碼的方式實(shí)現(xiàn)字符的輸入的。
本實(shí)驗(yàn)通過(guò)使用掌控板模擬鍵盤按鍵輸入,讓學(xué)生了解鍵盤上的符號(hào)是如何通過(guò)編碼的方式輸入到計(jì)算機(jī)中的。然后再通過(guò)一個(gè)趣味輸入的實(shí)驗(yàn)來(lái)體驗(yàn)其他的輸入方式。首先,我們了解一下Python如何讀取轉(zhuǎn)換ASCII碼。
● Python進(jìn)行ASCII碼轉(zhuǎn)換
在Python中使用ord函數(shù)將ASCⅡ字符轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值,反之,使用chr函數(shù),將數(shù)值轉(zhuǎn)換為對(duì)應(yīng)的ASCⅡ字符,如圖1所示。
● 用掌控板模擬鍵盤輸入
掌控板是一塊微控制器板,板載加速度傳感器、按鍵、觸摸引腳、聲光傳感器、128*64的OLED屏幕等,通過(guò)mPython編程,借助掌控板的顯示屏就可以輕松顯示字符和對(duì)應(yīng)的ASCⅡ碼值。mPython0.5.3是盛思技術(shù)團(tuán)隊(duì)在BBC官方原版PythonEditor基礎(chǔ)上拓展開發(fā)的編程軟件,可以進(jìn)行可視化代碼編程,有blockly、Python、Jupyter三種代碼讀寫等功能。
將掌控板用USB線連接到計(jì)算機(jī),啟動(dòng)mPython0.5.3,選擇對(duì)應(yīng)的端口號(hào)連接。將掌控板下面的六個(gè)觸點(diǎn)作為鍵盤上的六個(gè)按鍵來(lái)使用,當(dāng)按下任意一個(gè)觸點(diǎn)時(shí)在顯示屏上顯示對(duì)應(yīng)的字母和ASCⅡ碼值。
下面以字母“P”為例,模擬鍵盤輸入過(guò)程的代碼。首先,寫好代碼后點(diǎn)擊“刷入”按鈕將程序?qū)懭氲秸瓶匕迳希又|摸下方的“P”鍵,屏幕上顯示ASCⅡ碼值“80”并在下方顯示對(duì)應(yīng)的字母“P”。當(dāng)使用鍵盤輸入“P”這個(gè)字母觸摸“P”鍵的時(shí)候?qū)嶋H上是給了計(jì)算機(jī)“0101000”(十進(jìn)制的80)這一串二進(jìn)制數(shù)值(如圖2)。
觸摸“P”鍵時(shí)顯示其他的字母,將上面的程序稍作修改即可實(shí)現(xiàn)其他字母和符號(hào)的顯示,如圖3中是觸摸“P”鍵時(shí)顯示字母A的程序。
以上兩個(gè)字母輸入的例子是借助掌控板上的觸點(diǎn)完成的,當(dāng)接觸觸點(diǎn)時(shí)將觸點(diǎn)上的正負(fù)極接通,此時(shí)主控板接收到表示通、斷的二進(jìn)制電信號(hào),顯示對(duì)應(yīng)編碼的字母。
真實(shí)的計(jì)算機(jī)鍵盤將各個(gè)鍵所表示的數(shù)字或字母轉(zhuǎn)換成計(jì)算機(jī)可以識(shí)別的信息編碼,由于鍵盤上的按鍵較多,通常采用行列掃描的方法來(lái)確定按下鍵所在的行列位置。當(dāng)按鍵被按下時(shí)電源接通稱為接通掃描碼,釋放時(shí)電源斷開稱為斷開掃描碼,這樣對(duì)鍵盤進(jìn)行實(shí)時(shí)的行列掃描就可以確定按下鍵所在的位置和先后順序,獲得并輸出掃描位置,然后轉(zhuǎn)換為ASCⅡ碼,由顯示器顯示出對(duì)應(yīng)字符。
● 趣味輸入方式——搖晃輸入
現(xiàn)在的輸入方式已經(jīng)不局限于鍵盤,語(yǔ)音輸入、手寫輸入等已經(jīng)非常普遍,無(wú)論哪種輸入方式都是將輸入的內(nèi)容轉(zhuǎn)換為對(duì)應(yīng)的編碼。下面借助掌控板中的加速度傳感器開發(fā)一種趣味輸入方式——搖晃輸入。
1.項(xiàng)目設(shè)計(jì)
項(xiàng)目設(shè)計(jì)的目的是讓計(jì)算機(jī)操作人員的手腕放松,在緩解疲勞的同時(shí)還兼具趣味性。通過(guò)掌控板中的加速度傳感器讀取晃動(dòng)手腕的次數(shù),將這個(gè)數(shù)值轉(zhuǎn)換成對(duì)應(yīng)的ASCⅡ編碼表中代表的字符,將其作為幸運(yùn)符顯示,對(duì)應(yīng)的二進(jìn)制數(shù)字作為密碼顯示在屏幕上。將掌控板放置于包裝盒中,露出屏幕,盒子里可以加裝移動(dòng)電源,移動(dòng)電源一方面用來(lái)供電,另一方面可以增加配重提高晃動(dòng)的手感。上頁(yè)圖4所示是一個(gè)初步的產(chǎn)品。
2.項(xiàng)目實(shí)施
初始化程序,首先將前面顯示的內(nèi)容清空,然后顯示“Ready”提示字樣,同時(shí)亮燈一秒。在搖晃過(guò)程中,使用變量m來(lái)記錄掌控板被搖晃的次數(shù)。然后分別顯示一下?lián)u晃的次數(shù)、對(duì)應(yīng)的ASCⅡ字符和二進(jìn)制數(shù)。點(diǎn)擊上方的“刷入”按鈕,將程序?qū)懭氲秸瓶匕迳希M(jìn)行測(cè)試(如圖5)。
在測(cè)試過(guò)程中我們發(fā)現(xiàn),搖晃的次數(shù)和對(duì)應(yīng)的二進(jìn)制數(shù)值均能正常顯示,二進(jìn)制前面的0b的意思是在程序中數(shù)字的表示形式是二進(jìn)制。但是ASCⅡ?qū)?yīng)的字符有時(shí)顯示,有時(shí)不會(huì)顯示。通過(guò)查閱ASCⅡ編碼表格發(fā)現(xiàn),在128個(gè)字符中0~32字符是控制字符,所以在屏幕上是顯示不出來(lái)的。
3.項(xiàng)目改進(jìn)
為了避免出現(xiàn)不顯示幸運(yùn)符的尷尬,將搖晃次數(shù)小于33的情況單獨(dú)列出,此時(shí)顯示為“功力不夠,繼續(xù)努力”;當(dāng)搖晃次數(shù)介于33和127之間時(shí)按照上面的預(yù)設(shè)正常顯示;當(dāng)搖晃次大于127時(shí)顯示“用力過(guò)猛,請(qǐng)重新開始”(如圖6)。
通過(guò)研究模擬鍵盤輸入字母實(shí)驗(yàn)的研究,學(xué)生了解了計(jì)算機(jī)編碼的基本過(guò)程,掌握了鍵盤輸入的工作原理,揭開了計(jì)算機(jī)工作過(guò)程的神秘面紗。實(shí)驗(yàn)中使用掌控板僅能模擬六個(gè)鍵,而且沒(méi)有設(shè)計(jì)連續(xù)字符輸入的模擬,這也是留給學(xué)生去探索的方向。