找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6545|回復(fù): 2
收起左側(cè)

單片機(jī)雙精度電子稱課程設(shè)計(jì)(論文)

[復(fù)制鏈接]
ID:161768 發(fā)表于 2017-6-2 17:00 | 顯示全部樓層 |閱讀模式

一、課程設(shè)計(jì)(論文)的內(nèi)容

以89C51單片機(jī)為核心,制作一個(gè)LED顯示的雙精度電子稱設(shè)計(jì)。具體要求:

1、用4只LED數(shù)碼管輸出顯示重量。

2、可通過按鍵設(shè)置重量功能,且停鬧無須手工操作。

3、可通過按鍵設(shè)置重量的單位。

4、稱重時(shí)的誤差少于10g。

二、課程設(shè)計(jì)(論文)的要求與數(shù)據(jù)

1、系統(tǒng)框圖、方案論證;

2、各部分的硬件電路原理圖及功能說明;

3、程序流程圖及分析;

4、系統(tǒng)調(diào)試與分析;

5、源程序清單。

三、課程設(shè)計(jì)(論文)應(yīng)完成的工作

1. 畫出系統(tǒng)框圖,論證系統(tǒng)設(shè)計(jì)方案;

2、器件選型,給出系統(tǒng)各個(gè)組成部分的硬件電路原理圖;

3、給出程序流程圖;

4、進(jìn)行源程序的設(shè)計(jì)及調(diào)試;

5、撰寫課程設(shè)計(jì)報(bào)告的。

四、課程設(shè)計(jì)(論文)進(jìn)程安排

序號(hào)

設(shè)計(jì)(論文)各階段內(nèi)容

地點(diǎn)

起止日期

1

選擇課題,明確設(shè)計(jì)要求,查閱資料

校內(nèi)

5.12

2

方案論證、系統(tǒng)總體設(shè)計(jì)

校內(nèi)

5.13~5.14

3

硬件電路原理圖設(shè)計(jì)

校內(nèi)

5.15~5.16

4

程序流程圖的設(shè)計(jì)、源程序的編制及系統(tǒng)調(diào)試

校內(nèi)

5.17~5.18

5

撰寫課程設(shè)計(jì)報(bào)告

校內(nèi)

5.19~5.20

6


五、應(yīng)收集的資料及主要參考文獻(xiàn)

[1] MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用

[2] MCS-51系列單片機(jī)實(shí)用設(shè)計(jì)

發(fā)出任務(wù)書日期: 2017年 05月12 日   指導(dǎo)教師簽名:

計(jì)劃完成日期:   2017年 05月20 日   教學(xué)單位責(zé)任人簽章:






目錄

1系統(tǒng)分析

1.1功能要求

1.2方案論證

2 系統(tǒng)設(shè)計(jì)

2.1 系統(tǒng)硬件電路的設(shè)計(jì)

2.2 系統(tǒng)程序的設(shè)計(jì)              9

3 結(jié)束語              18

參考文獻(xiàn)              19

附錄1材料清單              20

附錄2電路原理圖              21

附錄3實(shí)物圖              22

附錄4主要程序清單              23


1系統(tǒng)分析

1.1功能要求

本課題的主要設(shè)計(jì)思路是:利用壓力傳感器采集因壓力變化產(chǎn)生的電壓信號(hào),經(jīng)過電壓放大電路放大,然后再經(jīng)過模數(shù)轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號(hào),最后把數(shù)字信號(hào)送入單片機(jī)。單片機(jī)經(jīng)過相應(yīng)的處理后,得出當(dāng)前所稱物品的重量及總額,然后再顯示出來。此外,還可通過鍵盤設(shè)定所稱物品的價(jià)格。

本文主要主要以下幾個(gè)方面的工作:

(1)詳細(xì)講解了稱重器工作原理。

(2)對(duì)稱重器系統(tǒng)進(jìn)行總體方案的設(shè)計(jì)。

(3)對(duì)于稱重器的硬件系統(tǒng),重點(diǎn)介紹關(guān)于精度、轉(zhuǎn)換速率的壓力傳感器和A/D轉(zhuǎn)換模塊器件的選取。

(4)對(duì)于稱重器的軟件系統(tǒng),通過解說LCD液晶顯示的使用及鍵盤的工作原理,對(duì)于主程序的編寫與調(diào)試提供重要的依據(jù)。

(5)依據(jù)稱重系統(tǒng)的總電路,通過Keil軟件C語言編程和Proteus仿真,實(shí)現(xiàn)模擬的稱重顯示。

(6)對(duì)稱重系統(tǒng)的測(cè)量值與顯示值的差值,進(jìn)行系統(tǒng)的調(diào)試與誤差校正。

主要技術(shù)指標(biāo)為:稱量范圍0~10Kg;分度值0.01kg;精度等級(jí)Ⅲ級(jí);電源DC1.5V(一節(jié)5號(hào)電池供電)。

這種高精度智能電子秤體積小、計(jì)量準(zhǔn)確、攜帶方便,集重量稱量功能與價(jià)格計(jì)算功能于一體,能夠滿足商業(yè)貿(mào)易和居民家庭的使用需求
1.001.jpg
圖1.1設(shè)計(jì)思路框圖

1.2方案論證

數(shù)碼管顯示。結(jié)構(gòu)如圖1.2所示:

1.002.jpg

圖1.2數(shù)碼管顯示方案

此方案利用數(shù)碼管顯示物體重量,簡(jiǎn)單可行,可以采用內(nèi)部帶有模數(shù)轉(zhuǎn)換功能的單片機(jī)。此設(shè)計(jì)的硬件部分簡(jiǎn)單,接口電路易于實(shí)現(xiàn),并且在編程時(shí)大大減少程序量,在電路結(jié)構(gòu)上只有簡(jiǎn)單的輸出輸入關(guān)系。缺點(diǎn)是:硬件部分簡(jiǎn)單,雖然可以實(shí)現(xiàn)電子稱基本的稱重功能,但是不能實(shí)現(xiàn)外部數(shù)據(jù)的輸入,無法實(shí)時(shí)地設(shè)定各種控制參數(shù)。由于數(shù)碼管只能實(shí)現(xiàn)簡(jiǎn)單的數(shù)字和英文字符的顯示,不能顯示漢字以及其他的復(fù)雜字符,不能達(dá)到顯示購(gòu)物清單的要求。又因?yàn)椴捎昧司哂心?shù)轉(zhuǎn)換功能的單片機(jī),系統(tǒng)電路過于簡(jiǎn)單,系統(tǒng)硬件的擴(kuò)展必受到限制,電子秤的功能過于單一,達(dá)不到設(shè)計(jì)的標(biāo)準(zhǔn)。

1






2 系統(tǒng)設(shè)計(jì)

2.1 系統(tǒng)硬件電路的設(shè)計(jì)

2.1.1 AT89S52的最小系統(tǒng)電路構(gòu)成

AT89S52單片機(jī)的最小系統(tǒng)由時(shí)鐘電路、復(fù)位電路、電源電路及單片機(jī)構(gòu)成。單片機(jī)的時(shí)鐘信號(hào)用來提供單片機(jī)片內(nèi)各種操作的時(shí)間基準(zhǔn),復(fù)位操作則使單片機(jī)的片內(nèi)電路初始化,使單片機(jī)從一種確定的初態(tài)開始運(yùn)行。

單片機(jī)的時(shí)鐘信號(hào)通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。在引腳XTAL1和XTAL2外接晶體振蕩器(簡(jiǎn)稱晶振)或陶瓷諧振器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時(shí)鐘脈沖。

當(dāng)單片機(jī)的復(fù)位引腳RST出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位和上電或開關(guān)復(fù)位。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。

上電或開關(guān)復(fù)位要求電源接通后,單片機(jī)自動(dòng)復(fù)位,并且在單片機(jī)運(yùn)行期間,用開關(guān)操作也能使單片機(jī)復(fù)位。單片機(jī)的復(fù)位操作使單片機(jī)進(jìn)入初始化狀態(tài),其中包括使程序計(jì)數(shù)器PC=0000H,這表明程序從0000H地址單元開始執(zhí)行。

系統(tǒng)復(fù)位是任何微機(jī)系統(tǒng)執(zhí)行的第一步,使整個(gè)控制芯片回到默認(rèn)的硬件狀態(tài)下。51單片機(jī)的復(fù)位是由RESET引腳來控制的,此引腳與高電平相接超過24個(gè)振蕩周期后,51單片機(jī)即進(jìn)入芯片內(nèi)部復(fù)位狀態(tài),而且一直在此狀態(tài)下等待,直到RESET引腳轉(zhuǎn)為低電平后,才檢查EA引腳是高電平或低電平,若為高電平則執(zhí)行芯片內(nèi)部的程序代碼,若為低電平便會(huì)執(zhí)行外部程序。

1.003.jpg

圖2.1AT89S52最小系統(tǒng)電路

2.2.2  A/D轉(zhuǎn)換器與AT89S52單片機(jī)接口電路

AD574是美國(guó)Analog Device公司生產(chǎn)的12位單片A/D轉(zhuǎn)換器。它采用逐次逼近型的A/D轉(zhuǎn)換器,最大轉(zhuǎn)換時(shí)間為25us,轉(zhuǎn)換精度為0.05%,所以適合于高精度的快速轉(zhuǎn)換采樣系統(tǒng)。芯片內(nèi)部包含微處理器借口邏輯(有三態(tài)輸出緩沖器),故可直接與各種類型的8位或者16位的微處理器連接,而無需附加邏輯接口電路,切能與CMOS及TTL電路兼容。AD574采用28腳雙列直插標(biāo)準(zhǔn)封裝。

1.004.jpg

圖2.2AD574芯片引腳圖

A/D574有5根控制線,邏輯控制輸入信號(hào)有: A0:字節(jié)選擇控制信號(hào)。 CE:片啟動(dòng)信號(hào)。

/CS:片選信號(hào)。當(dāng)/CS=0,CE=1同時(shí)滿足時(shí),AD574才處于工作狀態(tài),否則工作被禁止。

R/-C:讀數(shù)據(jù)/轉(zhuǎn)換控制信號(hào)。

12/-8:數(shù)據(jù)輸出格式選擇控制信號(hào)。當(dāng)其為高電平時(shí),對(duì)應(yīng)12位并行輸出;為低電平時(shí),對(duì)應(yīng)8位輸出。

當(dāng)R/-C=0,啟動(dòng)A/D轉(zhuǎn)換:當(dāng)A0=0,啟動(dòng)12位A/D轉(zhuǎn)換方式;當(dāng)A0=1,啟動(dòng)8位轉(zhuǎn)換方式。

當(dāng)R/-C=1,數(shù)據(jù)輸出,A0=0時(shí),高8位數(shù)據(jù)有效;A0=1時(shí),低4位數(shù)據(jù)有效,中間4位為0,高4位為三態(tài)。 輸出信號(hào)有:

STS:工作狀態(tài)信號(hào)線。當(dāng)啟動(dòng)A/D進(jìn)行轉(zhuǎn)換時(shí),STS為高電平;當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí)為低電平。則可以利用此線驅(qū)動(dòng)一信號(hào)二極管的亮滅,從而表示是否處于A/D轉(zhuǎn)換。  

由于對(duì)AD574 的8、10、12引腳的外接電路有不同連接方式,所以AD574與單片機(jī)的接口方案有兩種,一種是單極性接法,可實(shí)現(xiàn)輸入信號(hào)0~10V或者0~20V的轉(zhuǎn)換;另一種為雙極性接法,可實(shí)現(xiàn)輸入信號(hào)-5~+5V或者-10~+10V之間轉(zhuǎn)換。本次設(shè)計(jì)采用單極性接法。

1.005.jpg

圖2.3 AD574與AT89S52的接線圖

根據(jù)芯片管腳的原理,無論啟動(dòng)、轉(zhuǎn)換還是結(jié)果輸出,都要保證CE端為高電平,所以可以將單片機(jī)的/RD引腳和/WR端通過與非門與AD574的CE端連接起來。轉(zhuǎn)換結(jié)果分高8位、低4位與P0口相連,分兩次讀入,所以12/-8端接地。同時(shí),為了使CS、A0、R/-C在讀取轉(zhuǎn)換結(jié)果時(shí)保持相應(yīng)的電平,可以將來自單片機(jī)的控制信號(hào)經(jīng)74LS373鎖存后再接入。CPU可采用中斷、查詢或者程序延時(shí)等方式讀取AD574的轉(zhuǎn)換結(jié)果,本設(shè)計(jì)采用查詢方式。

2.1.3  顯示電路與AT89S52單片機(jī)的接口電路

1.006.jpg

圖2.4 單片機(jī)與LCD接線圖

3.4  鍵盤電路與AT89S52的接口電路設(shè)計(jì)

鍵盤一般是由若干按鍵組成的開關(guān)矩陣,若按照其接線方式的不同,可分為兩種: 一種是獨(dú)立式接法,一種是矩陣式接法;若按照按鍵的結(jié)構(gòu)原理,可分為兩類:一類是觸點(diǎn)式開關(guān)按鍵,如機(jī)械式開關(guān)、導(dǎo)電橡膠式開關(guān)等,一類是無觸點(diǎn)式開關(guān)按鍵,如電氣式按鍵、磁感應(yīng)按鍵等。前者造價(jià)低,后者壽命長(zhǎng)。

按鍵按下時(shí),與此鍵相連的行線與列線導(dǎo)通,行線在無鍵按下時(shí)處于高電平。顯然如果讓所有的列線也處在高電平,那么按鍵按下與否不會(huì)引起行線電平的變化,因此,必須使所有的列線處在低電平。只有這樣,當(dāng)按鍵按下時(shí),該鍵所在的行電平才會(huì)由高電平變?yōu)榈碗娖。CPU根據(jù)行電平的變化,便能判定相應(yīng)的行有鍵按下。

對(duì)應(yīng)鍵盤的相應(yīng)取決于鍵盤的工作方式,鍵盤的工作方式應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU的工作情況而定,其選取的原則既要保證CPU能及時(shí)響應(yīng)按鍵操作,又不要過多的占用CPU的工作時(shí)間。通常,鍵盤的工作方式有3種,即編程掃描、定時(shí)掃描和中斷掃描。

① 編程掃描方式:利用CPU完成其他工作的空余時(shí)間,調(diào)用鍵盤掃描子程序來響應(yīng)鍵盤輸入要求。在執(zhí)行鍵功能程序時(shí),CPU不再響應(yīng)鍵輸入要求,直到CPU重新掃描鍵值為止。

② 定時(shí)掃描方式,定時(shí)掃描方式就是每隔一段時(shí)間對(duì)鍵盤掃描一次,它利用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生一定時(shí)間(列如10ms)的定時(shí),當(dāng)定時(shí)時(shí)間到,就會(huì)產(chǎn)生定時(shí)器溢出中斷。CPU響應(yīng)中斷后對(duì)鍵盤進(jìn)行掃描,并在有鍵按下時(shí)識(shí)別出該鍵,再執(zhí)行該鍵的子程序。

③ 中斷掃描方式:采用上述兩種掃描方式時(shí),無論是否有鍵按下,CPU都要定時(shí)掃描鍵盤,而單片機(jī)應(yīng)用系統(tǒng)工作時(shí),并非經(jīng)常需要鍵盤輸入,因此,CPU經(jīng)常處于空掃描狀態(tài)。為提高CPU工作效率,可采用中斷掃描工作方式。其工作過程如下:當(dāng)無鍵按下時(shí),CPU處理自己程序,當(dāng)有鍵按下時(shí),產(chǎn)生中斷請(qǐng)求,CPU轉(zhuǎn)去執(zhí)行鍵盤掃描子程序,并識(shí)別鍵號(hào)。

說明此(低電平)行沒有鍵被按下。接著進(jìn)行下一行“0”行掃描與列讀入,知道4行關(guān)不檢查完為止,若無鍵按下,則返回。

矩陣式鍵盤的結(jié)構(gòu)與工作原理: 在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/矩陣式鍵盤有兩種識(shí)別鍵是否被按下的方法:行掃描法和線反轉(zhuǎn)法。行掃描法又稱逐行零掃描查詢法,及逐行輸出行掃描信號(hào)“0”,使各行依次為低電平,然后分別讀取列數(shù)據(jù),檢查此(低電平)行中是否有鍵被按下。如果讀得某列線為低電平,則表示此(低電平)行線與列線的交叉處有鍵按下,再對(duì)該鍵該鍵譯碼計(jì)算,得到鍵值,然后轉(zhuǎn)入該鍵的功能子程序入口地址;如果沒有任何一根列線為低電平,則O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。

矩陣式鍵盤的按鍵識(shí)別方法 :確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,如下圖所示鍵盤,介紹過程如下。判斷鍵盤中有無鍵按下 將全部行線R0-R3置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。  

在本系統(tǒng)中鍵盤采用矩陣式鍵盤并采用編程掃描的工作方式。鍵盤為4 X 4鍵盤,包括0、1、2、3、4、5、6、7、8、9、十個(gè)數(shù)字及確認(rèn)和清除鍵。

1.007.jpg

圖2.5 單片機(jī)與鍵盤接口電路

各個(gè)按鍵的功能說明:

數(shù)字鍵:.、0、1、2、3、4、5、6、7、8、9被按下時(shí)直接顯示在LCD液晶顯示屏上。

啟動(dòng)鍵:當(dāng)按下此鍵時(shí),LCD液晶顯示開啟。

單價(jià)鍵:當(dāng)此按鍵被按下時(shí),此刻要求輸入稱重物品單價(jià),即要求按下數(shù)字鍵。 確定鍵:前提是單價(jià)已輸入完畢,當(dāng)此按鍵被按下時(shí),LCD屏幕顯示當(dāng)前稱重物品的總價(jià)格。

總價(jià)鍵:當(dāng)稱重物品單價(jià)不變、重量改變時(shí),按下此按鍵時(shí),LCD液晶屏上顯示當(dāng)前重量物品的總價(jià)格。

清除鍵:當(dāng)此鍵按下時(shí),單價(jià)及總價(jià)處的顯示清零。

2.2 系統(tǒng)程序的設(shè)計(jì)

2.2.1  主程序設(shè)計(jì)

在單片機(jī)應(yīng)用系統(tǒng)的開發(fā)中,軟件的設(shè)計(jì)是最復(fù)雜和困難的,大部分情況下工作量都較大,特別是對(duì)那些控制系統(tǒng)比較復(fù)雜的情況。如果是機(jī)電一體化的設(shè)計(jì)人員,往往需要同時(shí)考慮單片機(jī)的軟硬件資源分配。本系統(tǒng)的軟件設(shè)計(jì)主要分為系統(tǒng)初始化、按鍵、顯示處理及信號(hào)頻率輸入處理。

程序設(shè)計(jì)是一件復(fù)雜的工作,為了把復(fù)雜的工作條理化,就要有相應(yīng)的步驟和方法。其步驟可概括為以下三點(diǎn):

(1) 分析系統(tǒng)控制要求,確定算法:對(duì)復(fù)雜的問題進(jìn)行具體的分析,找出合理的計(jì)算方法及適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),從而確定編寫程序的步驟。這是能否編制出高質(zhì)量程序的關(guān)鍵。

(2) 根據(jù)算法畫流程圖:畫程序框圖可以把算法和解題步驟逐步具體化,以減少出錯(cuò)的可能性。

(3)編寫程序:根據(jù)程序框圖所表示的算法和步驟,選用適當(dāng)?shù)闹噶钆帕衅饋,?gòu)成一個(gè)有機(jī)的整體,即程序。

程序數(shù)據(jù)的一種理想方法是結(jié)構(gòu)化程序設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)是對(duì)利用到的控制結(jié)構(gòu)類程序做適當(dāng)?shù)南拗,特別是限制轉(zhuǎn)向語句(或指令)的使用,從而控制了程序的復(fù)雜性,力求程序的上、下文順序與執(zhí)行流程保持一致性,使程序易讀易理解,減少邏輯錯(cuò)誤和易于修改、調(diào)試。根據(jù)系統(tǒng)的控制任務(wù),本系統(tǒng)的軟件設(shè)計(jì)主要由主程序、初始化程序、A/D轉(zhuǎn)換子程序、鍵盤掃描子程序和顯示子程序等組成。

2.2.2  C語言在單片機(jī)中的應(yīng)用

C語言是一種通用的計(jì)算機(jī)程序設(shè)計(jì)語言,在國(guó)際上非常流行。它既可以用來編寫計(jì)算機(jī)的系統(tǒng)程序,也可以用來編寫一般的應(yīng)用程序。以前計(jì)算機(jī)的系統(tǒng)軟件主要用匯編語言編寫,單片機(jī)應(yīng)用系統(tǒng)更是如此。C語言是當(dāng)前最流行的程序設(shè)計(jì)語言,它像其它高級(jí)語言一樣,面向用戶,面向解題的過程,編程者不必熟悉具體的計(jì)算機(jī)內(nèi)部結(jié)構(gòu)和指令;C語言又像匯編語言一樣,可以對(duì)機(jī)器硬件進(jìn)行操作。如進(jìn)行端口0,1操作、位操作、地址操作,并可內(nèi)嵌匯編指令,將匯編指令當(dāng)作它的語句一樣。我們知道,匯編語言將涉及計(jì)算機(jī)硬件,所以C語言又像低級(jí)語言一樣,可以對(duì)計(jì)算機(jī)硬件進(jìn)行控制,因此人們把它稱為介于高級(jí)語言與低級(jí)語言之間的一種中級(jí)語言。正是因?yàn)镃語言具有這樣的特性,所以很適合編寫要對(duì)硬件進(jìn)行操作的軟件程序。本文采用C語言進(jìn)行編寫.因?yàn)榻?jīng)系統(tǒng)軟件比較,本系統(tǒng)存儲(chǔ)量較大,因此必須應(yīng)用C語言編程了。 4.1.2 電子稱的軟件設(shè)計(jì)與實(shí)現(xiàn)

電子稱軟件設(shè)計(jì)均采用模塊化設(shè)計(jì),整個(gè)程序包括主程序、A/D轉(zhuǎn)換模塊程序、鍵盤掃描程序、液晶顯示子程序等模塊。所有程序均采用C語言編寫。電子計(jì)價(jià)秤的軟件設(shè)計(jì)思路說明如下:主程序的作用為程序初始化,計(jì)算單價(jià)×物體重量(單價(jià)通過鍵盤給出,物體重量通過壓力傳感器獲得),并實(shí)時(shí)顯示十進(jìn)制的物重,單價(jià),總價(jià)。設(shè)定T0為計(jì)數(shù)工作方式,T1為定時(shí)工作方式。其中R0為標(biāo)志位寄存器當(dāng)為OOH時(shí)為正常顯示方式。當(dāng)為01H時(shí)為累計(jì)顯示方式,在T1定時(shí)中斷程序中。一秒鐘采樣物料重量(已轉(zhuǎn)成脈沖頻率),并賦值重量計(jì)算RAM區(qū)和顯示RAM區(qū)。在INTO外部中斷程序中,采樣單價(jià)并賦值單價(jià)計(jì)算。

2.2.3 系統(tǒng)主程序流程圖

主程序流程圖給出了系統(tǒng)工作的基本過程,描述了信號(hào)的基本流向,起到一個(gè)向?qū)У淖饔谩?/font>

本系統(tǒng)的軟件系統(tǒng)主要可分為主程序和定時(shí)器中斷程序兩大模塊。在程序過程中,加入了抗干擾措施。下面對(duì)部分模塊作介紹。

1.008.jpg

圖2.6 稱重總設(shè)計(jì)的仿真圖

1.009.jpg

圖2.7 系統(tǒng)總程序圖

2.2.4 系統(tǒng)子程序設(shè)計(jì)

系統(tǒng)子程序主要包括A/D轉(zhuǎn)換啟動(dòng)及數(shù)據(jù)讀取程序設(shè)計(jì)、鍵盤輸入控制程序設(shè)計(jì)以及顯示程序設(shè)計(jì)等。

2.2.5  A/D轉(zhuǎn)換啟動(dòng)及數(shù)據(jù)讀取程序設(shè)計(jì)

A/D轉(zhuǎn)換子程序主要是指在系統(tǒng)開始運(yùn)行時(shí),把稱重傳感器傳遞過來的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)并傳遞到單片機(jī)所涉及到的程序設(shè)計(jì)

1.010.jpg

圖2.8 A/D轉(zhuǎn)換啟動(dòng)及數(shù)據(jù)讀取程序流程圖

1.011.jpg

圖2.9 A/D0832轉(zhuǎn)換后的顯示圖像

1.012.jpg 圖2.10 A/D574轉(zhuǎn)換后的顯示圖像

2.2.6 顯示程序設(shè)計(jì)

顯示子程序主要是來判斷是否需要顯示,以及如何去顯示,也是十分重要的程序之一。

1.013.jpg

圖2.11 顯示子程序流程圖

1.014.jpg

圖2.12 顯示啟動(dòng)按鍵按下后

1.015.jpg

圖2.13  顯示歡迎界面

2.2.7 鍵盤輸入控制程序設(shè)計(jì)

鍵盤電路設(shè)計(jì)成4X4矩陣式,由鍵盤編碼方式可以得出0,1,2,3,4,5,6,7,8,9以及啟動(dòng)等功能選擇鍵。在程序中可以先判斷按鍵編碼,然后根據(jù)編碼將鍵盤代表的數(shù)值送到相應(yīng)的存儲(chǔ)單元,再進(jìn)行功能選擇或數(shù)據(jù)處理。

矩陣式鍵盤又叫行列式鍵盤。就是用I/O口線組成行、列結(jié)構(gòu),按鍵設(shè)置在行列的交點(diǎn)上。在按鍵較多時(shí)多用矩陣鍵盤,可以節(jié)省I/O口線。列如:占用8個(gè)I/O口線的4×4矩陣式結(jié)構(gòu)可以構(gòu)成16個(gè)鍵的鍵盤。當(dāng)有鍵按下時(shí),要逐行或逐列掃描來判斷是哪個(gè)按鍵按下。通常的掃描方式有掃描法和反轉(zhuǎn)法。

1.016.jpg

圖2.14 鍵盤逐行掃描過程

3 結(jié)束語
  隨著全球數(shù)字化技術(shù)的不斷發(fā)展,電子衡器已經(jīng)在我們的生活各個(gè)領(lǐng)域得到了廣泛的應(yīng)用,從工業(yè)貿(mào)易到能源交通都能看到電子衡器的技術(shù)應(yīng)用。本文著眼于目前中小型市場(chǎng)商用電子稱智能化低、精度差、易損壞等特點(diǎn),研發(fā)設(shè)計(jì)了基于AT89S52單片機(jī)的雙精度電子稱。
雙精度電子稱是針對(duì)目前中小型市場(chǎng)上現(xiàn)有的衡器無法同時(shí)運(yùn)用于稱量微重物理和較重物體而研發(fā)的產(chǎn)品。該仿真設(shè)計(jì)系統(tǒng)主要包括五大模塊,即數(shù)據(jù)采集和雙精度轉(zhuǎn)換模塊、單片機(jī)處理模塊、鍵盤控制模塊、128*64液晶顯示模塊和軟件驅(qū)動(dòng)模塊。啟動(dòng)工作后,單片機(jī)可根據(jù)A/D采集的重量參數(shù)能夠自動(dòng)選擇轉(zhuǎn)換精度值,完成相應(yīng)的數(shù)據(jù)處理,同時(shí)在128*64的液晶屏上進(jìn)行直觀的顯示重量、單價(jià)和總價(jià),4*4鍵盤控制系統(tǒng)能夠?qū)崟r(shí)進(jìn)行單價(jià)調(diào)整,操作簡(jiǎn)單方便,不僅能夠測(cè)量微重物理,而且能夠測(cè)量較重物體,完全達(dá)到了商品的自動(dòng)化、數(shù)字化和智能化,具有很好的應(yīng)用價(jià)值和意義。

本文唯一的不足是只對(duì)研發(fā)方案成果的進(jìn)行了仿真設(shè)計(jì),沒有運(yùn)用實(shí)物進(jìn)行驗(yàn)證方案是否可行,有待進(jìn)一步的研發(fā)。雖然沒有做出實(shí)物,但基于51單片機(jī)雙精度電子稱依然是一個(gè)具有前景的電子衡器產(chǎn)品,非常適合于中小型市場(chǎng)的物體稱重,如果雙精度電子稱進(jìn)一步發(fā)展,與虛擬串口技術(shù)融合,將會(huì)實(shí)現(xiàn)與上位機(jī)的無線通訊,實(shí)現(xiàn)遠(yuǎn)程監(jiān)測(cè),將更有價(jià)值。


參考文獻(xiàn)

[1] 黃堅(jiān),金惟偉.中小型電機(jī)產(chǎn)品近年出口情況簡(jiǎn)述[J].中小型電機(jī),2005,32(1) 9--12.

[1]趙茂泰. 智能儀器原理及應(yīng)用[M].北京:電子工業(yè)出版社.2004  

[2]張毅剛. MCS-51單片機(jī)應(yīng)用設(shè)計(jì)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社.2003  [3]賈伯年, 俞樸.傳感器技術(shù)[M].東南大學(xué)出版社.2000  

[4]單成祥.傳感器理論設(shè)計(jì)基礎(chǔ)及其應(yīng)用[M].北京:國(guó)防工業(yè)出版社.1999  [5]李道華,李玲,朱艷 .傳感器電路分析與[M].武漢:武漢大學(xué)出版社.2000  [6]沙占友 ,王彥朋等. 智能傳感器系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社2004.6

[7]何希才,薛永毅. 傳感器及其應(yīng)用實(shí)例[J].北京:機(jī)械工業(yè)出版社.2004.1         [8]李群芳. 單片機(jī)微型計(jì)算機(jī)與接口技術(shù)[M].電子工業(yè)出版社. [9]周立功. 單片機(jī)實(shí)驗(yàn)與實(shí)踐[M].北京航空航天大學(xué)出版社.2004.6

[10]全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽組委會(huì).全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽獲獎(jiǎng)作品匯編[J].北京理工大學(xué)出版社.2005.11

[11]何立民 .單片機(jī)高級(jí)教材[M].北京:航空航天大學(xué)出版社.2000 [12]童詩白,華成英 .模擬電子技術(shù)基礎(chǔ)[M]. 北京:北京高等教育出社.2001 [13]程林 ,超省電型電子秤的設(shè)計(jì)方案[J].福建:福建省計(jì)量科學(xué)技術(shù)研究所. 2008.3


附錄1材料清單

名稱
型號(hào)
數(shù)量
     單片機(jī)
AT89C2051
1
     數(shù)字集成芯片
CD4017
2
     數(shù)字集成芯片
CD4069
1
超高亮數(shù)碼管
共陽  尺寸0.5inch
4
高亮發(fā)光二極管
1.017.jpg 3紅、透明
13
高亮發(fā)光二極管
3綠、透明
50
     普通二極管
IN4001
4
     普通二極管
IN4148
2
     穩(wěn)壓二極管
C4V7( 4.7V)
1
     三極管
9012
5
     三極管
9013
1
     輕觸按鍵
小(尺寸6×6mm×5.5)
3
     蜂鳴器
5 V
1
     晶振
6M(小體積)
1
     底座
14腳
1
     底座
16腳
2
     底座
20腳
1
     底座
40腳
1
     電阻
220歐姆,1/8瓦
8
     電阻
4.7K,1/8瓦
5
     電阻
100歐姆,1/8瓦
1
     電阻
10k,1/8瓦
4
     電阻
270歐姆,1/8瓦
1
     電容
100微法/25伏
2
     電容
220微法/25伏
1
     電容
30P  瓷片
3
     電容
104(0.1微法)
3
     變壓器
5 V/100 M A
1
     電源線
150cm
1
     固定腳
3套
     PCB線路板
直徑11.5
1


附錄2電路原理圖

1.018.jpg

附錄3實(shí)物圖


1.019.jpg

附錄4主要程序清單






  1. ALARMHBUFF2  EQU  77H             ;鬧鈴時(shí)間的時(shí)十位計(jì)時(shí)綬沖
  2.         ALARMHBUFF1  EQU  76H             ;鬧鈴時(shí)間的時(shí)個(gè)位計(jì)時(shí)綬沖
  3.         ALARMMBUFF2  EQU  75H             ;鬧鈴時(shí)間的分十位計(jì)時(shí)綬沖
  4.         ALARMMBUFF1  EQU  74H             ;鬧鈴時(shí)間的分個(gè)位計(jì)時(shí)綬沖
  5.         HBUFF2       EQU  73H             ;時(shí)十位計(jì)時(shí)綬沖
  6.         HBUFF1       EQU  72H             ;時(shí)個(gè)位計(jì)時(shí)綬沖
  7.         MBUFF2       EQU  71H             ;分十位計(jì)時(shí)綬沖
  8.         MBUFF1       EQU  70H             ;分個(gè)位計(jì)時(shí)綬沖
  9.         DP           EQU  6FH             ;控制數(shù)碼管點(diǎn)的亮暗
  10.         NUM          EQU  78H  ;前四秒還是后四秒計(jì)數(shù)
  11.         SBUFF        EQU  79H   ;秒十進(jìn)制計(jì)時(shí)綬沖(低四位對(duì)應(yīng)個(gè)位,高四位對(duì)應(yīng)十位)
  12.         MBUFF        EQU  7AH            ;分十進(jìn)制計(jì)時(shí)綬沖
  13.         HBUFF        EQU  7BH            ;時(shí)十進(jìn)制計(jì)時(shí)綬沖
  14.         ALARMMBUFF   EQU  7CH           ;鬧鈴時(shí)間的分十進(jìn)制計(jì)時(shí)綬沖
  15.         ALARMHBUFF   EQU  7DH           ;鬧鈴時(shí)間的時(shí)十進(jìn)制計(jì)時(shí)綬沖
  16.         NUMT1    EQU  67H;用于控制時(shí)間調(diào)整時(shí)按鍵p3.2一次按下時(shí),計(jì)數(shù)器T1中斷的次數(shù)
  17.         NUMT2    EQU  68H;用于控制時(shí)間調(diào)整時(shí)按鍵p3.3一次按下時(shí),計(jì)數(shù)器T1中斷的次數(shù)
  18.         KEYNUMT1     EQU  69H         ;用于存儲(chǔ)NUMT1已經(jīng)計(jì)數(shù)到第幾個(gè)半秒
  19.         KEYNUMT2     EQU  6AH         ;用于存儲(chǔ)NUMT1已經(jīng)計(jì)數(shù)到第幾個(gè)半秒
  20.         STOREKEYNUMT2  EQU  6BH   ;用于存儲(chǔ)當(dāng)前KEYNUMT1的值,以和下次做比較,看是否有變化
  21.         STOREKEYNUMT1  EQU  6CH     ;用于存儲(chǔ)當(dāng)前KEYNUMT2的值,以和下次做比較,看是否有變化
  22.         ORG    0000H
  23.         AJMP   START
  24.         ORG    000BH
  25.         MOV    TH0 ,  #0BH    ;設(shè)置計(jì)數(shù)初值 ,R4用來存儲(chǔ)低位的初值
  26.         MOV    TL0 , R4
  27.         AJMP   INTERT0
  28.         ORG    001BH
  29.         AJMP   INTERT1
  30.         ORG    0040H
  31. START:  MOV    NUMT1 , #00H
  32.         MOV    NUMT2 , #00H
  33.         MOV    KEYNUMT1 , #00H
  34.         MOV    KEYNUMT2 , #00H
  35.         MOV    STOREKEYNUMT2   , #00H
  36.         MOV    STOREKEYNUMT1   , #00H
  37.         MOV    NUM , #8
  38.         MOV    DPTR ,  #TAB
  39.         MOV    ALARMHBUFF , #18H       ;置鬧鈴時(shí)間初始值為18:55
  40.         MOV    ALARMMBUFF , #55H
  41.         MOV    ALARMHBUFF2, #01H
  42.         MOV    ALARMHBUFF1, #08H
  43.         MOV    ALARMMBUFF2 , #05H
  44.         MOV    ALARMMBUFF1 , #05H
  45.         MOV    HBUFF2, #01H            ;置鬧鐘時(shí)間為18:53
  46.         MOV    HBUFF1, #08H
  47.         MOV    MBUFF2 , #05H
  48.         MOV    MBUFF1 , #03H
  49.         MOV    HBUFF ,  #18H
  50.         MOV    MBUFF ,  #53H
  51.         MOV    SBUFF ,  #3CH            ;置初始秒為60,計(jì)時(shí)時(shí)減
  52.         MOV    TCON ,  #05H             ;下降沿觸發(fā)
  53.         MOV    TMOD ,  #11H        ;初始化定時(shí)器,T0 ,T1  16位計(jì)時(shí)
  54.         MOV    TH0 ,  #0BH         ;設(shè)置計(jì)數(shù)初值,125ms計(jì)時(shí)
  55.         MOV    TL0 ,  #0DBH
  56.         MOV    TH1 , #3CH     ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
  57.         MOV    TL1 , #0B0H
  58.         MOV    IE , #82H       ;開T0中斷
  59.         SETB   PT0             ;T0中斷優(yōu)先級(jí)最高
  60.         SETB   TR0            ;允許T0計(jì)數(shù)
  61.         SETB    P3.2
  62.         SETB    P3.3
  63. START1: MOV    A , HBUFF     ; 顯示時(shí),7點(diǎn)以前及21點(diǎn)以后亮度調(diào)暗
  64.         SUBB   A , #7H
  65.         JC      START2
  66.         MOV    A , HBUFF
  67.         SUBB   A , #21H
  68.         JNC    START2
  69.         ACALL  DISPLAY
  70.         ACALL  ZDBS
  71.         AJMP   START3
  72. START2: ACALL   NIGHTDISPLAY
  73. START3: MOV   A ,ALARMHBUFF             ;檢測(cè)是否是定鬧時(shí)間
  74.         CJNE  A , HBUFF , START4
  75.         MOV   A , ALARMMBUFF
  76.         CJNE  A , MBUFF ,START4
  77.         MOV   C, DP                 ;若是定鬧時(shí)間,則利用dp的值來決定蜂鳴
  78.         MOV   P3.2, C
  79.         MOV   A , SBUFF
  80.         JNZ    START1               ;若還沒到1分鐘,則繼續(xù)蜂鳴
  81.         SETB   P3.2
  82. START4: JNB    P3.2,ADJUSTTIME1     ;循環(huán)等待中斷,并檢測(cè)是否鍵按下,若是,則進(jìn)入相應(yīng)程序
  83.         JNB    P3.3,ADJUSTTIME2
  84.         AJMP   START1
  85.         AJMP   START1

  86.       ;****************
  87.       ;*int0中斷子程序*
  88.       ;****************

  89. ADJUSTTIME1:NOP
  90.         MOV    KEYNUMT1  ,#00H
  91.         MOV    TH1 , #3CH                        ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
  92.         MOV    TL1 , #0B0H
  93.         SETB   ET1                              ;開T1中斷
  94.         SETB   PT1                              ;設(shè)T1中斷優(yōu)先級(jí)最高
  95.         SETB   TR1                              ;允許T1計(jì)時(shí)
  96.         MOV    STOREKEYNUMT1 , KEYNUMT1        ;存儲(chǔ)當(dāng)前次KEYNUMT1的值
  97. TIME1_1:ACALL  DISPLAY
  98.         MOV    A , KEYNUMT1
  99.         CJNE   A , STOREKEYNUMT1,TIME1_2   ;若當(dāng)前KEYNUMT1的值與上一次的值不等,則時(shí)間加1分,否則繼續(xù)循環(huán),等等至半分鐘
  100.         AJMP   TIME1_3
  101. TIME1_2:MOV    STOREKEYNUMT1 , KEYNUMT1   ;加1后存儲(chǔ)當(dāng)前的KEYNUMT1的值
  102.         ACALL  ADDBUFF0                   ;分加1
  103. TIME1_3:JNB    P3.2,TIME1_1        ;若p3.2已關(guān),則退出增時(shí),否則繼續(xù)循環(huán)
  104.         CLR    ET1
  105.         CLR    PT1
  106.         CLR    TR1
  107.         AJMP   START1

  108. ;********************
  109. ;*****時(shí)間增1分******
  110. ;********************

  111. ADDBUFF0:MOV   A , MBUFF         ; 若按鍵小于1s,則分增1
  112.         ADD    A , #1
  113.         DA     A
  114.         MOV    MBUFF , A
  115.         ANL    A , #0FH
  116.         MOV    MBUFF1 , A
  117.         MOV    A , MBUFF
  118.         SWAP   A
  119.         ANL    A , #0FH
  120.         MOV    MBUFF2 , A
  121.         MOV    A ,  MBUFF
  122.         CJNE   A , #60H ,  ADDBUFF1
  123.         MOV    MBUFF , #00H
  124.         MOV    MBUFF2 , #00H
  125.         MOV    MBUFF1 , #00H
  126.         MOV    A , HBUFF                      ;時(shí)增1
  127.         ADD    A , #1
  128.         DA     A
  129.         MOV    HBUFF , A
  130.         ANL    A , #0FH
  131.         MOV    HBUFF1 , A
  132.         MOV    A , HBUFF
  133.         SWAP   A
  134.         ANL    A , #0FH
  135.         MOV    HBUFF2 , A
  136.         MOV    A , HBUFF
  137.         CJNE   A , #24H , ADDBUFF1     ;若沒到24小時(shí),則不必初值置0
  138.         MOV    HBUFF , #00H
  139.         MOV    HBUFF2 , #00H
  140.         MOV    HBUFF1 , #00H
  141. ADDBUFF1:RET

  142. ;*********************************
  143. ;*int1中斷子程序******************
  144. ;*********************************   

  145. ADJUSTTIME2: NOP
  146.         ACALL  DL100MS
  147.         MOV    C , P3.3
  148.         JC     TIME2_6            ;如果(P3.3按鍵<100ms以上)   則不做處理
  149.         MOV    KEYNUMT2 , #00H    ;否則進(jìn)入定鬧設(shè)置
  150.         MOV    STOREKEYNUMT2 , KEYNUMT2   ;記錄當(dāng)前NUMT2的數(shù)據(jù),以看下次有沒改變
  151. TIME2_1:NOP
  152.         MOV    TH1 , #3CH        ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
  153.         MOV    TL1 , #0B0H
  154.         SETB   ET1               ;開T1中斷
  155.         SETB   PT1               ;設(shè)T1中斷優(yōu)先級(jí)最高
  156.         SETB   TR1               ;允許T1計(jì)時(shí)
  157. TIME2_2:ACALL  ALARMDISPLAY
  158.         MOV    A , KEYNUMT2
  159.         CJNE   A , STOREKEYNUMT2 ,TIME2_3
  160.         AJMP   TIME2_4
  161. TIME2_3: MOV    STOREKEYNUMT2 , KEYNUMT2
  162.         MOV    A , ALARMMBUFF              ; 若按鍵小于1s,則分增1
  163.         ADD    A , #1
  164.         DA     A
  165.         MOV    ALARMMBUFF , A
  166.         ANL    A , #0FH
  167.         MOV    ALARMMBUFF1 , A
  168.         MOV    A , ALARMMBUFF
  169.         SWAP   A
  170.         ANL    A , #0FH
  171.         MOV    ALARMMBUFF2 , A
  172.         MOV    A ,  ALARMMBUFF
  173.         CJNE   A , #60H ,  TIME2_4
  174.         MOV    ALARMMBUFF , #00H
  175.         MOV    ALARMMBUFF2 , #00H
  176.         MOV    ALARMMBUFF1 , #00H
  177.         MOV    A , ALARMHBUFF                         ;時(shí)增1
  178.         ADD    A , #1
  179.         DA     A
  180.         MOV    ALARMHBUFF , A
  181.         ANL    A , #0FH
  182.         MOV    ALARMHBUFF1 , A
  183.         MOV    A , ALARMHBUFF
  184.         SWAP   A
  185.         ANL    A , #0FH
  186.         MOV    ALARMHBUFF2 , A
  187.         MOV    A , ALARMHBUFF
  188.         CJNE   A , #24H , TIME2_4      ;若沒到24小時(shí),則初值不必置0
  189.         MOV    ALARMHBUFF , #00H
  190.         MOV    ALARMHBUFF2 , #00H
  191.         MOV    ALARMHBUFF1 , #00H
  192. TIME2_4:NOP
  193.         JNB    P3.3,TIME2_2             ;若按鍵已經(jīng)未按,則退出循環(huán)
  194.         CLR    ET1
  195.         CLR    TR1
  196.         MOV    KEYNUMT2 , #00H
  197.         MOV    NUMT2 , #00H
  198.         MOV    R2 , #10             ; 直到p3.3  20s鐘內(nèi)都是未按,此時(shí)復(fù)原數(shù)據(jù),即退出設(shè)置
  199. TIME2_7:MOV    R1 , #200                        
  200. TIME2_5:ACALL  ALARMDISPLAY
  201.         ACALL  DL1MS
  202.         JNB    P3.3 , TIME2_1
  203.         DJNZ   R1 , TIME2_5
  204.         DJNZ   R2 , TIME2_7
  205. TIME2_6:CLR   ET1
  206.         CLR    PT1
  207.         CLR    TR1
  208.         LJMP   START1
  209. ;***********************************
  210. ;**T1中斷子程序*********************
  211. ;***********************************

  212. INTERT1:NOP
  213.         MOV    TH1 , #3CH      ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
  214.         MOV    TL1 , #0B0H
  215.         PUSH   ACC
  216.         PUSH   PSW
  217.         CLR    ET0
  218.         CLR    ET1              ;關(guān)T1中斷
  219.         MOV    A , NUMT1
  220.         INC    A
  221.         MOV    NUMT1 , A        ;中斷一次則相應(yīng)的增加NUMT1
  222.         CJNE   A , #5 ,  INTERT1NEXT     ;每中斷五次,即半秒,都增加KEYNUMT1
  223.         MOV    A ,KEYNUMT1
  224.         INC    A
  225.         MOV    KEYNUMT1 , A
  226.         MOV    NUMT1 , #00H       ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1
  227. INTERT1NEXT:NOP
  228.         MOV    A , NUMT2          ;中斷一次則相應(yīng)的增加NUMT1
  229.         INC    A
  230.         MOV    NUMT2 , A
  231.         CJNE   A, #5,ENDINTERT1   ;每中斷五次,即半秒,都增加KEYNUMT1
  232.         MOV    A ,   KEYNUMT2
  233.         INC    A
  234.         MOV    KEYNUMT2 , A
  235.         MOV    NUMT2 , #00H       ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1
  236. ENDINTERT1: SETB   ET1
  237.         SETB   ET0
  238.         POP    ACC
  239.         POP    PSW
  240.         RETI




  241.      ;**************
  242.      ;** 整點(diǎn)報(bào)時(shí) **
  243.      ;**************
  244. ZDBS:   MOV    A , MBUFF                  ;在整點(diǎn)時(shí),響半秒
  245.         JNZ    ZDBSEND
  246.         MOV    A , SBUFF
  247.         CJNE   A , #3CH , ZDBSEND
  248.         CLR    P3.2
  249.         ACALL  DL0FIVE
  250.         SETB   P3.2
  251. ZDBSEND:RET

  252.      ;**************
  253.      ;**定鬧顯示子程序**
  254.      ;**************
  255. ALARMDISPLAY: MOV  P1 ,#0FFH                   ;使時(shí)的十位亮
  256.         MOV    A , ALARMHBUFF2
  257.         MOVC   A ,  @A+DPTR
  258.         SETB   ACC.7
  259.         MOV    P1 ,  A
  260.         CLR    P3.0
  261.         ACALL  DL1MS
  262.         SETB   P3.0
  263.         MOV    A , ALARMHBUFF1               ;使時(shí)的個(gè)位亮
  264.         MOVC   A ,  @A+DPTR
  265.         MOV    C ,  DP
  266.         MOV    ACC.7 ,  C
  267.         MOV    P1 ,  A
  268.         CLR    P3.1
  269.         ACALL  DL1MS
  270.         SETB   P3.1
  271.         MOV    A ,ALARMMBUFF2              ;使分的十位亮
  272.         MOVC   A ,  @A+DPTR
  273.         MOV    C ,  DP
  274.         MOV    ACC.7 ,  C
  275.         MOV    P1 ,  A
  276.         CLR    P3.4
  277.         ACALL  DL1MS
  278.         SETB   P3.4
  279.         MOV    A , ALARMMBUFF1       ;使時(shí)的個(gè)位亮
  280.         MOVC   A ,  @A+DPTR
  281.         SETB   ACC.7
  282.         MOV    P1,A
  283.         CLR    P3.5
  284.         ACALL  DL1MS
  285.         SETB   P3.5
  286.         RET

  287. ;********************************
  288. ;**晚上顯示子程序****************
  289. ;********************************    ;降低顯示的占空比,數(shù)碼管進(jìn)入節(jié)能
  290. NIGHTDISPLAY:  NOP
  291.         MOV    P1 ,#0FFH
  292.         MOV    A , HBUFF2
  293.         MOVC   A ,  @A+DPTR
  294.         SETB   ACC.7
  295.         MOV    P1 ,  A
  296.         CLR    P3.0
  297.         ACALL  DL1MS                 ;亮1ms
  298.         SETB   P3.0
  299.         ACALL  DL1MS
  300.         ACALL  DL1MS                 ;暗2ms
  301.         MOV    A , HBUFF1
  302.         MOVC   A ,  @A+DPTR
  303.         MOV    C ,  DP
  304.         MOV    ACC.7 ,  C
  305.         MOV    P1 ,  A
  306.         CLR    P3.1
  307.         ACALL  DL1MS
  308.         SETB   P3.1
  309.         ACALL  DL1MS
  310.         ACALL  DL1MS
  311.         MOV    A ,MBUFF2
  312.         MOVC   A ,  @A+DPTR
  313.         MOV    C ,  DP
  314.         MOV    ACC.7 ,  C
  315.         MOV    P1 ,  A
  316.         CLR    P3.4
  317.         ACALL  DL1MS
  318.         SETB   P3.4
  319.         ACALL  DL1MS
  320.         ACALL  DL1MS
  321.         MOV    A , MBUFF1
  322.         MOVC   A ,  @A+DPTR
  323.         SETB   ACC.7
  324.         MOV    P1,A
  325.         CLR    P3.5
  326.         ACALL  DL1MS
  327.         SETB   P3.5
  328.         ACALL  DL1MS
  329.         ACALL  DL1MS
  330.         RET

  331.      ;**************
  332.      ;**顯示子程序**
  333.      ;**************
  334. DISPLAY: MOV   P1 ,#0FFH
  335.         MOV    A , HBUFF2
  336.         MOVC   A ,  @A+DPTR
  337.         SETB   ACC.7
  338.         MOV    P1 ,  A
  339.         CLR    P3.0
  340.         ACALL  DL1MS
  341.         SETB   P3.0

  342.         MOV    A , HBUFF1
  343.         MOVC   A ,  @A+DPTR
  344.         MOV    C ,  DP
  345.         MOV    ACC.7 ,  C
  346.         MOV    P1 ,  A
  347.         CLR    P3.1
  348.         ACALL  DL1MS
  349.         SETB   P3.1

  350.         MOV    A ,MBUFF2
  351.         MOVC   A ,  @A+DPTR
  352.         MOV    C ,  DP
  353.         MOV    ACC.7 ,  C
  354.         MOV    P1 ,  A
  355.         CLR    P3.4
  356.         ACALL  DL1MS
  357.         SETB   P3.4
  358.         MOV    A , MBUFF1
  359.         MOVC   A ,  @A+DPTR
  360.         SETB   ACC.7
  361.         MOV    P1,A
  362.         CLR    P3.5
  363.         ACALL  DL1MS
  364.         SETB   P3.5
  365.         RET

  366. TAB:    DB 88H,0BBH,94H,91H,0A3H ; 0 1 2 3 4
  367.         DB 0C1H,0C0H,9BH,80H,81H ; 5 6 7 8 9

  368.      ;**************
  369.      ;***延時(shí)程序***
  370.      ;**************

  371. DL1MS:  MOV    R6 ,  #20                  ;延時(shí)1ms
  372. DL11:   MOV    R7 ,  #25
  373. DL12:   DJNZ   R7 ,  DL12
  374.         DJNZ   R6 ,  DL11
  375.         RET

  376. DL100MS:MOV    R6 ,  #200                 ;延時(shí)100ms
  377. DL100MS1:MOV   R7 ,  #250
  378. DL100MS2:DJNZ  R7 ,  DL100MS2
  379.          DJNZ  R6 ,  DL100MS1
  380.          RET

  381. DL11S:  MOV    R5 , #10
  382. DL1S0:  MOV    R6 ,  #200              ;延時(shí)1s   10*250*200
  383. DL1S1:  MOV    R7 ,  #250
  384. DL1S2:  DJNZ   R7 ,  DL1S2
  385.         DJNZ   R6 ,  DL1S1
  386.         DJNZ   R5 , DL1S0
  387.         RET

  388. DL0FIVE:MOV    R5 , #5
  389. DL0:    MOV    R6 ,  #100                          ;延時(shí)0.5s
  390. DL1:    MOV    R7 ,  #250
  391. DL2:    DJNZ   R7 ,  DL2
  392.         DJNZ   R6 ,  DL1
  393.         DJNZ   R5 , DL0
  394.         RET

  395.      ;**************
  396.      ;*T0中斷子程序*
  397.      ;**************
  398. INTERT0:PUSH   ACC
  399.         PUSH   PSW
  400.         CLR    ET0                            ;關(guān)T0中斷
  401.         MOV    A , SBUFF
  402.         CJNE   A ,#028H,  SET1
  403.         MOV    R4 , #0DCH                    ;后四十秒的初值
  404. SET1:   DJNZ   NUM , ENDINTT0               ;若還沒到1s,則退出該次中斷
  405.         MOV    NUM , #8                     ;設(shè)置NUM初值
  406.         CPL    DP
  407.         DJNZ   SBUFF , ENDINTT0             ; 若還沒到60s,則退出該次中斷
  408.         MOV    SBUFF , #03CH
  409.         MOV    R4 , #0DBH                   ;前20秒的初值

  410. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整論文下載地址(word格式 可編輯):
http://www.torrancerestoration.com/bbs/dpj-86574-1.html



相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表