|
一、課程設(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.1設(shè)計(jì)思路框圖
1.2方案論證 數(shù)碼管顯示。結(jié)構(gòu)如圖1.2所示:
圖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í)行外部程序。
圖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)封裝。
圖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ì)采用單極性接法。
圖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ī)的接口電路
圖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)和清除鍵。
圖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ì)部分模塊作介紹。
圖2.6 稱重總設(shè)計(jì)的仿真圖
圖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ì)
圖2.8 A/D轉(zhuǎn)換啟動(dòng)及數(shù)據(jù)讀取程序流程圖
圖2.9 A/D0832轉(zhuǎn)換后的顯示圖像
圖2.10 A/D574轉(zhuǎn)換后的顯示圖像 2.2.6 顯示程序設(shè)計(jì) 顯示子程序主要是來判斷是否需要顯示,以及如何去顯示,也是十分重要的程序之一。
圖2.11 顯示子程序流程圖
圖2.12 顯示啟動(dòng)按鍵按下后
圖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)法。
圖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材料清單 | | | | | | | | | | | | | | | |
3紅、透明 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
附錄2電路原理圖
附錄3實(shí)物圖
附錄4主要程序清單
- ALARMHBUFF2 EQU 77H ;鬧鈴時(shí)間的時(shí)十位計(jì)時(shí)綬沖
- ALARMHBUFF1 EQU 76H ;鬧鈴時(shí)間的時(shí)個(gè)位計(jì)時(shí)綬沖
- ALARMMBUFF2 EQU 75H ;鬧鈴時(shí)間的分十位計(jì)時(shí)綬沖
- ALARMMBUFF1 EQU 74H ;鬧鈴時(shí)間的分個(gè)位計(jì)時(shí)綬沖
- HBUFF2 EQU 73H ;時(shí)十位計(jì)時(shí)綬沖
- HBUFF1 EQU 72H ;時(shí)個(gè)位計(jì)時(shí)綬沖
- MBUFF2 EQU 71H ;分十位計(jì)時(shí)綬沖
- MBUFF1 EQU 70H ;分個(gè)位計(jì)時(shí)綬沖
- DP EQU 6FH ;控制數(shù)碼管點(diǎn)的亮暗
- NUM EQU 78H ;前四秒還是后四秒計(jì)數(shù)
- SBUFF EQU 79H ;秒十進(jìn)制計(jì)時(shí)綬沖(低四位對(duì)應(yīng)個(gè)位,高四位對(duì)應(yīng)十位)
- MBUFF EQU 7AH ;分十進(jìn)制計(jì)時(shí)綬沖
- HBUFF EQU 7BH ;時(shí)十進(jìn)制計(jì)時(shí)綬沖
- ALARMMBUFF EQU 7CH ;鬧鈴時(shí)間的分十進(jìn)制計(jì)時(shí)綬沖
- ALARMHBUFF EQU 7DH ;鬧鈴時(shí)間的時(shí)十進(jìn)制計(jì)時(shí)綬沖
- NUMT1 EQU 67H;用于控制時(shí)間調(diào)整時(shí)按鍵p3.2一次按下時(shí),計(jì)數(shù)器T1中斷的次數(shù)
- NUMT2 EQU 68H;用于控制時(shí)間調(diào)整時(shí)按鍵p3.3一次按下時(shí),計(jì)數(shù)器T1中斷的次數(shù)
- KEYNUMT1 EQU 69H ;用于存儲(chǔ)NUMT1已經(jīng)計(jì)數(shù)到第幾個(gè)半秒
- KEYNUMT2 EQU 6AH ;用于存儲(chǔ)NUMT1已經(jīng)計(jì)數(shù)到第幾個(gè)半秒
- STOREKEYNUMT2 EQU 6BH ;用于存儲(chǔ)當(dāng)前KEYNUMT1的值,以和下次做比較,看是否有變化
- STOREKEYNUMT1 EQU 6CH ;用于存儲(chǔ)當(dāng)前KEYNUMT2的值,以和下次做比較,看是否有變化
- ORG 0000H
- AJMP START
- ORG 000BH
- MOV TH0 , #0BH ;設(shè)置計(jì)數(shù)初值 ,R4用來存儲(chǔ)低位的初值
- MOV TL0 , R4
- AJMP INTERT0
- ORG 001BH
- AJMP INTERT1
- ORG 0040H
- START: MOV NUMT1 , #00H
- MOV NUMT2 , #00H
- MOV KEYNUMT1 , #00H
- MOV KEYNUMT2 , #00H
- MOV STOREKEYNUMT2 , #00H
- MOV STOREKEYNUMT1 , #00H
- MOV NUM , #8
- MOV DPTR , #TAB
- MOV ALARMHBUFF , #18H ;置鬧鈴時(shí)間初始值為18:55
- MOV ALARMMBUFF , #55H
- MOV ALARMHBUFF2, #01H
- MOV ALARMHBUFF1, #08H
- MOV ALARMMBUFF2 , #05H
- MOV ALARMMBUFF1 , #05H
- MOV HBUFF2, #01H ;置鬧鐘時(shí)間為18:53
- MOV HBUFF1, #08H
- MOV MBUFF2 , #05H
- MOV MBUFF1 , #03H
- MOV HBUFF , #18H
- MOV MBUFF , #53H
- MOV SBUFF , #3CH ;置初始秒為60,計(jì)時(shí)時(shí)減
- MOV TCON , #05H ;下降沿觸發(fā)
- MOV TMOD , #11H ;初始化定時(shí)器,T0 ,T1 16位計(jì)時(shí)
- MOV TH0 , #0BH ;設(shè)置計(jì)數(shù)初值,125ms計(jì)時(shí)
- MOV TL0 , #0DBH
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
- MOV TL1 , #0B0H
- MOV IE , #82H ;開T0中斷
- SETB PT0 ;T0中斷優(yōu)先級(jí)最高
- SETB TR0 ;允許T0計(jì)數(shù)
- SETB P3.2
- SETB P3.3
- START1: MOV A , HBUFF ; 顯示時(shí),7點(diǎn)以前及21點(diǎn)以后亮度調(diào)暗
- SUBB A , #7H
- JC START2
- MOV A , HBUFF
- SUBB A , #21H
- JNC START2
- ACALL DISPLAY
- ACALL ZDBS
- AJMP START3
- START2: ACALL NIGHTDISPLAY
- START3: MOV A ,ALARMHBUFF ;檢測(cè)是否是定鬧時(shí)間
- CJNE A , HBUFF , START4
- MOV A , ALARMMBUFF
- CJNE A , MBUFF ,START4
- MOV C, DP ;若是定鬧時(shí)間,則利用dp的值來決定蜂鳴
- MOV P3.2, C
- MOV A , SBUFF
- JNZ START1 ;若還沒到1分鐘,則繼續(xù)蜂鳴
- SETB P3.2
- START4: JNB P3.2,ADJUSTTIME1 ;循環(huán)等待中斷,并檢測(cè)是否鍵按下,若是,則進(jìn)入相應(yīng)程序
- JNB P3.3,ADJUSTTIME2
- AJMP START1
- AJMP START1
-
- ;****************
- ;*int0中斷子程序*
- ;****************
-
- ADJUSTTIME1:NOP
- MOV KEYNUMT1 ,#00H
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
- MOV TL1 , #0B0H
- SETB ET1 ;開T1中斷
- SETB PT1 ;設(shè)T1中斷優(yōu)先級(jí)最高
- SETB TR1 ;允許T1計(jì)時(shí)
- MOV STOREKEYNUMT1 , KEYNUMT1 ;存儲(chǔ)當(dāng)前次KEYNUMT1的值
- TIME1_1:ACALL DISPLAY
- MOV A , KEYNUMT1
- CJNE A , STOREKEYNUMT1,TIME1_2 ;若當(dāng)前KEYNUMT1的值與上一次的值不等,則時(shí)間加1分,否則繼續(xù)循環(huán),等等至半分鐘
- AJMP TIME1_3
- TIME1_2:MOV STOREKEYNUMT1 , KEYNUMT1 ;加1后存儲(chǔ)當(dāng)前的KEYNUMT1的值
- ACALL ADDBUFF0 ;分加1
- TIME1_3:JNB P3.2,TIME1_1 ;若p3.2已關(guān),則退出增時(shí),否則繼續(xù)循環(huán)
- CLR ET1
- CLR PT1
- CLR TR1
- AJMP START1
-
- ;********************
- ;*****時(shí)間增1分******
- ;********************
-
- ADDBUFF0:MOV A , MBUFF ; 若按鍵小于1s,則分增1
- ADD A , #1
- DA A
- MOV MBUFF , A
- ANL A , #0FH
- MOV MBUFF1 , A
- MOV A , MBUFF
- SWAP A
- ANL A , #0FH
- MOV MBUFF2 , A
- MOV A , MBUFF
- CJNE A , #60H , ADDBUFF1
- MOV MBUFF , #00H
- MOV MBUFF2 , #00H
- MOV MBUFF1 , #00H
- MOV A , HBUFF ;時(shí)增1
- ADD A , #1
- DA A
- MOV HBUFF , A
- ANL A , #0FH
- MOV HBUFF1 , A
- MOV A , HBUFF
- SWAP A
- ANL A , #0FH
- MOV HBUFF2 , A
- MOV A , HBUFF
- CJNE A , #24H , ADDBUFF1 ;若沒到24小時(shí),則不必初值置0
- MOV HBUFF , #00H
- MOV HBUFF2 , #00H
- MOV HBUFF1 , #00H
- ADDBUFF1:RET
-
- ;*********************************
- ;*int1中斷子程序******************
- ;*********************************
-
- ADJUSTTIME2: NOP
- ACALL DL100MS
- MOV C , P3.3
- JC TIME2_6 ;如果(P3.3按鍵<100ms以上) 則不做處理
- MOV KEYNUMT2 , #00H ;否則進(jìn)入定鬧設(shè)置
- MOV STOREKEYNUMT2 , KEYNUMT2 ;記錄當(dāng)前NUMT2的數(shù)據(jù),以看下次有沒改變
- TIME2_1:NOP
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
- MOV TL1 , #0B0H
- SETB ET1 ;開T1中斷
- SETB PT1 ;設(shè)T1中斷優(yōu)先級(jí)最高
- SETB TR1 ;允許T1計(jì)時(shí)
- TIME2_2:ACALL ALARMDISPLAY
- MOV A , KEYNUMT2
- CJNE A , STOREKEYNUMT2 ,TIME2_3
- AJMP TIME2_4
- TIME2_3: MOV STOREKEYNUMT2 , KEYNUMT2
- MOV A , ALARMMBUFF ; 若按鍵小于1s,則分增1
- ADD A , #1
- DA A
- MOV ALARMMBUFF , A
- ANL A , #0FH
- MOV ALARMMBUFF1 , A
- MOV A , ALARMMBUFF
- SWAP A
- ANL A , #0FH
- MOV ALARMMBUFF2 , A
- MOV A , ALARMMBUFF
- CJNE A , #60H , TIME2_4
- MOV ALARMMBUFF , #00H
- MOV ALARMMBUFF2 , #00H
- MOV ALARMMBUFF1 , #00H
- MOV A , ALARMHBUFF ;時(shí)增1
- ADD A , #1
- DA A
- MOV ALARMHBUFF , A
- ANL A , #0FH
- MOV ALARMHBUFF1 , A
- MOV A , ALARMHBUFF
- SWAP A
- ANL A , #0FH
- MOV ALARMHBUFF2 , A
- MOV A , ALARMHBUFF
- CJNE A , #24H , TIME2_4 ;若沒到24小時(shí),則初值不必置0
- MOV ALARMHBUFF , #00H
- MOV ALARMHBUFF2 , #00H
- MOV ALARMHBUFF1 , #00H
- TIME2_4:NOP
- JNB P3.3,TIME2_2 ;若按鍵已經(jīng)未按,則退出循環(huán)
- CLR ET1
- CLR TR1
- MOV KEYNUMT2 , #00H
- MOV NUMT2 , #00H
- MOV R2 , #10 ; 直到p3.3 20s鐘內(nèi)都是未按,此時(shí)復(fù)原數(shù)據(jù),即退出設(shè)置
- TIME2_7:MOV R1 , #200
- TIME2_5:ACALL ALARMDISPLAY
- ACALL DL1MS
- JNB P3.3 , TIME2_1
- DJNZ R1 , TIME2_5
- DJNZ R2 , TIME2_7
- TIME2_6:CLR ET1
- CLR PT1
- CLR TR1
- LJMP START1
- ;***********************************
- ;**T1中斷子程序*********************
- ;***********************************
-
- INTERT1:NOP
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計(jì)時(shí),用于調(diào)整時(shí)間
- MOV TL1 , #0B0H
- PUSH ACC
- PUSH PSW
- CLR ET0
- CLR ET1 ;關(guān)T1中斷
- MOV A , NUMT1
- INC A
- MOV NUMT1 , A ;中斷一次則相應(yīng)的增加NUMT1
- CJNE A , #5 , INTERT1NEXT ;每中斷五次,即半秒,都增加KEYNUMT1
- MOV A ,KEYNUMT1
- INC A
- MOV KEYNUMT1 , A
- MOV NUMT1 , #00H ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1
- INTERT1NEXT:NOP
- MOV A , NUMT2 ;中斷一次則相應(yīng)的增加NUMT1
- INC A
- MOV NUMT2 , A
- CJNE A, #5,ENDINTERT1 ;每中斷五次,即半秒,都增加KEYNUMT1
- MOV A , KEYNUMT2
- INC A
- MOV KEYNUMT2 , A
- MOV NUMT2 , #00H ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1
- ENDINTERT1: SETB ET1
- SETB ET0
- POP ACC
- POP PSW
- RETI
-
-
-
-
- ;**************
- ;** 整點(diǎn)報(bào)時(shí) **
- ;**************
- ZDBS: MOV A , MBUFF ;在整點(diǎn)時(shí),響半秒
- JNZ ZDBSEND
- MOV A , SBUFF
- CJNE A , #3CH , ZDBSEND
- CLR P3.2
- ACALL DL0FIVE
- SETB P3.2
- ZDBSEND:RET
-
- ;**************
- ;**定鬧顯示子程序**
- ;**************
- ALARMDISPLAY: MOV P1 ,#0FFH ;使時(shí)的十位亮
- MOV A , ALARMHBUFF2
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1 , A
- CLR P3.0
- ACALL DL1MS
- SETB P3.0
- MOV A , ALARMHBUFF1 ;使時(shí)的個(gè)位亮
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.1
- ACALL DL1MS
- SETB P3.1
- MOV A ,ALARMMBUFF2 ;使分的十位亮
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.4
- ACALL DL1MS
- SETB P3.4
- MOV A , ALARMMBUFF1 ;使時(shí)的個(gè)位亮
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1,A
- CLR P3.5
- ACALL DL1MS
- SETB P3.5
- RET
-
- ;********************************
- ;**晚上顯示子程序****************
- ;******************************** ;降低顯示的占空比,數(shù)碼管進(jìn)入節(jié)能
- NIGHTDISPLAY: NOP
- MOV P1 ,#0FFH
- MOV A , HBUFF2
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1 , A
- CLR P3.0
- ACALL DL1MS ;亮1ms
- SETB P3.0
- ACALL DL1MS
- ACALL DL1MS ;暗2ms
- MOV A , HBUFF1
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.1
- ACALL DL1MS
- SETB P3.1
- ACALL DL1MS
- ACALL DL1MS
- MOV A ,MBUFF2
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.4
- ACALL DL1MS
- SETB P3.4
- ACALL DL1MS
- ACALL DL1MS
- MOV A , MBUFF1
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1,A
- CLR P3.5
- ACALL DL1MS
- SETB P3.5
- ACALL DL1MS
- ACALL DL1MS
- RET
-
- ;**************
- ;**顯示子程序**
- ;**************
- DISPLAY: MOV P1 ,#0FFH
- MOV A , HBUFF2
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1 , A
- CLR P3.0
- ACALL DL1MS
- SETB P3.0
-
- MOV A , HBUFF1
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.1
- ACALL DL1MS
- SETB P3.1
-
- MOV A ,MBUFF2
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.4
- ACALL DL1MS
- SETB P3.4
- MOV A , MBUFF1
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1,A
- CLR P3.5
- ACALL DL1MS
- SETB P3.5
- RET
-
- TAB: DB 88H,0BBH,94H,91H,0A3H ; 0 1 2 3 4
- DB 0C1H,0C0H,9BH,80H,81H ; 5 6 7 8 9
-
- ;**************
- ;***延時(shí)程序***
- ;**************
-
- DL1MS: MOV R6 , #20 ;延時(shí)1ms
- DL11: MOV R7 , #25
- DL12: DJNZ R7 , DL12
- DJNZ R6 , DL11
- RET
-
- DL100MS:MOV R6 , #200 ;延時(shí)100ms
- DL100MS1:MOV R7 , #250
- DL100MS2:DJNZ R7 , DL100MS2
- DJNZ R6 , DL100MS1
- RET
-
- DL11S: MOV R5 , #10
- DL1S0: MOV R6 , #200 ;延時(shí)1s 10*250*200
- DL1S1: MOV R7 , #250
- DL1S2: DJNZ R7 , DL1S2
- DJNZ R6 , DL1S1
- DJNZ R5 , DL1S0
- RET
-
- DL0FIVE:MOV R5 , #5
- DL0: MOV R6 , #100 ;延時(shí)0.5s
- DL1: MOV R7 , #250
- DL2: DJNZ R7 , DL2
- DJNZ R6 , DL1
- DJNZ R5 , DL0
- RET
-
- ;**************
- ;*T0中斷子程序*
- ;**************
- INTERT0:PUSH ACC
- PUSH PSW
- CLR ET0 ;關(guān)T0中斷
- MOV A , SBUFF
- CJNE A ,#028H, SET1
- MOV R4 , #0DCH ;后四十秒的初值
- SET1: DJNZ NUM , ENDINTT0 ;若還沒到1s,則退出該次中斷
- MOV NUM , #8 ;設(shè)置NUM初值
- CPL DP
- DJNZ SBUFF , ENDINTT0 ; 若還沒到60s,則退出該次中斷
- MOV SBUFF , #03CH
- MOV R4 , #0DBH ;前20秒的初值
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
完整論文下載地址(word格式 可編輯):
http://www.torrancerestoration.com/bbs/dpj-86574-1.html
|
|