彭民德:《電子計算60年》(28 )輸入裝置的發展與運用
在電子計算曆史個人機年代,微電子技術快速發展,這是推動電子計算技術發展的基本動力。像摩爾定律描述的那樣,計算晶片每18個月整合度提高一倍,價格則減少一半,這不但推動主機系統快速發展,跟PC配套的輸入/輸出裝置也同步地快速發展和完善。這對於電子計算的普及以極大推動。在我們回顧PC階段計算技術發展的時候,接下來的幾個小節,讓我們簡要涉及幾種常用的外部裝置,包括鍵盤、印表機與外部移動儲存技術的發展歷程,這些裝置都在這個階段從技術上成熟起來。這個階段也完成了計算機漢化,使我們從螢幕上看到了電子計算的中文化。
電子計算必須要有輸入裝置支援,以輸入必要的程式和資料,輸入裝置是馮•諾依曼體系計算機五大部件之一。
在計算機佔滿一整個實驗室的年代,主要的輸入裝置是光電式的紙帶輸入機和讀卡機。所讀的穿孔紙帶和穿孔卡片,要用專門的“紙帶穿孔機”和“卡片穿孔機”來穿出。同時還有一臺很像普通打字機的電傳打字機作為輸入裝置,只供機房管理員發一些除錯命令。
上個世紀80年代初第三代機上,有了鍵盤。在VAX-11/785等多使用者機器上,都採用鍵盤為輸入裝置。1984年的DUAL 68000多使用者微機,配置湖南計算機廠生產的圖形終端(鍵盤+顯示器)。
有了鍵盤後,計算機標準化機構後來把鍵盤作為計算機的標準輸入裝置,顯示器作為標準輸出裝置(國際標準化組織釋出,潘愛民譯:《計算機環境的可移植作業系統介面POSIX.1[M]》4版 電子工業出版社,2007)。以後鍵盤也是PC機的一部分,它跟螢幕是電腦上讓人感到最貼近的部分。即使後來有了滑鼠,鍵盤的重要地位也一直延續著。
有了鍵盤,人們跟電腦打交道方便多了。可以通過鍵盤向電腦發命令,跟電腦對話。可以經過鍵盤輸入資料、文件、源程式等等。也可以經由鍵盤打斷電腦正在做的事。到了PC階段,隨著技術公開,對鍵盤工作有了基本的瞭解和開發運用的可能性。
電腦鍵盤從英文打字機鍵盤演變而來,其前身叫做“電傳打字機”,因其鍵位佈局使得QWERTY相鄰,也有稱之為QWERTY鍵盤的。電傳打字機曾經是電腦主要的互動式輸入裝置,上個世紀六、七十年代曾使用55型和5Z3型電傳打字機。電傳打字機的鍵盤沒有今天電腦鍵盤那麼多按鍵和那麼多功能,5Z3型電傳打字機只有44鍵,包括數字0到9,只有大寫的26個英文字母,加減乘除算術運算子號,字母數字轉換,回車,換行等鍵。鍵位佈局也跟今天鍵盤的基本部分一樣。只是沒有功能鍵、控制鍵、移動、翻頁等後來才有的鍵。70年代中期以後,隨著顯示器設計的成熟,電傳打字機逐漸退出了電腦世界,而與顯示器配套使用的鍵盤則成了獨立的一種輸入裝置。在計算機的多使用者時期,把鍵盤和顯示器合稱為終端,每個使用者只要擁有一臺終端,與主機方進行多路相連,在作業系統軟體的協助下,就可以分時地獨佔主機。以股票“湘計算機”上市的湖南計算機廠,曾經以生產終端為自己的主打產品。
早期的鍵盤幾乎都是機械觸點式鍵盤,這種鍵盤使用電觸點接觸作為連通標誌,使用機械金屬彈簧作為彈力機構。鍵盤的手感硬,按鍵行程長,按鍵阻力變化快捷清脆,手感很接近打字機鍵盤,所以在當時很受歡迎。
但是,機械觸點式鍵盤最大的缺點是機械彈簧很容易損壞,而且電觸點會在長時間使用後氧化,導致按鍵失靈。所以在90年代以後,機械觸點式鍵盤就逐漸退出了歷史舞臺。取而代之的是電磁機械式鍵盤,它將電觸點封閉在一個微型電位器裡,在按鍵下部則放置一個磁鐵,通過磁力來接通電流。電磁機械式鍵盤的使用壽命增加了,但是仍然沒能解決機械運動部分容易損壞的問題,所以電磁機械式鍵盤沒能在市場上生存多久,很快就被非接觸式鍵盤取代了。
與“接觸式鍵盤”不同的是,非接觸式鍵盤並不是依靠導電觸點的機械式連通來獲得按鍵訊號,而是依靠按鍵本身的電引數變化來獲得按鍵訊號。由於不需要觸點的機械接觸,所以它的使用壽命長得多,按鍵的手感變得輕柔而富於韌性。這種手感一直延續到今天,成為目前鍵盤的主流設計手感。
鍵盤的鍵數鍵位設計沿用了機械式鍵盤的傳統習慣,考慮到人們打字的坐姿,手指擊鍵的方便,使得能夠儘量提高打字速度。為了照顧既有習慣,現在的鍵盤仍然沿用以往打字機的鍵位佈局。從最早的IBM PC 83鍵鍵盤到後來的101鍵,及至當今主流的107鍵鍵盤,已經更新了幾代,但總體上並沒有根本性的變化。雖然其中有一些其它設計,但從市場反應來看是不成功的。隨著計算機技術的發展要求,曾經陸續增加過幾個特殊的鍵位,比如,為UNIX系統需要一組“元字元”,增加了反引號(單反引號)、“%”、“&”等鍵,後來為windows系統增加了“windows鍵”,但這都只是個例。由此可見,目前鍵盤的鍵數鍵位設計經過了多年的實踐檢驗,已經是非常成熟的設計。
上個世紀70年代我國著手計算機漢化時,曾經有人採用過漢字大鍵盤,把常用的近千個漢字直接地逐個標於鍵盤。這種大鍵盤很直觀,要輸入什麼漢字直接在眼前找就行了。可是跟人們用機習慣不一致,難以記憶鍵位,很難推廣。後來所有的漢化方案,包括王永民的五筆字型,都採用原來的英文鍵盤。現在手機上字母數字鍵位的佈局,不同型號的手機也是一致的。從這裡可以看到習慣的力量和標準化的必要性。
鍵盤作為計算機的一臺外設,有接收和處理按鍵資訊的晶片,可以獨立於主機工作。在主機工作的同時,人們可以按照自己的意願和速度敲任一個鍵。只要做必要的設定,人們對鍵盤的任何一次按鍵操作,都會產生相應的訊號並以中斷方式傳送給主機。主機方只要對鍵盤來的訊號按各種不同的方法加以解釋, 便可用軟體方法定義任何字鍵的意義。我們曾經寫過向終端輸送某一個“ESC控制序列”的程式,執行之後,你按鍵a,它不顯示a,而是顯示b;按鍵b,並不顯示b,而是顯示c。也曾經寫過一個鍵盤管理程式,一旦敲下任意字母、數字鍵,它都能把鍵符從螢幕顯示出來,可以區分大小寫字母,可以處理空格、退格、Enter鍵。它比當時作業系統繫結的鍵盤管理程式功能雖然要少一些,不解釋小鍵盤和功能鍵等,但確實能夠執行,這樣的程式讓人確信鍵盤是可以程式設計控制的。
雖然鍵盤可以程式設計控制,但是鍵盤功能比較單純,而且作業系統的鍵盤管理程式已經做得很好,因此除非有特殊運用,比如早期的純西文計算機的漢化,都不必畫蛇添足地對鍵盤編寫控制運用程式,對鍵盤的工作原理有所瞭解就可以了。
鍵盤的訊號怎麼產生,又怎樣傳給使用鍵盤輸入的程式呢?鍵盤以中斷方式工作,作業系統的鍵盤管理程式支援人們方便地使用鍵盤。作業系統負責吸收鍵盤輸入字元並以先進先出規則緩衝,隨後應用程式在適當時機從緩衝區把字元取走。作業系統和應用程式之間保持著非同步的通訊聯絡,協同完成鍵盤輸入任務。
鍵盤內部有一個小的微處理器( 如8048), 這是鍵盤的核心部分,它掃描並偵測鍵盤按鍵的狀態變化。此處理器從系統主機板上接收基本電源以及時序脈衝訊號。為了設定鍵盤正常工作,鍵盤管理程式必須分別設定埠8255晶片PB的第 6、7位為 0 與1。在這種情況下,當按下或鬆開任何字鍵時, 鍵盤就會產生一箇中斷訊號,然後它會發出一個“掃描碼”送系統主機並等待應答訊號。掃描碼與按鍵位置相對應,每個鍵都有唯一的掃描碼。對於83鍵鍵盤,掃描碼為 1到 83 之間的數; 對於101鍵鍵盤,掃描碼為 1到 101 之間的數。不同鍵數的鍵盤,雖然鍵位佈局可能不同,但同一種鍵的掃描碼是相同的。
主機方鍵盤管理軟體的責任是偵測鍵盤中斷並作如下反應: 首先, 從8255的埠PA讀取掃描碼, 然後馬上置埠PB第 7位為 1, 以回送應答訊號給鍵盤。
操作員按鍵是隨機的,即鍵盤中斷的發生和正在 CPU上執行的程式是非同步的。也就是說敲鍵可以在任何時侯發生,與何時主程式希望接受鍵盤輸入無關。因此鍵盤中斷處理程式必須先把所接收到的鍵盤輸入緩衝或儲存起來。為此通常採用一種先進先出迴圈佇列, 先將從鍵盤接收到的掃描碼轉換成適當的ASCII碼後, 再放到這個佇列上。當需要接收字元的主程式(比如文件編輯word)想要取鍵盤輸入時, 便呼叫一個常規例程,將這些ASCII碼子,按接收次序從佇列上取出來。佇列的大小決定了任何時刻所能緩衝字元的最大值, 它代表了操作員能夠超前主程式的最大按鍵次數。由於電子處理速度快和佇列管理的有效性,通常情況下,敲鍵再快都會被收下,不會有受到怠慢的感覺。
鍵盤管理程式還有一項基本操作,那就是管理鍵盤中斷。負責下達命令給中斷控制晶片8259和外圍介面控制晶片8255以啟動必要的硬體介面,保證能夠接受鍵盤中斷訊號。在處理一次鍵盤中斷時,又要保留現場,關閉其它中斷以保證對本次中斷處理的完整性。一次中斷處理完成後再開中斷,恢復現場,準備處理下一次按鍵中斷。
鍵盤管理程式是電腦裡使用最多的程式之一,它與顯示器等其它基本外設的管理程式一起被固化在ROM中。每次開機後就處於執行狀態。它隨時監視著鍵盤,忠實地為用機人服務。有了鍵盤管理程式的有效管理,無論你按了什麼鍵,它都會做出反映,與鍵盤上的晶片協同,無遺漏且不重複地把相應的按鍵資訊收集下來,並把資訊存入公共緩衝區,提供給需要鍵盤按鍵的程式去做處理。通常也把按鍵資訊顯示在螢幕上讓你看見,以便確認剛才的按鍵正是你所需要的操作。
對於電子計算的專業人士,搞清楚鍵盤的工作過程,從而旁及其它外設,是一件有趣的事。
(與本文相關的更多內容,可參看 彭民德《電子計算60年》第5章 個人計算靈活方便 電子工業出版社)
相關文章
- 電子計算60年 (彭民德著)
- 彭民德:《電子計算60年》(18)UNIX原始碼的一些運用原始碼
- 彭民德:《電子計算60年》 (37)跨入雲端計算時代
- 彭民德:《電子計算60年》(12)ALGOL 60與程式自動化Go
- 彭民德:《電子計算60年》(34) 863城市供水排程計算
- 彭民德:《電子計算60年》 (25)可愛又可恨的BASICA
- 彭民德:《電子計算60年》 (16) UNIX強勢走來
- 彭民德(42) 電子計算大眾化,人人都有計算祕書如影隨形
- 彭民德:《電子計算60年》(29)電腦漢化、文件編輯與鐳射照排
- 彭民德:《電子計算60年》 (31)計算機網路與第四代計算機計算機網路
- 彭民德:《電子計算60年》 (33)網路計算極大地提升了計算能力
- 彭民德:《電子計算60年》 (23)駕馭PC,應用開發百花齊放
- 彭民德:《電子計算60年》 (27) 多種媒體形式擴充套件電子計算內涵套件
- 彭民德:《電子計算60年》(4) 從學習蘇聯電子管計算機開始計算機
- 彭民德:《電子計算60年》(32) 網路數字資訊的特點
- 彭民德:《電子計算60年》 (26) Windows 主導圖形化PCWindows
- 彭民德:《電子計算60年》(6)我國首臺電子數字計算機104機計算機
- 彭民德:《電子計算60年》(15) 作業系統造就計算機活的靈魂作業系統計算機
- 彭民德:《電子計算60年》(7)DJS 21機的結構和用機環境JS
- 彭民德:《電子計算60年》(9)空空導彈彈道和脫靶量計算
- 彭民德:《電子計算60年》 (3)學習計算數學跟未來結緣
- 彭民德:《電子計算60年》 (2)數學的嚴密推理和美的薰陶
- 彭民德(43)智慧計算成果斐然
- 彭民德:《電子計算60年》(35)網際網路時代的製造型企業
- 彭民德:《電子計算60年》(8)DJS 21機的資料、指令和程式JS
- 彭民德:《電子計算60年》(30) 在列印技術發展長河中,16針印表機未能曇花一現
- 彭民德:《電子計算60年》 (22) IBM PC如潮水般湧來IBM
- 彭民德:《電子計算60年》(21) 全國第一屆C語言交流會C語言
- 彭民德:《電子計算60年》 (20) UNIX一本經典著作的生命力
- 彭民德:《電子計算60年》 (19) UNIX核心反彙編程式碼有啃頭
- 彭民德:《電子計算60年》 (13) 程式語言曾被人無端稱作計算機語言計算機
- 彭民德:《電子計算60年》(5)用手搖計算機做三峽大壩下不穩定流計算計算機
- 彭民德:《電子計算60年》 (14) 以IBM 360為代表的多使用者計算機系統IBM計算機
- 彭民德:《電子計算60年》(17)分析UNIX原始碼揭去作業系統神祕感原始碼作業系統
- 彭民德:《電子計算60年》 (36) 從面向硬體的控制檯操作到瀏覽器人機介面瀏覽器
- 彭民德:《電子計算60年》(24)PC與微控制器聯合控制的水文流速儀實時檢定系統
- 彭民德:《電子計算60年》(10)對付U-2偵察機的15號及317任務
- 彭民德:(40)基於移動計算的物聯網共享單車