電子時鐘的設計與實現

2023-01-15 12:42:04 字數 4387 閱讀 9123

課程設計

課程設計任務書

學生姓名: 甘偉良專業班級: 電氣工程及其自動化

指導教師: 陳靜教授工作單位: 自動化學院

題目: 打字計時練習程式設計

要求完成的主要任務:(包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求)

1.用組合語言編寫乙個打字計時練習的程式,在緩衝區中預放一些字母,執行時,可按照螢幕上顯示的字母輸入練習;

2.按某個鍵開始練習,每輸入完一行按回車鍵後,可顯示出練習的時間及正確率;

3.撰寫課程設計說明書。內容包括:摘要、目錄、正文、參考文獻、附錄(程式清單)。

正文部分包括:設計任務及要求、方案比較及論證、軟體設計說明(軟體思想,流程,源程式設計及說明等)、程式除錯說明和結果分析、課程設計收穫及心得體會。

時間安排:

12月 26 日----- 12月 28 日查閱資料及方案設計

12月 29 日----- 1 月 2 日程式設計

1 月 3 日----- 1 月 7日除錯程式

1 月 8 日----- 1 月 9 日撰寫課程設計報告

指導教師簽名年月日

系主任(或責任教師)簽名年月日

目錄摘要 1

1 任務目的 2

2 設計過程 2

2.1 方案比較與認證 2

2.2 程式設計思想 2

2.3 主程式流程圖 3

2.4時間計算流程圖 5

2.5正確率計算流程圖 5

3 除錯過程及結果 7

3.1 除錯過程出現的問題及解決 7

3.2 程式執行結果 8

4心得體會 10

參考文獻 11

附錄 12

本科生課程設計成績評定表

摘要 微機原理及接**術是計算機和自動化電氣等專業重要的基礎專業課程之一,不但有較高的理論水平,而且還要求能夠將理論應用於實踐,提高動手能力。

本次課程設計的主要目的是提高實踐能力,包括機器語言的使用,與8086配套的晶元的埠程式設計手段,rom及bios所能提供的內部程式的功能和呼叫方法,以及中斷處理程式和裝置驅動程式的設計方法。

本程式是乙個在鍵盤上練習打字並能統計時間的程式,在緩衝區中預放了一些字母,執行時,可按照螢幕上顯示的字母輸入練習,每輸入完一行按回車鍵後,可顯示出練習輸入的時間。通過它練習英文打字練習,並能夠統計時間。程式執行時,使用自編的中斷向量處理程式。

關鍵詞:微機原理機器語言打字計時程式

1 任務目的

用組合語言編寫乙個打字計時練習的程式,在緩衝區中預放一些字母,執行時,可按照螢幕上顯示的字母輸入練習;按某個鍵開始練習,每輸入完一行按回車鍵後,可顯示出練習的時間及正確率;

2 設計過程

本次設計任務的完成主要有兩種設計方案可供選擇完成:

一是在資料段中預先存放一字串,在程式執行時直接按順序提取這一字串,在輸入過程中無時間顯示,只有當輸入完了按回車後才能顯示練習所用的時間;

二是在緩衝區中預先存放字串後,再在程式執行時隨機提取字母進行顯示在練習的過程中始終有時間顯示,即顯示系統時間。

第一種方法顯示的始終是同一組字串,對於練習來說過於單一,對練習打字得不到很好的效果。第二種方法在顯示時是在緩衝區預存的字串中隨機選取,因此具有隨機性能夠很好的起到練習的效果,且第二種方法中一直有時間顯示,整體效果會更好,但同時程式更為複雜。為了實現「在緩衝區中預放一些字母」這一功能,採用了第二種方法。

主程式一開始先隨機選取一定長度的字元竄到緩衝區中,作為將要輸出練習打字的材料,這些隨機選入的字元為26個區分大小寫的英文本母和十個阿拉伯數字。接著程式輸出一系列在資料段已經設定好的各種提公升語,然後主程式執行輸出開始時緩衝區所選好的練習字元竄材料,這可以利用螢幕顯示中斷並配合一些指令來完成。當螢幕上顯示完所練習後的打字材料後,主程式通知子程式開始計時,而與此同時主程式開始記錄練習者輸入的字元。

每當輸入乙個字元時主程式都要判斷所輸入的字元是否正確,改變輸入的總字元數,記錄輸入的正確的字元數並計算顯示正確率,同時主程式還要控制打字練習所用時間的記錄和顯示,顯示的形式是小時:分鐘:秒。

在每輸入乙個字元時,主程式還應該控制各個子程式執行改變顏色的任務,顏色的改變規則為:每當輸入的字元為正確的時候字元顯示黑色,當檢測到字元為錯時,字元變為紅色,背景也發生變化以示區別。而原練習字串也要隨著打字的進度改變而變化。

不僅如此,主程式還應該時刻檢測輸入的字元是否為回車、backspace鍵,以通知各子程式的執行。

程式設定每一行最大輸入的字元數為51個,當滿行是滿行標誌位會有零變為一從而使得換行。當主程式檢測到表示退出程式的訊號q時則退出程式,而輸入的字元已經滿時也會退出程式。退出時主程式會控制一子程式在顯示屏上顯示出這次打字練習的基本情況,主要引數包括:

所用的總時間、所練習的字數和正確率。之後在按照螢幕的提示:按任意鍵退出即可退出程式。

本次主程式中主要用了兩種中斷型別、dos掉用、bios呼叫、巨集定義及呼叫及子程式呼叫。

主程式的流程圖如圖2-1所示:

說明:首先定義堆疊段,資料段,**段等,初始化。顯示提示資訊提示打字練字的規則,說明如何開始,如何退出等。

顯示出字串後,開始讀取系統時間並儲存。然後輸入字串存到指定的緩衝區。輸入結束後,再次讀取系統時間,並由兩次所讀取的時間計算出輸入字串所用的時間並顯示。

呼叫正確率計算函式,並顯示在螢幕上。看輸入字串對應位正確的個數是不是十個,如果是十個,則繼續往下,看輸入的是不是退出鍵1,如果是,則退出。如果不是,則繼續下一串字元的練習。

如果輸入正確的個數不是十個,則返回繼續該字串的練習,指導最後輸入的正確個數是十個。

圖2-1 主程式流程圖

計算時間的流程圖如圖2-2所示:

說明:第一次讀取系統時間後,分和秒分別存在了second和minutes裡,第二次讀取系統時間後,比較dh裡的內容和second裡的內容,比較結果是second裡的內容比較小,則不用向分借位,直接進行減法運算,並把計算結果轉換成ascii碼並在螢幕上顯示。如果比較的結果是second裡的內容是比較大,則進行減法運算時,要向分借位,所以,將dh暫存器的內容加上60,再與second裡的內容進行減法運算,最後把運算結果轉化成ascii碼,並顯示在螢幕上。

圖2-2 時間計算流程圖

正確率顯示函式的流程圖如圖2-3所示:

圖2-3 正確率計算流程圖

說明:呼叫爭取率判斷子程式,首先保護現場,bx指向字串address[si]首位址,bx+2,指向第乙個要顯示的字母,di指向輸入緩衝區的首位址,cx暫存器存入十,控制迴圈次數。比較[bx]he [di]裡的內容,即判斷顯示的和輸入的字母是否相同。

如果相同,計數暫存器al內容則加一,bx加一,di加一,繼續下次比較,直到十次迴圈結束。如果不相同,則計數暫存器al內容不變,bx加一,di加一,繼續下一次迴圈,知道十次迴圈結束。當十次迴圈結束後,即字串輸入結束後,暫存器al裡的內容就是輸入正確的個數,al高四位是輸入正確數的十位,低四位是輸入正確數的個位,將十位和個位分別轉化成ascii碼,並將其存入字串中,呼叫dos的9號功能輸出字串,輸出的就是螢幕顯示的字串和輸入的十位字串對應位相同的個數,然後恢復現場。

每呼叫一次正確率判斷函式,si加二,即第一次呼叫該子程式螢幕上顯示的是第一組字串,第二次呼叫,當si大於5時,就退出程式。

編完程式後一開始不可以生成可執行檔案,源程式中有不少這樣那樣的問題,現將幾個主要的問題及解決過程列在下面。

首先,不能生產exe檔案的最主要問題之一就是源程式中有不少語法錯誤,這些錯誤有:一些變數未定義、字元的錯誤使用、語句寫得不完整及注釋的格式不對等等,這些錯誤是很難避免的,而且尋找它們時也比較麻煩,但改正它們相對來說較為容易。

接著,當語法上的一些錯誤改正之後便可以生存執行檔案,程式可以執行且有結果了,但一開始結果並沒有像設想的那樣。第乙個錯誤情況是一開始的輸出練習材料字元,這些字元並沒有像設想的那樣是大小寫英文本母和阿拉伯數字,除了這些之外還有其他好多字元,除此之外出現的字元也並不是隨機形式的,可以說是順序出現的。慢慢地改正主程式中開始產生隨機字元部分的源程式發現,之所以會出現好多亂碼是因為一開始呼叫輸出的暫存器弄錯了,也就是呼叫輸出來的字元是在另一處暫存器中存放著的;而沒有以隨機形式出現字元的原因是程式編寫得沒有符合當初的原理,在這裡隨機取字元的原理是利用通過呼叫中斷(ah=2ch,int 10)取系統時間的1/100 來得到一組隨機數,把這些隨機數當做指標,然後取指標對應的字元表中相應的字元來得到一串字元,而編寫的程式並沒有像這樣來。

然後,出現另乙個現象就是各種提示語的出現位置出現了異常,有幾條提示語相互重疊在一起了。提示語的顯示原理是:先取得游標的位置,再在該位置輸出提示語。

而這裡之所以是幾條提示語會重疊是因為幾個游標的位置沒設定好,經檢發現主要是設定形成的行數不夠用,改正過後發現提示語恢復正常。

此外,還有一些其他的小問題比如:輸入的滿行數不對,輸出的顏色不對,正確率的計算不對及沒有按條件退出打字等,這些問題大部分都是計算引數不正確所引起的,因此發現它們較容易而且改正起來也較為簡單。最後,程式執行的結果終於跟預想的一樣,可以用來測試打字的速度了。

電子時鐘課程設計

微控制器實訓 課題電子時鐘 班級 11電氣本 1班 學號 4110211140 姓名陳後亥 指導教師葉文通 日期 2013.12.30 2014.1.3 摘要 隨著時代的進步,越來越多的電子廠品趨向於低成本,高效能,耐用性好的方向發展。特別是趨向於自動化控制的方向走。89c51作為控制晶元是最好不過...

數電電子時鐘設計報告

電子技術課程設計 數字電子時鐘 學院 計算機學院 專業 電子資訊科學技術 成員 姚俊 2012142219 曹勤2012142216 指導教師 陳明 設計乙個能校準時 分的數字電子時鐘,要求 1 時鐘的 時 分 秒 要求各用兩位顯示 2 顯示採用六隻led數碼管分別顯示時分秒 3 時間的小時 分鐘可...

多功能電子時鐘

基於虛擬儀器技術的多功能電子時鐘設計 設計題目 多功能電子時鐘 班級學號 姓名指導教師 摘要本次設計是基於labview來設計乙個多功能電子時鐘,這個電子時鐘具有計時 定時以及簡單計算的功能。本次設計運用事件結構 條件結構 順序結構以及層疊式順序結構等實現具體的多功能電子時鐘。關鍵詞 虛擬儀器 la...