專利名稱:學(xué)生計(jì)算器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到一種學(xué)生計(jì)算器,具體地講,涉及到一種能夠在顯示器上顯示修改十進(jìn)制豎式運(yùn)算的每一步過程的學(xué)生計(jì)算器,普通計(jì)算器因其計(jì)算快速準(zhǔn)確而迅速普及,許多中小學(xué)生都有,由于只能直接顯示最終結(jié)果,而無中間運(yùn)算過程,長期使用,對學(xué)生運(yùn)算能力的提高,智力的開發(fā)十分不利,所以中外有識之士都不主張中小學(xué)生使用計(jì)算器,但計(jì)算器是如此普及,以至于單純的禁止顯得十分無力。
本發(fā)明的學(xué)生計(jì)算器,用鍵盤-屏顯方式手動在屏幕上逐位作十進(jìn)制豎式運(yùn)算,通過自動計(jì)算和逐位檢驗(yàn)程序校對,修改每位結(jié)果,能進(jìn)行多位整數(shù)和小數(shù)的加減乘除開方五種運(yùn)算,并可設(shè)置自動出題和小測驗(yàn)程序,自動出題和進(jìn)行小測驗(yàn),適于中小學(xué)生使用,利于學(xué)生運(yùn)算能力的提高,益于學(xué)生智力的開發(fā)。
本發(fā)明的學(xué)生計(jì)算器,可以由單片機(jī),顯示器和鍵盤組成,其特征是1.通過"基準(zhǔn)列"和相關(guān)尋位程序,三種不同的數(shù)據(jù)輸入方式,確保顯示屏上的數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)一一對應(yīng),并符合豎式要求,實(shí)現(xiàn)鍵盤-屏顯手動十進(jìn)制豎式運(yùn)算;設(shè)置加減乘三種單位BCD碼運(yùn)算程序,以其為基礎(chǔ),與其它程序組成加減乘除開方五種多位數(shù)自動逐位運(yùn)算程序,提供正確答案;兩種校對程序逐位比較手動計(jì)算,自動計(jì)算兩種結(jié)果的每一位,指示錯誤位置,給以修改機(jī)會,修改數(shù)次仍不對后,給出正確答案。
2.用單片機(jī)的計(jì)數(shù)器(兩個以上)作不同步運(yùn)行,加上循環(huán)修正量,構(gòu)成單位整數(shù)隨機(jī)數(shù)程序,用"模式存儲器"和"難度存儲器"配合,決定數(shù)的位數(shù)和個數(shù),實(shí)現(xiàn)自動出題,自動出題,計(jì)算,檢驗(yàn)(不包括修改),加上判分程序的連接運(yùn)行,可以實(shí)現(xiàn)"小測驗(yàn)"功能。
3. 8051系列單片機(jī)和128*64點(diǎn)陣液晶圖形顯示器加24鍵鍵盤可以構(gòu)成一個實(shí)用學(xué)生計(jì)算器,其中為圖形顯示器專門設(shè)置了5*5點(diǎn)陣專用字符發(fā)生程序和光標(biāo)發(fā)生程序。
下面詳細(xì)說明該學(xué)生計(jì)算器的具體設(shè)計(jì)方法要編制以上程序,需要先解決一系列基礎(chǔ)程序,下面一一介紹一.數(shù)據(jù)的存取與傳送本方案中,數(shù)據(jù)的存取與傳送都用BCD碼,鍵盤直接送出BCD碼,顯示器的譯碼程序用BCD碼輸入,內(nèi)存存放數(shù)據(jù)形式也釆用BCD碼(即四位存一位十進(jìn)制數(shù)據(jù))。
在本方案中,每位數(shù)據(jù)逐位調(diào)用,須知道其屬于哪個數(shù)?第幾位?存在什么地方?故釆用了"數(shù)號存儲器""信息存儲器""數(shù)據(jù)存儲器"三層方案。"數(shù)號存儲器"內(nèi)存放數(shù)據(jù)序號;"值息存儲器"存放數(shù)據(jù)存儲器首址,數(shù)的位數(shù)和小數(shù)位數(shù);"數(shù)據(jù)存儲器"內(nèi)存放各位數(shù)據(jù)值。
"信息存儲器"的地址=數(shù)號*參量+"信息存儲器"首址(參量是指每個數(shù)的信息存儲器所占字節(jié)數(shù))(A)某位數(shù)的地址=數(shù)據(jù)存儲器首址+位數(shù)/每個字節(jié)放的位數(shù)(余數(shù)表示該位數(shù)在字節(jié)中的位置)(B)在這里,"數(shù)號存儲器"是專用存儲器,"信息存儲器"和"數(shù)據(jù)存儲器"可以是指定區(qū)域。
BCD碼僅占4位,在8位以上的單片機(jī)中,如存儲器比較富裕,可用一個字節(jié)存放一位數(shù)的辦法;如存儲器有限,則一個字節(jié)存兩位(或多位)數(shù),通過專門的存取程序存取,取程序按公式B計(jì)算地址,按公式B的余數(shù)確定所取數(shù)在字節(jié)中的地方,決定是取高四位,還是低四位,存程序在分清了高低四位后,把字節(jié)中數(shù)據(jù)取出,清除要送四位的值,和欲存的數(shù)據(jù)相加后送回原字節(jié)。
二.顯示與內(nèi)存的對應(yīng)這是實(shí)現(xiàn)十進(jìn)制豎式運(yùn)算的要點(diǎn)。
本方案中釆用了以下措施1.符合豎式要求的數(shù)據(jù)輸入方法數(shù)據(jù)連續(xù)輸入,每個數(shù)的各位無間斷輸入,以確保屏幕上的每位數(shù)和內(nèi)存中的位數(shù)相對應(yīng),為此,特設(shè)了專用"輸入方式存儲器",在上下左右移動程序中設(shè)置了條件,使在數(shù)據(jù)輸入期間,移動鍵無效。
豎式運(yùn)算中,各個數(shù)的寫入方式并不相同,如原始數(shù)據(jù),在屏幕上是由左至右,數(shù)位上是由高至低,位數(shù)不可預(yù)知;和,差,分積,積等,在屏幕上是由右至左,數(shù)位上是由低至高;商,根等在屏幕上是由高至低,數(shù)位上是由高至低,但可以預(yù)知其位數(shù)。
對于這三種不同的寫入方式,本方案提供了三種數(shù)據(jù)輸入程序;原始數(shù)據(jù)的輸入,屏顯上光標(biāo)依次右移,內(nèi)存中先把輸入的高位數(shù)送入數(shù)據(jù)存儲器的第一位;輸入次高位時,從內(nèi)存第一位中取出已有入的高位數(shù),存入次高位,再把取出的高位送入內(nèi)存的第二位(即用次高位數(shù)把高位數(shù)頂入上一位);第三個數(shù)輸入把次高位數(shù)上頂,次高位數(shù)再把高位數(shù)上頂,如此逐位送入數(shù)據(jù)(如下圖),每送一位,給"信息存儲器"中的位數(shù)加1;按小數(shù)點(diǎn)后,再每送一位,給位數(shù)和小數(shù)位數(shù)同時加1.按運(yùn)算符鍵或回車鍵,結(jié)束送數(shù),(第一種輸入方式) 和數(shù)等的輸入,屏顯上光標(biāo)依次左移,根據(jù)位數(shù)(每次加1)計(jì)算存儲器地址,把數(shù)值送入指定內(nèi)存,每送一位,給信息存儲器中的位數(shù)加1;按小數(shù)點(diǎn)鍵時,把位數(shù)中的數(shù)值送入(復(fù)制)小數(shù)位,再輸入數(shù),只加1位數(shù),不再增加小數(shù)位,結(jié)束同上,(第二種輸入方式)商數(shù)等的輸入,屏顯上光標(biāo)位置,每次通過"基準(zhǔn)列""基準(zhǔn)行"(后面介紹)計(jì)算,內(nèi)存的地址通過運(yùn)算次數(shù),商的高位值,數(shù)號計(jì)算(其中位數(shù)=高位值+1-運(yùn)算次數(shù)),第一個商值即商的最高位,其位數(shù)值送入"信息存儲器"的位數(shù)部分即完成位數(shù)的存入,小數(shù)位待所有商值輸入完畢后處理;先移動光標(biāo)至小數(shù)位,按下小數(shù)點(diǎn)鍵,程序計(jì)算光標(biāo)和基準(zhǔn)列的差值,就是小數(shù)位,把此值送入"信息存儲器"的小數(shù)位數(shù)部分即可,(第三種輸入方式)2.基準(zhǔn)行與基準(zhǔn)列為保證屏顯和內(nèi)存的對應(yīng),更為保證屏顯的數(shù)據(jù)符合豎式運(yùn)算法則的要求,本方案引入了"基準(zhǔn)列"和"基準(zhǔn)行"的概念及計(jì)算方法,"基準(zhǔn)行",在加減乘中沒什么作用,在除法和開方中離不了,本方案定義被除數(shù)或開方數(shù)所在行為基準(zhǔn)行,無需計(jì)算,其值存在"基準(zhǔn)行存儲器"中。
"基準(zhǔn)列"在不同的運(yùn)算中定義不一樣,運(yùn)算法則要求;加減法中必須個位與個位,十位與十位...一一對應(yīng);乘法中則是最后一位對齊,所以在加減法中定義個位位置為基準(zhǔn)列,乘法中定義尾數(shù)位置為基準(zhǔn)列;除法和開方是由一系列的乘法和減法組成的,故其運(yùn)算過程的基準(zhǔn)列則不固定,隨每步運(yùn)算的種類而定。
3.自動尋位和半自動尋位在豎式運(yùn)算中每個數(shù)的起始位置看似無規(guī)律,實(shí)際上都和前面數(shù)的位數(shù)和基準(zhǔn)列緊密相聯(lián),都可以通過簡單的計(jì)算算出;個別數(shù),如第二加數(shù),減數(shù),乘數(shù),除數(shù),商和根,由于不能預(yù)知其準(zhǔn)確位數(shù),不能準(zhǔn)確定位,但也可以找出其大概位置,再允許左右移動鍵有效便可準(zhǔn)確定位,前者為自動尋位,后者為半自動尋位。
尋位計(jì)算均是通過基準(zhǔn)列和前數(shù)的位數(shù),有些地方還需要基準(zhǔn)行參與,一般原則是;計(jì)算高位時,取(基準(zhǔn)列-位數(shù))值;計(jì)算低位直接取基準(zhǔn)列值,有了基準(zhǔn)列,基準(zhǔn)行和數(shù)據(jù)輸入方式存儲器及各個輸入方式,就可以隨時計(jì)算屏顯上的某數(shù)在內(nèi)存中的地方,或內(nèi)存中的某數(shù)在屏幕上的位置,尋位程序可以幫助使用者很方便地按豎式格式要求準(zhǔn)確輸入數(shù)據(jù),并確保屏顯和內(nèi)存一一對應(yīng)。
三.單位十進(jìn)制(BCD碼)運(yùn)算這是逐位十進(jìn)制運(yùn)算的基礎(chǔ),單位十進(jìn)制運(yùn)算只有加減乘三種,道理不言自明。
單位加法運(yùn)算程序這樣編制兩數(shù)相加,再加下進(jìn)位,結(jié)果除10(或用單片機(jī)的二十進(jìn)制調(diào)正功能),商為上進(jìn)位,余數(shù)為原位,分存兩個存儲器備用。
單位乘法程序是兩數(shù)相乘,結(jié)果除10,商為進(jìn)位數(shù),余數(shù)為原位,分存?zhèn)溆谩?br>
單位減法程序稍繁瑣被減數(shù)減去減數(shù),如需上借位,得數(shù)再減6為差,給借位存儲器送1;如無借位,得數(shù)即差,清零借位存儲器。
有了上述基礎(chǔ)程序就可以編制全部程序了。為清楚起見,分手動計(jì)算,自動檢驗(yàn),自動出題和小測驗(yàn)三部分說明。
一.手動計(jì)算手動計(jì)算實(shí)質(zhì)上是使用者用鍵盤在屏幕上計(jì)算,根據(jù)不同的運(yùn)算方式分加減法,乘法,除法,開方四種。
(一)加減法加法和減法豎式格式相同,故一個程序即可。
未輸入數(shù)據(jù)前,四個移動鍵都處于允許狀態(tài),此時定數(shù)據(jù)輸入方式為第一種,敲下一個數(shù)據(jù)鍵即開始第一個數(shù)的輸入,數(shù)號存儲器加1.運(yùn)算符的輸入,結(jié)束第一個數(shù)的輸入,程序先轉(zhuǎn)入自動尋位,在第二行高位左邊處置顯示運(yùn)算符,再轉(zhuǎn)入半自動尋位,在第二行對應(yīng)高位閃動光標(biāo)。如第二個數(shù)的位數(shù)和第一個數(shù)不同,從光標(biāo)處開始輸入不能保證各位對應(yīng),則可以左右移動光標(biāo),對準(zhǔn)各位,此時輸入第二個數(shù),敲回車后,程序首先比較兩個數(shù)的基準(zhǔn)列,如不同,則不向下進(jìn)行,等待修改;如相同,則進(jìn)入自動尋位,計(jì)算并劃橫線。再次自動尋位,調(diào)光標(biāo)至第三行對應(yīng)最低位,變數(shù)據(jù)輸入方式為第二種。由右至左輸入和(或差),輸入回車,手動計(jì)算結(jié)束,程序自動轉(zhuǎn)入自動檢驗(yàn)程序。 為修改一旦出現(xiàn)的數(shù)據(jù)輸入錯誤,設(shè)清除鍵,在清除鍵下編制有"位清零程序"。該程序的工作與數(shù)據(jù)輸入程序相逆,每按一次,屏幕上退一格(清原格),內(nèi)存中給剛輸入的一位送零;第一種數(shù)據(jù)輸入方式中,是給最高位送0,壓其它數(shù)據(jù)依次下降,把剛輸入的一位壓出數(shù)據(jù)存儲器。該程序不適用第三種數(shù)據(jù)輸入方式(即不適用于商根),也只對正在輸入的數(shù)有效,對已經(jīng)確認(rèn)過的數(shù)無效。
(二)乘法乘法的被乘數(shù)和乘數(shù)的輸入與加法雷同,區(qū)別在基準(zhǔn)列的定義不同,輸入第二個數(shù)時應(yīng)對齊的是尾數(shù)位。
乘法的分積運(yùn)算程序用循環(huán)方式,循環(huán)次數(shù)=乘數(shù)位數(shù)-乘數(shù)中0的個數(shù)。
分積的起點(diǎn)(最低位)值=基準(zhǔn)列值+乘數(shù)某位數(shù)-1。
行數(shù)=第一分積所在行+循環(huán)次數(shù)。每個分積的結(jié)束由目車確認(rèn)。依此編制的程序每當(dāng)某位乘數(shù)為0時,自動中斷下面程序,回到循環(huán)起點(diǎn),左移光標(biāo)一位,開始下一分積的輸入。循環(huán)結(jié)束后,程序轉(zhuǎn)入自動尋位,計(jì)算位置并劃橫線,再進(jìn)入自動尋位,調(diào)光標(biāo)至積的最低位。作加法求積。
積的輸入中,特殊點(diǎn)在于小數(shù)點(diǎn)的輸入是在數(shù)據(jù)全部輸入完后。按豎式運(yùn)算習(xí)慣,乘積作出后,心算兩個乘數(shù)中小數(shù)位數(shù)的和,依此點(diǎn)上小數(shù)點(diǎn)。本方案完全尊重這一習(xí)慣,積的所有位輸入完畢后,敲回車允許左右移動鍵有效。移動光標(biāo)至小數(shù)點(diǎn)位,敲下小數(shù)點(diǎn)鍵即輸入小數(shù)點(diǎn)。這時,程序根據(jù)光標(biāo)和基準(zhǔn)列的位置計(jì)算小數(shù)位數(shù)(小數(shù)位=基準(zhǔn)列-光標(biāo)位),送入"信息存儲器"中的小數(shù)位部分。作整數(shù)乘法時,沒有小數(shù),連敲兩下回車便跳過該段程序。 (三)除法除法中,首先是尋位,調(diào)光標(biāo)至第二行,然后輸入第一個數(shù)。輸入運(yùn)算符后,自動尋位將光標(biāo)跳到同行第一個數(shù)左鄰位上,顯示運(yùn)算符并劃上橫線,再將光標(biāo)調(diào)至運(yùn)算符左鄰位,這是除數(shù)的個位,此時還是第一種數(shù)據(jù)輸入方式,因除數(shù)可能是一位,二位,三位或更多位,故將光標(biāo)調(diào)到個位,允許左右移動鍵有效,使用者自行調(diào)整,(如除數(shù)為兩位,應(yīng)先左移光標(biāo)一位,然后由高至低輸入兩位除數(shù))在除法正式開始前,對于有小數(shù)的除法,還有一個去除除數(shù)中的小數(shù)點(diǎn)過程,程序中考慮到這一點(diǎn),編制了去小數(shù)點(diǎn)程序。對于內(nèi)存,很簡單;首先把除數(shù)信息存儲器中的小數(shù)位取出(暫存某處),裝入0;然后取出被除數(shù)信息存儲器中的小數(shù)位數(shù),從中減去除數(shù)的小數(shù)位數(shù),差重新裝入被除數(shù)信息存儲器,這就完成了內(nèi)存中數(shù)據(jù)去小數(shù)點(diǎn)過程。屏顯上變換小數(shù)點(diǎn)位置的方法很多,本方案用的是"內(nèi)存送顯"的方法先用位清零程序的清屏部分清除屏幕上的被除數(shù),除數(shù),然 后分別找尋被除數(shù),除數(shù)的個位,把調(diào)整過的內(nèi)存中的被除數(shù),除數(shù)逐位取出,送至顯示器對應(yīng)位顯示,從而完成屏顯上去除除數(shù)中的小數(shù)點(diǎn)運(yùn)算。對于整數(shù)除法,這段程序運(yùn)行也不影響運(yùn)算結(jié)果,當(dāng)然通過簡單的條件判斷也可跳過該段程序。
去小數(shù)點(diǎn)后,程序進(jìn)入半自動尋商位,商高位值=基準(zhǔn)列值-(被除數(shù)位值-除數(shù)位值)但如果在預(yù)定位上不夠除,則需向下移動商位,故此時允許左右移動鍵有效,敲入商后,光標(biāo)至第1乘積個位,數(shù)據(jù)輸入方式轉(zhuǎn)第二方式,輸入除數(shù)與本位商的乘積,此時可能會發(fā)現(xiàn)商不合適(圖C-4),如不合適可用位清零程序清除該乘積(圖C-5),再敲入回車,光標(biāo)跳到原商數(shù)下閃動(圖C-6),此時重新輸入新的商值即完成修改,這就是本方案中的試商程序,(該程序略改后便可用于試根)試商成功后,程序進(jìn)入減法,算好差后敲回車轉(zhuǎn)入下調(diào)數(shù),就是把被除數(shù)的下一位調(diào)下來,這里須注意內(nèi)存中從被除數(shù)取出的下調(diào) 位應(yīng)用第一種數(shù)據(jù)輸入方式送入差的低位,進(jìn)行完這一步,敲回車,計(jì)算行數(shù),列數(shù),程序返回,試第二位商,進(jìn)入循環(huán),(這中間的劃線程序和前面類似,略去)(顯示如圖C-7至C-9)循環(huán)中,如遇到不夠除時,商應(yīng)上0,此時,程序通過商位0判斷跳過乘減部分,在差數(shù)后再下調(diào)一位,試下一位商。
跳出循環(huán)的條件是被除數(shù)的位數(shù)剩余數(shù)=0。
除法中還有一個特殊問題;因除法豎式要用較多的行數(shù),而單純增加顯示器的行數(shù)不僅會造成成本上升,而且也不經(jīng)常用。故設(shè)計(jì)了一個"顯示翻轉(zhuǎn)程序",該程序運(yùn)行的接口在循環(huán)中的行數(shù)計(jì)算,條件是剩余行數(shù)小于等于一時,跳入翻轉(zhuǎn)程序。該程序的運(yùn)行首先用行清除指令(每種顯示器都有各自的行清除指令)逐行清除被除數(shù)以下的各行,再用位清零程序逐位清除被除數(shù)中已調(diào)用過的各位,最后用"內(nèi)存送顯程序"把剛輸入最后一個數(shù)(差和下調(diào)數(shù)組成的待除數(shù))送到原被除數(shù)對應(yīng)的位置(見圖C-7,C-8)。整個過程中除數(shù),商,運(yùn)算符,被清除數(shù)的內(nèi)存值和未調(diào)用位(圖C-8的最后一個2),均不改變。全部過程由程序自行完成,無須人工干預(yù)。結(jié)束后返回循環(huán),繼續(xù)往下除。(圖C-9)除法中的最后一個問題是除不盡的除法,作下去無休止。小小的計(jì)算器很難解決。選用大容量內(nèi)存和大屏幕顯示器都要增加成本,對于學(xué)生必要性也不大,故增加一個難度鍵,其下的程序給"難度存儲器"逐次加1,到一定程度返回。除法程序根據(jù)"難度存儲器"的內(nèi)容,選擇是作整數(shù)除法,能除盡的小數(shù)除法,還是除不盡的小數(shù)除法。當(dāng)選擇最后一種時,程序自動把被除數(shù)調(diào)整到某個有限位(例如8位,根據(jù)內(nèi)存和顯示器的大小而定),作到這個有限位,就結(jié)束除法。
(四)開方;開方運(yùn)算中有許多地方類似除法,程序編制和運(yùn)行可以參照或調(diào)用除法中的。特殊的地方有四個1.根的位置和位數(shù)預(yù)留。按運(yùn)算法則,根的位置應(yīng)在整數(shù)的1,3,5,7...位和小數(shù)的2,4,6...位,所以根的最高位置值對于整數(shù)和代整數(shù)的小數(shù),等于整數(shù)位/2后取其整數(shù)值,再加1;對于純小數(shù),個位0即是。預(yù)留的位數(shù),為開方數(shù)的位數(shù)作整數(shù)除法除2的商加余數(shù)。
2.小數(shù)開方時數(shù)據(jù)的調(diào)整。能開盡的小數(shù),其小數(shù)位不是偶數(shù)時應(yīng)補(bǔ)一位0,使其成偶數(shù)。開不盡的數(shù),也得使其小數(shù)位保持偶數(shù)。
3. 20倍數(shù)。開方中,從第二位根開始,在豎式左側(cè)要計(jì)算一個已開出根的20倍數(shù),這是除法沒有的。因此在下調(diào)數(shù)完成后,要加一個20倍數(shù)程序。該程序先用自動尋位把光標(biāo)調(diào)到同行左邊(之前劃一豎線),空一格以上,指示20倍數(shù)的十位。因?yàn)?0倍數(shù)的個位按法則要求應(yīng)空著(留給下一位根),取第二種輸入方法,輸入20倍數(shù)。用此法內(nèi)存中的個位也正好給下一位根留著。
4.試根,開方中的試根和除法類似,區(qū)別在于開方中在向根存 儲器和顯示位送根值后,還要向20倍數(shù)的個位存儲器和顯示位送入根值。(圖0-3)清當(dāng)前根時也是清兩處。但光標(biāo)指示可以只選根位一處,也可以同時指示兩處。
二.檢驗(yàn)程序檢驗(yàn)程序包含加減乘除開方五種自動十進(jìn)制逐位運(yùn)算程序和兩種逐位校對程序,根據(jù)"運(yùn)算方式存儲器"中的數(shù)值選擇如何運(yùn)算。下面分別介紹各程序。
(一)加法自動運(yùn)算。該程序是個雙循環(huán)程序,工作過程如下;計(jì)算一加數(shù)的首址;計(jì)算其一位的地址;取出一位數(shù);計(jì)算和的對應(yīng)位地址;取出一位和;以上兩數(shù)進(jìn)行BCD碼加法;和位返回原先取出的地址,借位暫存;判斷加數(shù)的位數(shù)是否取完,未完返回位地址計(jì)算,計(jì)算下一位地址,繼續(xù)第一重循環(huán),完了,跳出第一重循環(huán),判斷此時進(jìn)位等于零否,不等于,計(jì)算再高一位和址,將借位中的數(shù)據(jù)送入后,向下進(jìn)行。等于零則直接向下進(jìn)行;判斷加數(shù)是否取完,未完返回加數(shù)首址計(jì)算,計(jì)算下一個加數(shù)的首址,繼續(xù)第二重循環(huán)。如取完,跳出循環(huán);存入和的位數(shù),小數(shù)位數(shù),結(jié)束本段程序。用本方案可進(jìn)行兩個以上加數(shù)的加法運(yùn)算(后面的乘法中分積的加法就用這種多個數(shù)加法)(二)減法自動運(yùn)算。該程序是兩個單循環(huán)程序,一個比較程序,一個減法程序。工作過程如下進(jìn)入比較程序;先比較兩數(shù)的位數(shù),如被減數(shù)位數(shù)大于減數(shù),進(jìn)入減法程序;如小于減數(shù),提示重新輸入;如等于減數(shù),則進(jìn)行各位數(shù)比較。數(shù)據(jù)比較由高位開始,循環(huán)進(jìn)行,一旦某位大于減數(shù),跳出循環(huán),進(jìn)行減法運(yùn)算;一旦出現(xiàn)某位小于減數(shù),則提示重新輸入;至最后一位,全部等于,也進(jìn)入減法程序。
減法程序按下述過程進(jìn)行計(jì)算被減數(shù)的首址,暫存;計(jì)算減數(shù)首址,暫存;計(jì)算差的首址,暫存;計(jì)算一位被減數(shù)的位地址;取出一位被減數(shù);計(jì)算對應(yīng)位減數(shù)位地址(如減數(shù)位已取完,則跳至差位計(jì)算);取出一位減數(shù);進(jìn)行單位BCD碼減法,如有下借位,再減一;計(jì)算差的對應(yīng)位地址;差送存;判斷被減數(shù)位數(shù)是否取完;未完跳回被減數(shù)位地址計(jì)算,再循環(huán)。完了則跳出循環(huán);把位數(shù)和小數(shù)位數(shù)送入差的信息存儲器;由高至低依次清除差數(shù)高位上可能出現(xiàn)的0,對應(yīng)遞減差的位數(shù)值;結(jié)束程序。
(三)乘法自動運(yùn)算。該程序由一個乘法雙重循環(huán)程序和一個加法雙重循環(huán)程序組成。其乘法程序工作過程如下計(jì)算被乘數(shù)首址,暫存;計(jì)算乘數(shù)首址,暫存;計(jì)算乘數(shù)位地址(由低到高);取一乘數(shù),暫存;計(jì)算分積首址,暫存;計(jì)算被乘數(shù)位地址(低至高);取一位被乘數(shù);進(jìn)行單位BCD碼乘法;原位與下進(jìn)位相加后的低位送分積對應(yīng)位;進(jìn)位送進(jìn)位存儲器;判斷被乘數(shù)位數(shù)是否取完?未完,跳回被乘數(shù)位地址計(jì)算,繼續(xù)第一重循環(huán)。完了,則跳出第一重循環(huán),判斷進(jìn)位為0否?不為0,送入分積的更高一位。為0,跳過進(jìn)行下面程序;分積位數(shù)存入該分積的值息存儲器;數(shù)號存儲器加1;判斷乘數(shù)位數(shù)是否取完?未完,跳回取上一位乘數(shù),繼續(xù)第二重循環(huán)。已完,跳出循環(huán),轉(zhuǎn)入加法程序。
加法程序和前面所述程序基本一樣,唯一不同但又必須注意的是第一分積按原位數(shù)送入積中;第二分積必須在位數(shù)上加1才和積的位數(shù)對應(yīng);第三分積要加2,第四分積要加3...也就是積的位數(shù)=分積位數(shù)+分積序號-1積的位數(shù),在運(yùn)算過程中已經(jīng)送入積的信息存儲器。積的小數(shù)位數(shù)需最后計(jì)算送入,其值=被乘數(shù)的小數(shù)位+乘數(shù)的小數(shù)位。
(四)除法自動運(yùn)算。除法是由一聯(lián)串的乘法和加法組成的,是一個較大的循環(huán)過程,其中還有一個試除的小循環(huán)。
原始數(shù)據(jù)(被除數(shù)和除數(shù))輸入后,也要按法則要求,進(jìn)行去零和難度調(diào)整(可以調(diào)用手工計(jì)算程序中的,也可以在手工程序作完這部分再轉(zhuǎn)入自動程序的除法)。
除法開始,先比較除數(shù)和被除數(shù)對應(yīng)位(商位對應(yīng)位及以前位)的大小,如大于,則再右移一位商,再比較;如小于等于,則開始試除。
試除循環(huán)試除從9開始,即用9乘除數(shù),所得的積與被除數(shù)對應(yīng)的幾位數(shù)比較,若大,則返回試8;若不大,則跳出循環(huán),向下進(jìn)行,每次循環(huán)返目前,還應(yīng)用位清零程序清除內(nèi)存中的積以及積信息存儲器中的位數(shù)值,因?yàn)橄乱粋€試除積不但小,而且位數(shù)也會少,單純的替代會造成內(nèi)存的錯誤。
第三步作減法。
第四步下調(diào)一位,這一位應(yīng)用手工計(jì)算程序中的第一種數(shù)據(jù)輸入方式的內(nèi)存輸入方法送入差數(shù)的低位,這里是大循環(huán)的起點(diǎn),同時也跳出循環(huán)的出口。首先判斷被除數(shù)位數(shù)是否取完未完進(jìn)入循環(huán);完則跳出循環(huán)。
再試除,夠除向下進(jìn)行;不夠除商上0,返回再調(diào)一位。
作減法,跳回第四步繼續(xù)循環(huán)。
凡除不盡的除法(包括整數(shù)除法及小數(shù)除法)最后一個差為余數(shù),最后計(jì)算商的小數(shù)位值,送入商的信息存儲器。
(五)開方自動運(yùn)算,開方的自動運(yùn)算和除法差不多,也須事先調(diào)整數(shù)據(jù),并須計(jì)算根的最高位的位置,之后進(jìn)行試根,和商一樣,從9開始,開方試根必有結(jié)果,故不必重下調(diào)數(shù)復(fù)試。
試根后作減法。
再下調(diào)數(shù),開方中每次下調(diào)數(shù)應(yīng)連調(diào)兩位,調(diào)前先判斷被開方數(shù)位數(shù)調(diào)完否?不完則進(jìn)入循環(huán);完則不進(jìn)入循環(huán),直接跳到根小數(shù)位計(jì)算程序。
進(jìn)入循環(huán)后先求20倍數(shù)(乘法),再試根,這里要注意,類同手工運(yùn)算,和第一位根不同,這以后的根要送入20倍數(shù)的個位(用第二種數(shù)據(jù)輸入方式,因個位已預(yù)留),求這一位根與20倍數(shù)的積,與上面的差比較大小,判斷該再試根還是進(jìn)行下面的減法,作減法后返回下調(diào)數(shù)循環(huán),直至開完,結(jié)束循環(huán),進(jìn)入小數(shù)位數(shù)計(jì)算程序,后結(jié)束開方運(yùn)算。
(六)自動檢驗(yàn),上述自動運(yùn)算和手動運(yùn)算的各個結(jié)果數(shù)分存在兩個數(shù)據(jù)存儲器區(qū)域中,檢驗(yàn)就是依次分別取出兩種運(yùn)算結(jié)果的對應(yīng)位,逐一對比,如果手動運(yùn)算的某位結(jié)果和自動運(yùn)算不一樣,則在屏幕上該位閃動光標(biāo),等候修改,此時鍵盤輸入的數(shù)據(jù)直接送入該位的手動運(yùn)算結(jié)果位,重新開始檢驗(yàn),直至所有結(jié)果一致。
還可設(shè)置另一種檢驗(yàn)方式在手動運(yùn)算的每一位輸入結(jié)束后,立即調(diào)用位比較程序,進(jìn)行該位的檢驗(yàn),不對,光標(biāo)在原位閃動,等待修改;對了,光標(biāo)到下一位閃動,等待輸入新的一位數(shù),前種方法適合運(yùn)算較熟練的學(xué)生用,后種方法適合初學(xué)學(xué)生用。
三.自動出題和小測驗(yàn)。
該部分的引入,是為了加強(qiáng)本計(jì)算器的功能,和計(jì)算器的基本功能沒有什么牽制,也就是說,以上兩大部分已經(jīng)能完成本計(jì)算器的計(jì)算功能,加上本部分,可以便計(jì)算器增加功能,擴(kuò)大計(jì)算器的用途。
自動出題,實(shí)質(zhì)是個隨機(jī)數(shù)問題,產(chǎn)生隨機(jī)數(shù)的方法很多,都可考慮釆用,這里僅就利用單片機(jī)的計(jì)數(shù)器(定時器)來產(chǎn)生單位整數(shù)隨機(jī)數(shù)的方法作一介紹令單片機(jī)的兩個(或更多)計(jì)數(shù)器在0-9(取補(bǔ)碼)間不同步運(yùn)行(可令一個在0-9間,一個在0-8間),某一時刻同時取兩個計(jì)數(shù)器的值,相加并進(jìn)行BCD碼調(diào)正,再加上前次產(chǎn)生的隨機(jī)數(shù),即可產(chǎn)生一位整數(shù)隨機(jī)數(shù),要進(jìn)一步降低重復(fù)率,還可在其中一個計(jì)數(shù)器的重裝數(shù)上每次加1,也在0-9間循環(huán)。
自動出題中,每個數(shù)的位數(shù)由"難度存儲器"決定,程序根據(jù)難度存儲器中的數(shù)值,決定應(yīng)出幾位數(shù),用上述隨機(jī)數(shù)程序逐個取數(shù),按由低至高的原則送入數(shù)據(jù)存儲器,數(shù)的個數(shù)由程序按不同運(yùn)算方法提出要求,須進(jìn)一步說明的是豎式減法要求被減數(shù)大于減數(shù),比較后不合要求應(yīng)返回重新出題,整數(shù)除法中,有時要求能除盡,故一般除法的出題,不釆用直接出兩個數(shù),而用下述方式自動出兩個數(shù)后作乘法,取其積為被除數(shù),兩數(shù)中的一個作除數(shù),開方也用類似方法自動出一個數(shù)自乘后,取積作開方數(shù)。
自動出題要求先輸入運(yùn)算符。
小測驗(yàn)部分,是自動出題,自動計(jì)算,手動計(jì)算和檢驗(yàn)連接工作,其特殊之處在于檢驗(yàn)部分不運(yùn)行修改部分,就是只判對否,不給修改機(jī)會,但啟動一個計(jì)分器和計(jì)分程序,這個計(jì)分程序給定出題的數(shù)量,每作對一道題,程序給計(jì)分器加分,作完全部題,計(jì)分器中記錄得分并自動送顯,學(xué)生即可知道本次小測驗(yàn)的成績了。
小測驗(yàn)程序的進(jìn)入,由面板上設(shè)的"模式鍵"決定。該鍵控制"模式存儲器"內(nèi)的數(shù)值,而程序根據(jù)"模式存儲器"中的數(shù)值來選擇運(yùn)行的方式,配合"難度存儲器",可以構(gòu)成適合各類學(xué)生使用的形式。例如計(jì)算器可分"計(jì)算""學(xué)習(xí)""練習(xí)""測驗(yàn)"幾種模式,用"模式存儲器"中的0-3分別代表。"計(jì)算"擋時,程序運(yùn)行手動輸入,手動計(jì)算,自動計(jì)算,最后檢驗(yàn),作一般計(jì)算用,用"難度"中的0代表除(開)盡的除法(開方),1代表除(開)不盡的除法(開方)。"學(xué)習(xí)"擋運(yùn)行手動計(jì)算,兩種計(jì)算程序,逐位檢驗(yàn)程序,供初學(xué)者使用,只作整數(shù)運(yùn)算,"難度"選擇不同的運(yùn)算位數(shù)。"練習(xí)"擋運(yùn)行自動出題,兩種計(jì)算程序,最后檢驗(yàn)方式,"測驗(yàn)"擋運(yùn)行自動出題,兩種計(jì)算程序,檢驗(yàn)判分程序,作小測驗(yàn),根據(jù)"難度"選擇出題的位數(shù)和題量…等等。
綜上所述,十進(jìn)制豎式運(yùn)算的實(shí)現(xiàn)沒有什么特別難的問題,就是比較繁瑣,編制程序要有耐心,要特別細(xì)心。
本發(fā)明設(shè)計(jì)的學(xué)生計(jì)算器,由于嚴(yán)格遵守十進(jìn)制豎式運(yùn)算法則,逐步運(yùn)算,學(xué)生無懶可偷,完全克服了普通計(jì)算器對學(xué)生的不利影響,反之,由于設(shè)計(jì)有自動檢驗(yàn)程序,不必教師批改,學(xué)生即可知道自己做的正確與否,即可減輕教師的負(fù)擔(dān),又可增強(qiáng)學(xué)生的自信心,再加上自動出題和小測驗(yàn)功能,足以提高學(xué)生的學(xué)習(xí)興趣,長期使用,對于提高學(xué)生的運(yùn)算能力,開發(fā)學(xué)生的智力,將十分有利,本計(jì)算器的錯誤的修改,也是逐位進(jìn)行,比較麻煩,這也就十分容易區(qū)分學(xué)生的差別,該計(jì)算器的普及,學(xué)生不必再用演草紙,這將能節(jié)約大量的紙張和鉛筆。
本發(fā)明可以根據(jù)單片機(jī)的種類,內(nèi)存的大小及顯示器的種類,顯示位數(shù)的多少靈活編制程序,設(shè)計(jì)不同成本和不同運(yùn)算位數(shù)的計(jì)算器,有些功能也可根據(jù)需要添減。
附圖
(1)是本發(fā)明選用80C51作CU,128*64點(diǎn)陣圖形液晶顯示器作顯示部件時的學(xué)生計(jì)算器線路圖。
按照128*64點(diǎn)陣圖形顯示器的要求,顯示器的數(shù)據(jù)輸入(DB0-7)直接連接接80C51的P0口,片選CS1,CS2分接P2-4,P2-5,讀寫控制R/W接P2-1,總線控制D/1接P2-0.80C51的讀,寫兩輸出經(jīng)多輸入正與非門電路接顯示器的使能端E,24鍵單觸點(diǎn)矩陣導(dǎo)電橡膠鍵盤,其六路縱列接80C51的P1.0-5,四路橫行接P3.0-3,兩節(jié)5號電池通過OC-DC變換器產(chǎn)生+5V和-10V兩路電源,分別向80C51和顯示器供電,電位器的中端接顯示器V0,作對比度調(diào)節(jié)用。
因圖形顯示器內(nèi)無字符發(fā)生器,程序中須編制字符發(fā)生程序。為充分利用顯示器,并考慮到豎式中需要劃線,釆用5*5點(diǎn)陣,字符只有0-9,+,-,,,,幾種,小數(shù)點(diǎn)不占位,另設(shè)有一個光標(biāo)發(fā)生程序,供產(chǎn)生光標(biāo)用,RAM中還專設(shè)了"行位置""列位置"專用存儲器,隨時記錄光標(biāo)的行列位置,"復(fù)位鍵"可使計(jì)算器全部復(fù)位,即程序回到起點(diǎn),清屏,顯示"學(xué)生計(jì)算器"等。
附圖(2)是學(xué)生計(jì)算器的程序流程圖。
外殼設(shè)計(jì)成袖珍式,攜帶方便。24鍵加復(fù)位鍵,電源開關(guān)共26鍵附圖(3)即學(xué)生計(jì)算器的一種面板圖(折疊式展開圖)用80C51和128*64點(diǎn)陣圖形液晶顯示器構(gòu)成的計(jì)算器,最大計(jì)算能力加減法10位,乘法5位,除法是6步(除數(shù)為5位時,被除數(shù)為10位;除數(shù)小于5位時,被除數(shù)位數(shù)相應(yīng)減少),開方為10位。能進(jìn)行整數(shù)和小數(shù)的加減乘除開方五種運(yùn)算,可以滿足小學(xué)和初中學(xué)生的需要。
權(quán)利要求
一種學(xué)生計(jì)算器。可以由單片機(jī),液晶顯示器,鍵盤組成,其特征是1.通過"基準(zhǔn)列"和相關(guān)尋位程序,三種不同的數(shù)據(jù)輸入方式,確保顯示屏上的數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)一一對應(yīng),并符合豎式要求,實(shí)現(xiàn)鍵盤-屏顯手動十進(jìn)制豎式運(yùn)算;設(shè)置加減乘三種單位BCD碼運(yùn)算程序,以其為基礎(chǔ),與其它程序組成加減乘除開方五種多位數(shù)自動逐位運(yùn)算程序,提供正確答案;兩種校對程序逐位比較手動計(jì)算,自動計(jì)算兩種結(jié)果的每一位,指示錯誤位置,給以修改機(jī)會修改數(shù)次仍不對后,給出正確答案。
2.用單片機(jī)的計(jì)數(shù)器(兩個以上)作不同步運(yùn)行,加上循環(huán)修正量,構(gòu)成單位整數(shù)隨機(jī)數(shù)程序,用"模式存儲器"和"難度存儲器"配合決定數(shù)的位數(shù)和個數(shù),實(shí)現(xiàn)自動出題,自動出題,計(jì)算,檢驗(yàn)(不包括修改),加上判分程序的連接運(yùn)行,可以實(shí)現(xiàn)"小測驗(yàn)"功能。
3. 8051系列單片機(jī)和128*64點(diǎn)陣液晶圖形顯示器加24鍵鍵盤可以構(gòu)成一個實(shí)用學(xué)生計(jì)算器,其中為圖形顯示器專門設(shè)置了5*5點(diǎn)陣字符發(fā)生程序和光標(biāo)發(fā)生程序,
全文摘要
本發(fā)明涉及一種學(xué)生計(jì)算器,具體地說,涉及一種能進(jìn)行十進(jìn)制逐位運(yùn)算的學(xué)生計(jì)算器,其特征是用鍵盤手動方式在屏幕上逐位作十進(jìn)制豎式運(yùn)算,通過自動計(jì)算和逐位檢驗(yàn)程序校對,修改每位結(jié)果,能進(jìn)行多位整數(shù)和小數(shù)的加減乘除開方五種運(yùn)算,并可以設(shè)置自動出題和小測驗(yàn)程序,自動出題和進(jìn)行小測驗(yàn),適合中小學(xué)生使用,利于學(xué)生運(yùn)算能力的提高,益于學(xué)生智力的開發(fā)。
文檔編號G06F15/02GK1149158SQ9511674
公開日1997年5月7日 申請日期1995年9月28日 優(yōu)先權(quán)日1995年9月28日
發(fā)明者王和平 申請人:王和平