|
一、課程設(shè)計(論文)的內(nèi)容 以89C51單片機為核心,制作一個LED顯示的雙精度電子稱設(shè)計。具體要求: 1、用4只LED數(shù)碼管輸出顯示重量。 2、可通過按鍵設(shè)置重量功能,且停鬧無須手工操作。 3、可通過按鍵設(shè)置重量的單位。 4、稱重時的誤差少于10g。 二、課程設(shè)計(論文)的要求與數(shù)據(jù) 1、系統(tǒng)框圖、方案論證; 2、各部分的硬件電路原理圖及功能說明; 3、程序流程圖及分析; 4、系統(tǒng)調(diào)試與分析; 5、源程序清單。 三、課程設(shè)計(論文)應(yīng)完成的工作 1. 畫出系統(tǒng)框圖,論證系統(tǒng)設(shè)計方案; 2、器件選型,給出系統(tǒng)各個組成部分的硬件電路原理圖; 3、給出程序流程圖; 4、進(jìn)行源程序的設(shè)計及調(diào)試; 5、撰寫課程設(shè)計報告的。 四、課程設(shè)計(論文)進(jìn)程安排 序號 | 設(shè)計(論文)各階段內(nèi)容 | 地點 | 起止日期 | 1 | 選擇課題,明確設(shè)計要求,查閱資料 | 校內(nèi) | 5.12 | 2 | 方案論證、系統(tǒng)總體設(shè)計 | 校內(nèi) | 5.13~5.14 | 3 | 硬件電路原理圖設(shè)計 | 校內(nèi) | 5.15~5.16 | 4 | 程序流程圖的設(shè)計、源程序的編制及系統(tǒng)調(diào)試 | 校內(nèi) | 5.17~5.18 | 5 | 撰寫課程設(shè)計報告 | 校內(nèi) | 5.19~5.20 | 6 | | | |
五、應(yīng)收集的資料及主要參考文獻(xiàn) [1] MCS-51系列單片微型計算機及其應(yīng)用 [2] MCS-51系列單片機實用設(shè)計 發(fā)出任務(wù)書日期: 2017年 05月12 日 指導(dǎo)教師簽名: 計劃完成日期: 2017年 05月20 日 教學(xué)單位責(zé)任人簽章:
目錄 1系統(tǒng)分析 1.1功能要求 1.2方案論證 2 系統(tǒng)設(shè)計 2.1 系統(tǒng)硬件電路的設(shè)計 2.2 系統(tǒng)程序的設(shè)計 9 3 結(jié)束語 18 參考文獻(xiàn) 19 附錄1材料清單 20 附錄2電路原理圖 21 附錄3實物圖 22 附錄4主要程序清單 23
1系統(tǒng)分析 1.1功能要求 本課題的主要設(shè)計思路是:利用壓力傳感器采集因壓力變化產(chǎn)生的電壓信號,經(jīng)過電壓放大電路放大,然后再經(jīng)過模數(shù)轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號,最后把數(shù)字信號送入單片機。單片機經(jīng)過相應(yīng)的處理后,得出當(dāng)前所稱物品的重量及總額,然后再顯示出來。此外,還可通過鍵盤設(shè)定所稱物品的價格。 本文主要主要以下幾個方面的工作: (1)詳細(xì)講解了稱重器工作原理。 (2)對稱重器系統(tǒng)進(jìn)行總體方案的設(shè)計。 (3)對于稱重器的硬件系統(tǒng),重點介紹關(guān)于精度、轉(zhuǎn)換速率的壓力傳感器和A/D轉(zhuǎn)換模塊器件的選取。 (4)對于稱重器的軟件系統(tǒng),通過解說LCD液晶顯示的使用及鍵盤的工作原理,對于主程序的編寫與調(diào)試提供重要的依據(jù)。 (5)依據(jù)稱重系統(tǒng)的總電路,通過Keil軟件C語言編程和Proteus仿真,實現(xiàn)模擬的稱重顯示。 (6)對稱重系統(tǒng)的測量值與顯示值的差值,進(jìn)行系統(tǒng)的調(diào)試與誤差校正。 主要技術(shù)指標(biāo)為:稱量范圍0~10Kg;分度值0.01kg;精度等級Ⅲ級;電源DC1.5V(一節(jié)5號電池供電)。 這種高精度智能電子秤體積小、計量準(zhǔn)確、攜帶方便,集重量稱量功能與價格計算功能于一體,能夠滿足商業(yè)貿(mào)易和居民家庭的使用需求
1.001.jpg (8.13 KB, 下載次數(shù): 98)
下載附件
2017-6-2 16:59 上傳
圖1.1設(shè)計思路框圖
1.2方案論證 數(shù)碼管顯示。結(jié)構(gòu)如圖1.2所示:
1.002.jpg (8.96 KB, 下載次數(shù): 97)
下載附件
2017-6-2 16:59 上傳
圖1.2數(shù)碼管顯示方案 此方案利用數(shù)碼管顯示物體重量,簡單可行,可以采用內(nèi)部帶有模數(shù)轉(zhuǎn)換功能的單片機。此設(shè)計的硬件部分簡單,接口電路易于實現(xiàn),并且在編程時大大減少程序量,在電路結(jié)構(gòu)上只有簡單的輸出輸入關(guān)系。缺點是:硬件部分簡單,雖然可以實現(xiàn)電子稱基本的稱重功能,但是不能實現(xiàn)外部數(shù)據(jù)的輸入,無法實時地設(shè)定各種控制參數(shù)。由于數(shù)碼管只能實現(xiàn)簡單的數(shù)字和英文字符的顯示,不能顯示漢字以及其他的復(fù)雜字符,不能達(dá)到顯示購物清單的要求。又因為采用了具有模數(shù)轉(zhuǎn)換功能的單片機,系統(tǒng)電路過于簡單,系統(tǒng)硬件的擴展必受到限制,電子秤的功能過于單一,達(dá)不到設(shè)計的標(biāo)準(zhǔn)。 1
2 系統(tǒng)設(shè)計 2.1 系統(tǒng)硬件電路的設(shè)計 2.1.1 AT89S52的最小系統(tǒng)電路構(gòu)成 AT89S52單片機的最小系統(tǒng)由時鐘電路、復(fù)位電路、電源電路及單片機構(gòu)成。單片機的時鐘信號用來提供單片機片內(nèi)各種操作的時間基準(zhǔn),復(fù)位操作則使單片機的片內(nèi)電路初始化,使單片機從一種確定的初態(tài)開始運行。 單片機的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。在引腳XTAL1和XTAL2外接晶體振蕩器(簡稱晶振)或陶瓷諧振器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機內(nèi)部有一個高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。 當(dāng)單片機的復(fù)位引腳RST出現(xiàn)2個機器周期以上的高電平時,單片機就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機就處于循環(huán)復(fù)位狀態(tài)。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位和上電或開關(guān)復(fù)位。上電復(fù)位要求接通電源后,自動實現(xiàn)復(fù)位操作。 上電或開關(guān)復(fù)位要求電源接通后,單片機自動復(fù)位,并且在單片機運行期間,用開關(guān)操作也能使單片機復(fù)位。單片機的復(fù)位操作使單片機進(jìn)入初始化狀態(tài),其中包括使程序計數(shù)器PC=0000H,這表明程序從0000H地址單元開始執(zhí)行。 系統(tǒng)復(fù)位是任何微機系統(tǒng)執(zhí)行的第一步,使整個控制芯片回到默認(rèn)的硬件狀態(tài)下。51單片機的復(fù)位是由RESET引腳來控制的,此引腳與高電平相接超過24個振蕩周期后,51單片機即進(jìn)入芯片內(nèi)部復(fù)位狀態(tài),而且一直在此狀態(tài)下等待,直到RESET引腳轉(zhuǎn)為低電平后,才檢查EA引腳是高電平或低電平,若為高電平則執(zhí)行芯片內(nèi)部的程序代碼,若為低電平便會執(zhí)行外部程序。
1.003.jpg (47.87 KB, 下載次數(shù): 109)
下載附件
2017-6-2 16:59 上傳
圖2.1AT89S52最小系統(tǒng)電路 2.2.2 A/D轉(zhuǎn)換器與AT89S52單片機接口電路 AD574是美國Analog Device公司生產(chǎn)的12位單片A/D轉(zhuǎn)換器。它采用逐次逼近型的A/D轉(zhuǎn)換器,最大轉(zhuǎn)換時間為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 (13.45 KB, 下載次數(shù): 108)
下載附件
2017-6-2 16:59 上傳
圖2.2AD574芯片引腳圖 A/D574有5根控制線,邏輯控制輸入信號有: A0:字節(jié)選擇控制信號。 CE:片啟動信號。 /CS:片選信號。當(dāng)/CS=0,CE=1同時滿足時,AD574才處于工作狀態(tài),否則工作被禁止。 R/-C:讀數(shù)據(jù)/轉(zhuǎn)換控制信號。 12/-8:數(shù)據(jù)輸出格式選擇控制信號。當(dāng)其為高電平時,對應(yīng)12位并行輸出;為低電平時,對應(yīng)8位輸出。 當(dāng)R/-C=0,啟動A/D轉(zhuǎn)換:當(dāng)A0=0,啟動12位A/D轉(zhuǎn)換方式;當(dāng)A0=1,啟動8位轉(zhuǎn)換方式。 當(dāng)R/-C=1,數(shù)據(jù)輸出,A0=0時,高8位數(shù)據(jù)有效;A0=1時,低4位數(shù)據(jù)有效,中間4位為0,高4位為三態(tài)。 輸出信號有: STS:工作狀態(tài)信號線。當(dāng)啟動A/D進(jìn)行轉(zhuǎn)換時,STS為高電平;當(dāng)A/D轉(zhuǎn)換結(jié)束時為低電平。則可以利用此線驅(qū)動一信號二極管的亮滅,從而表示是否處于A/D轉(zhuǎn)換。 由于對AD574 的8、10、12引腳的外接電路有不同連接方式,所以AD574與單片機的接口方案有兩種,一種是單極性接法,可實現(xiàn)輸入信號0~10V或者0~20V的轉(zhuǎn)換;另一種為雙極性接法,可實現(xiàn)輸入信號-5~+5V或者-10~+10V之間轉(zhuǎn)換。本次設(shè)計采用單極性接法。
1.005.jpg (34.44 KB, 下載次數(shù): 90)
下載附件
2017-6-2 16:59 上傳
圖2.3 AD574與AT89S52的接線圖 根據(jù)芯片管腳的原理,無論啟動、轉(zhuǎn)換還是結(jié)果輸出,都要保證CE端為高電平,所以可以將單片機的/RD引腳和/WR端通過與非門與AD574的CE端連接起來。轉(zhuǎn)換結(jié)果分高8位、低4位與P0口相連,分兩次讀入,所以12/-8端接地。同時,為了使CS、A0、R/-C在讀取轉(zhuǎn)換結(jié)果時保持相應(yīng)的電平,可以將來自單片機的控制信號經(jīng)74LS373鎖存后再接入。CPU可采用中斷、查詢或者程序延時等方式讀取AD574的轉(zhuǎn)換結(jié)果,本設(shè)計采用查詢方式。 2.1.3 顯示電路與AT89S52單片機的接口電路
1.006.jpg (65.83 KB, 下載次數(shù): 95)
下載附件
2017-6-2 16:59 上傳
圖2.4 單片機與LCD接線圖 3.4 鍵盤電路與AT89S52的接口電路設(shè)計 鍵盤一般是由若干按鍵組成的開關(guān)矩陣,若按照其接線方式的不同,可分為兩種: 一種是獨立式接法,一種是矩陣式接法;若按照按鍵的結(jié)構(gòu)原理,可分為兩類:一類是觸點式開關(guān)按鍵,如機械式開關(guān)、導(dǎo)電橡膠式開關(guān)等,一類是無觸點式開關(guān)按鍵,如電氣式按鍵、磁感應(yīng)按鍵等。前者造價低,后者壽命長。 按鍵按下時,與此鍵相連的行線與列線導(dǎo)通,行線在無鍵按下時處于高電平。顯然如果讓所有的列線也處在高電平,那么按鍵按下與否不會引起行線電平的變化,因此,必須使所有的列線處在低電平。只有這樣,當(dāng)按鍵按下時,該鍵所在的行電平才會由高電平變?yōu)榈碗娖健PU根據(jù)行電平的變化,便能判定相應(yīng)的行有鍵按下。 對應(yīng)鍵盤的相應(yīng)取決于鍵盤的工作方式,鍵盤的工作方式應(yīng)根據(jù)實際應(yīng)用系統(tǒng)中CPU的工作情況而定,其選取的原則既要保證CPU能及時響應(yīng)按鍵操作,又不要過多的占用CPU的工作時間。通常,鍵盤的工作方式有3種,即編程掃描、定時掃描和中斷掃描。 ① 編程掃描方式:利用CPU完成其他工作的空余時間,調(diào)用鍵盤掃描子程序來響應(yīng)鍵盤輸入要求。在執(zhí)行鍵功能程序時,CPU不再響應(yīng)鍵輸入要求,直到CPU重新掃描鍵值為止。 ② 定時掃描方式,定時掃描方式就是每隔一段時間對鍵盤掃描一次,它利用單片機內(nèi)部的定時器產(chǎn)生一定時間(列如10ms)的定時,當(dāng)定時時間到,就會產(chǎn)生定時器溢出中斷。CPU響應(yīng)中斷后對鍵盤進(jìn)行掃描,并在有鍵按下時識別出該鍵,再執(zhí)行該鍵的子程序。 ③ 中斷掃描方式:采用上述兩種掃描方式時,無論是否有鍵按下,CPU都要定時掃描鍵盤,而單片機應(yīng)用系統(tǒng)工作時,并非經(jīng)常需要鍵盤輸入,因此,CPU經(jīng)常處于空掃描狀態(tài)。為提高CPU工作效率,可采用中斷掃描工作方式。其工作過程如下:當(dāng)無鍵按下時,CPU處理自己程序,當(dāng)有鍵按下時,產(chǎn)生中斷請求,CPU轉(zhuǎn)去執(zhí)行鍵盤掃描子程序,并識別鍵號。 說明此(低電平)行沒有鍵被按下。接著進(jìn)行下一行“0”行掃描與列讀入,知道4行關(guān)不檢查完為止,若無鍵按下,則返回。 矩陣式鍵盤的結(jié)構(gòu)與工作原理: 在鍵盤中按鍵數(shù)量較多時,為了減少I/矩陣式鍵盤有兩種識別鍵是否被按下的方法:行掃描法和線反轉(zhuǎn)法。行掃描法又稱逐行零掃描查詢法,及逐行輸出行掃描信號“0”,使各行依次為低電平,然后分別讀取列數(shù)據(jù),檢查此(低電平)行中是否有鍵被按下。如果讀得某列線為低電平,則表示此(低電平)行線與列線的交叉處有鍵按下,再對該鍵該鍵譯碼計算,得到鍵值,然后轉(zhuǎn)入該鍵的功能子程序入口地址;如果沒有任何一根列線為低電平,則O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。 矩陣式鍵盤的按鍵識別方法 :確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如下圖所示鍵盤,介紹過程如下。判斷鍵盤中有無鍵按下 將全部行線R0-R3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。 在本系統(tǒng)中鍵盤采用矩陣式鍵盤并采用編程掃描的工作方式。鍵盤為4 X 4鍵盤,包括0、1、2、3、4、5、6、7、8、9、十個數(shù)字及確認(rèn)和清除鍵。
1.007.jpg (43.45 KB, 下載次數(shù): 82)
下載附件
2017-6-2 16:59 上傳
圖2.5 單片機與鍵盤接口電路 各個按鍵的功能說明: 數(shù)字鍵:.、0、1、2、3、4、5、6、7、8、9被按下時直接顯示在LCD液晶顯示屏上。 啟動鍵:當(dāng)按下此鍵時,LCD液晶顯示開啟。 單價鍵:當(dāng)此按鍵被按下時,此刻要求輸入稱重物品單價,即要求按下數(shù)字鍵。 確定鍵:前提是單價已輸入完畢,當(dāng)此按鍵被按下時,LCD屏幕顯示當(dāng)前稱重物品的總價格。 總價鍵:當(dāng)稱重物品單價不變、重量改變時,按下此按鍵時,LCD液晶屏上顯示當(dāng)前重量物品的總價格。 清除鍵:當(dāng)此鍵按下時,單價及總價處的顯示清零。 2.2 系統(tǒng)程序的設(shè)計 2.2.1 主程序設(shè)計 在單片機應(yīng)用系統(tǒng)的開發(fā)中,軟件的設(shè)計是最復(fù)雜和困難的,大部分情況下工作量都較大,特別是對那些控制系統(tǒng)比較復(fù)雜的情況。如果是機電一體化的設(shè)計人員,往往需要同時考慮單片機的軟硬件資源分配。本系統(tǒng)的軟件設(shè)計主要分為系統(tǒng)初始化、按鍵、顯示處理及信號頻率輸入處理。 程序設(shè)計是一件復(fù)雜的工作,為了把復(fù)雜的工作條理化,就要有相應(yīng)的步驟和方法。其步驟可概括為以下三點: (1) 分析系統(tǒng)控制要求,確定算法:對復(fù)雜的問題進(jìn)行具體的分析,找出合理的計算方法及適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),從而確定編寫程序的步驟。這是能否編制出高質(zhì)量程序的關(guān)鍵。 (2) 根據(jù)算法畫流程圖:畫程序框圖可以把算法和解題步驟逐步具體化,以減少出錯的可能性。 (3)編寫程序:根據(jù)程序框圖所表示的算法和步驟,選用適當(dāng)?shù)闹噶钆帕衅饋恚瑯?gòu)成一個有機的整體,即程序。 程序數(shù)據(jù)的一種理想方法是結(jié)構(gòu)化程序設(shè)計方法。結(jié)構(gòu)化程序設(shè)計是對利用到的控制結(jié)構(gòu)類程序做適當(dāng)?shù)南拗疲貏e是限制轉(zhuǎn)向語句(或指令)的使用,從而控制了程序的復(fù)雜性,力求程序的上、下文順序與執(zhí)行流程保持一致性,使程序易讀易理解,減少邏輯錯誤和易于修改、調(diào)試。根據(jù)系統(tǒng)的控制任務(wù),本系統(tǒng)的軟件設(shè)計主要由主程序、初始化程序、A/D轉(zhuǎn)換子程序、鍵盤掃描子程序和顯示子程序等組成。 2.2.2 C語言在單片機中的應(yīng)用 C語言是一種通用的計算機程序設(shè)計語言,在國際上非常流行。它既可以用來編寫計算機的系統(tǒng)程序,也可以用來編寫一般的應(yīng)用程序。以前計算機的系統(tǒng)軟件主要用匯編語言編寫,單片機應(yīng)用系統(tǒng)更是如此。C語言是當(dāng)前最流行的程序設(shè)計語言,它像其它高級語言一樣,面向用戶,面向解題的過程,編程者不必熟悉具體的計算機內(nèi)部結(jié)構(gòu)和指令;C語言又像匯編語言一樣,可以對機器硬件進(jìn)行操作。如進(jìn)行端口0,1操作、位操作、地址操作,并可內(nèi)嵌匯編指令,將匯編指令當(dāng)作它的語句一樣。我們知道,匯編語言將涉及計算機硬件,所以C語言又像低級語言一樣,可以對計算機硬件進(jìn)行控制,因此人們把它稱為介于高級語言與低級語言之間的一種中級語言。正是因為C語言具有這樣的特性,所以很適合編寫要對硬件進(jìn)行操作的軟件程序。本文采用C語言進(jìn)行編寫.因為經(jīng)系統(tǒng)軟件比較,本系統(tǒng)存儲量較大,因此必須應(yīng)用C語言編程了。 4.1.2 電子稱的軟件設(shè)計與實現(xiàn) 電子稱軟件設(shè)計均采用模塊化設(shè)計,整個程序包括主程序、A/D轉(zhuǎn)換模塊程序、鍵盤掃描程序、液晶顯示子程序等模塊。所有程序均采用C語言編寫。電子計價秤的軟件設(shè)計思路說明如下:主程序的作用為程序初始化,計算單價×物體重量(單價通過鍵盤給出,物體重量通過壓力傳感器獲得),并實時顯示十進(jìn)制的物重,單價,總價。設(shè)定T0為計數(shù)工作方式,T1為定時工作方式。其中R0為標(biāo)志位寄存器當(dāng)為OOH時為正常顯示方式。當(dāng)為01H時為累計顯示方式,在T1定時中斷程序中。一秒鐘采樣物料重量(已轉(zhuǎn)成脈沖頻率),并賦值重量計算RAM區(qū)和顯示RAM區(qū)。在INTO外部中斷程序中,采樣單價并賦值單價計算。 2.2.3 系統(tǒng)主程序流程圖 主程序流程圖給出了系統(tǒng)工作的基本過程,描述了信號的基本流向,起到一個向?qū)У淖饔谩?/font> 本系統(tǒng)的軟件系統(tǒng)主要可分為主程序和定時器中斷程序兩大模塊。在程序過程中,加入了抗干擾措施。下面對部分模塊作介紹。
1.008.jpg (36.34 KB, 下載次數(shù): 98)
下載附件
2017-6-2 16:59 上傳
圖2.6 稱重總設(shè)計的仿真圖
1.009.jpg (42.11 KB, 下載次數(shù): 86)
下載附件
2017-6-2 16:59 上傳
圖2.7 系統(tǒng)總程序圖 2.2.4 系統(tǒng)子程序設(shè)計 系統(tǒng)子程序主要包括A/D轉(zhuǎn)換啟動及數(shù)據(jù)讀取程序設(shè)計、鍵盤輸入控制程序設(shè)計以及顯示程序設(shè)計等。 2.2.5 A/D轉(zhuǎn)換啟動及數(shù)據(jù)讀取程序設(shè)計 A/D轉(zhuǎn)換子程序主要是指在系統(tǒng)開始運行時,把稱重傳感器傳遞過來的模擬信號轉(zhuǎn)換成數(shù)字信號并傳遞到單片機所涉及到的程序設(shè)計
1.010.jpg (18.5 KB, 下載次數(shù): 103)
下載附件
2017-6-2 16:59 上傳
圖2.8 A/D轉(zhuǎn)換啟動及數(shù)據(jù)讀取程序流程圖
1.011.jpg (40.54 KB, 下載次數(shù): 87)
下載附件
2017-6-2 16:59 上傳
圖2.9 A/D0832轉(zhuǎn)換后的顯示圖像
1.012.jpg (36.41 KB, 下載次數(shù): 100)
下載附件
2017-6-2 16:59 上傳
圖2.10 A/D574轉(zhuǎn)換后的顯示圖像 2.2.6 顯示程序設(shè)計 顯示子程序主要是來判斷是否需要顯示,以及如何去顯示,也是十分重要的程序之一。
1.013.jpg (14.54 KB, 下載次數(shù): 87)
下載附件
2017-6-2 16:59 上傳
圖2.11 顯示子程序流程圖
1.014.jpg (20.91 KB, 下載次數(shù): 91)
下載附件
2017-6-2 16:59 上傳
圖2.12 顯示啟動按鍵按下后
1.015.jpg (27.67 KB, 下載次數(shù): 96)
下載附件
2017-6-2 16:59 上傳
圖2.13 顯示歡迎界面 2.2.7 鍵盤輸入控制程序設(shè)計 鍵盤電路設(shè)計成4X4矩陣式,由鍵盤編碼方式可以得出0,1,2,3,4,5,6,7,8,9以及啟動等功能選擇鍵。在程序中可以先判斷按鍵編碼,然后根據(jù)編碼將鍵盤代表的數(shù)值送到相應(yīng)的存儲單元,再進(jìn)行功能選擇或數(shù)據(jù)處理。 矩陣式鍵盤又叫行列式鍵盤。就是用I/O口線組成行、列結(jié)構(gòu),按鍵設(shè)置在行列的交點上。在按鍵較多時多用矩陣鍵盤,可以節(jié)省I/O口線。列如:占用8個I/O口線的4×4矩陣式結(jié)構(gòu)可以構(gòu)成16個鍵的鍵盤。當(dāng)有鍵按下時,要逐行或逐列掃描來判斷是哪個按鍵按下。通常的掃描方式有掃描法和反轉(zhuǎn)法。
1.016.jpg (53.86 KB, 下載次數(shù): 86)
下載附件
2017-6-2 16:59 上傳
圖2.14 鍵盤逐行掃描過程 3 結(jié)束語 隨著全球數(shù)字化技術(shù)的不斷發(fā)展,電子衡器已經(jīng)在我們的生活各個領(lǐng)域得到了廣泛的應(yīng)用,從工業(yè)貿(mào)易到能源交通都能看到電子衡器的技術(shù)應(yīng)用。本文著眼于目前中小型市場商用電子稱智能化低、精度差、易損壞等特點,研發(fā)設(shè)計了基于AT89S52單片機的雙精度電子稱。 雙精度電子稱是針對目前中小型市場上現(xiàn)有的衡器無法同時運用于稱量微重物理和較重物體而研發(fā)的產(chǎn)品。該仿真設(shè)計系統(tǒng)主要包括五大模塊,即數(shù)據(jù)采集和雙精度轉(zhuǎn)換模塊、單片機處理模塊、鍵盤控制模塊、128*64液晶顯示模塊和軟件驅(qū)動模塊。啟動工作后,單片機可根據(jù)A/D采集的重量參數(shù)能夠自動選擇轉(zhuǎn)換精度值,完成相應(yīng)的數(shù)據(jù)處理,同時在128*64的液晶屏上進(jìn)行直觀的顯示重量、單價和總價,4*4鍵盤控制系統(tǒng)能夠?qū)崟r進(jìn)行單價調(diào)整,操作簡單方便,不僅能夠測量微重物理,而且能夠測量較重物體,完全達(dá)到了商品的自動化、數(shù)字化和智能化,具有很好的應(yīng)用價值和意義。 本文唯一的不足是只對研發(fā)方案成果的進(jìn)行了仿真設(shè)計,沒有運用實物進(jìn)行驗證方案是否可行,有待進(jìn)一步的研發(fā)。雖然沒有做出實物,但基于51單片機雙精度電子稱依然是一個具有前景的電子衡器產(chǎn)品,非常適合于中小型市場的物體稱重,如果雙精度電子稱進(jìn)一步發(fā)展,與虛擬串口技術(shù)融合,將會實現(xiàn)與上位機的無線通訊,實現(xiàn)遠(yuǎn)程監(jiān)測,將更有價值。
參考文獻(xiàn) [1] 黃堅,金惟偉.中小型電機產(chǎn)品近年出口情況簡述[J].中小型電機,2005,32(1) 9--12. [1]趙茂泰. 智能儀器原理及應(yīng)用[M].北京:電子工業(yè)出版社.2004 [2]張毅剛. MCS-51單片機應(yīng)用設(shè)計[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社.2003 [3]賈伯年, 俞樸.傳感器技術(shù)[M].東南大學(xué)出版社.2000 [4]單成祥.傳感器理論設(shè)計基礎(chǔ)及其應(yīng)用[M].北京:國防工業(yè)出版社.1999 [5]李道華,李玲,朱艷 .傳感器電路分析與[M].武漢:武漢大學(xué)出版社.2000 [6]沙占友 ,王彥朋等. 智能傳感器系統(tǒng)設(shè)計與應(yīng)用[M].北京:電子工業(yè)出版社2004.6 [7]何希才,薛永毅. 傳感器及其應(yīng)用實例[J].北京:機械工業(yè)出版社.2004.1 [8]李群芳. 單片機微型計算機與接口技術(shù)[M].電子工業(yè)出版社. [9]周立功. 單片機實驗與實踐[M].北京航空航天大學(xué)出版社.2004.6 [10]全國大學(xué)生電子設(shè)計競賽組委會.全國大學(xué)生電子設(shè)計競賽獲獎作品匯編[J].北京理工大學(xué)出版社.2005.11 [11]何立民 .單片機高級教材[M].北京:航空航天大學(xué)出版社.2000 [12]童詩白,華成英 .模擬電子技術(shù)基礎(chǔ)[M]. 北京:北京高等教育出社.2001 [13]程林 ,超省電型電子秤的設(shè)計方案[J].福建:福建省計量科學(xué)技術(shù)研究所. 2008.3
附錄1材料清單 | | | | | | | | | | | | | | | |
1.017.jpg (822 Bytes, 下載次數(shù): 102)
下載附件
2017-6-2 16:59 上傳
3紅、透明 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
附錄2電路原理圖
1.018.jpg (46.26 KB, 下載次數(shù): 96)
下載附件
2017-6-2 16:59 上傳
附錄3實物圖
1.019.jpg (57.43 KB, 下載次數(shù): 103)
下載附件
2017-6-2 16:59 上傳
附錄4主要程序清單
- ALARMHBUFF2 EQU 77H ;鬧鈴時間的時十位計時綬沖
- ALARMHBUFF1 EQU 76H ;鬧鈴時間的時個位計時綬沖
- ALARMMBUFF2 EQU 75H ;鬧鈴時間的分十位計時綬沖
- ALARMMBUFF1 EQU 74H ;鬧鈴時間的分個位計時綬沖
- HBUFF2 EQU 73H ;時十位計時綬沖
- HBUFF1 EQU 72H ;時個位計時綬沖
- MBUFF2 EQU 71H ;分十位計時綬沖
- MBUFF1 EQU 70H ;分個位計時綬沖
- DP EQU 6FH ;控制數(shù)碼管點的亮暗
- NUM EQU 78H ;前四秒還是后四秒計數(shù)
- SBUFF EQU 79H ;秒十進(jìn)制計時綬沖(低四位對應(yīng)個位,高四位對應(yīng)十位)
- MBUFF EQU 7AH ;分十進(jìn)制計時綬沖
- HBUFF EQU 7BH ;時十進(jìn)制計時綬沖
- ALARMMBUFF EQU 7CH ;鬧鈴時間的分十進(jìn)制計時綬沖
- ALARMHBUFF EQU 7DH ;鬧鈴時間的時十進(jìn)制計時綬沖
- NUMT1 EQU 67H;用于控制時間調(diào)整時按鍵p3.2一次按下時,計數(shù)器T1中斷的次數(shù)
- NUMT2 EQU 68H;用于控制時間調(diào)整時按鍵p3.3一次按下時,計數(shù)器T1中斷的次數(shù)
- KEYNUMT1 EQU 69H ;用于存儲NUMT1已經(jīng)計數(shù)到第幾個半秒
- KEYNUMT2 EQU 6AH ;用于存儲NUMT1已經(jīng)計數(shù)到第幾個半秒
- STOREKEYNUMT2 EQU 6BH ;用于存儲當(dāng)前KEYNUMT1的值,以和下次做比較,看是否有變化
- STOREKEYNUMT1 EQU 6CH ;用于存儲當(dāng)前KEYNUMT2的值,以和下次做比較,看是否有變化
- ORG 0000H
- AJMP START
- ORG 000BH
- MOV TH0 , #0BH ;設(shè)置計數(shù)初值 ,R4用來存儲低位的初值
- 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 ;置鬧鈴時間初始值為18:55
- MOV ALARMMBUFF , #55H
- MOV ALARMHBUFF2, #01H
- MOV ALARMHBUFF1, #08H
- MOV ALARMMBUFF2 , #05H
- MOV ALARMMBUFF1 , #05H
- MOV HBUFF2, #01H ;置鬧鐘時間為18:53
- MOV HBUFF1, #08H
- MOV MBUFF2 , #05H
- MOV MBUFF1 , #03H
- MOV HBUFF , #18H
- MOV MBUFF , #53H
- MOV SBUFF , #3CH ;置初始秒為60,計時時減
- MOV TCON , #05H ;下降沿觸發(fā)
- MOV TMOD , #11H ;初始化定時器,T0 ,T1 16位計時
- MOV TH0 , #0BH ;設(shè)置計數(shù)初值,125ms計時
- MOV TL0 , #0DBH
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間
- MOV TL1 , #0B0H
- MOV IE , #82H ;開T0中斷
- SETB PT0 ;T0中斷優(yōu)先級最高
- SETB TR0 ;允許T0計數(shù)
- SETB P3.2
- SETB P3.3
- START1: MOV A , HBUFF ; 顯示時,7點以前及21點以后亮度調(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 ;檢測是否是定鬧時間
- CJNE A , HBUFF , START4
- MOV A , ALARMMBUFF
- CJNE A , MBUFF ,START4
- MOV C, DP ;若是定鬧時間,則利用dp的值來決定蜂鳴
- MOV P3.2, C
- MOV A , SBUFF
- JNZ START1 ;若還沒到1分鐘,則繼續(xù)蜂鳴
- SETB P3.2
- START4: JNB P3.2,ADJUSTTIME1 ;循環(huán)等待中斷,并檢測是否鍵按下,若是,則進(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計時,用于調(diào)整時間
- MOV TL1 , #0B0H
- SETB ET1 ;開T1中斷
- SETB PT1 ;設(shè)T1中斷優(yōu)先級最高
- SETB TR1 ;允許T1計時
- MOV STOREKEYNUMT1 , KEYNUMT1 ;存儲當(dāng)前次KEYNUMT1的值
- TIME1_1:ACALL DISPLAY
- MOV A , KEYNUMT1
- CJNE A , STOREKEYNUMT1,TIME1_2 ;若當(dāng)前KEYNUMT1的值與上一次的值不等,則時間加1分,否則繼續(xù)循環(huán),等等至半分鐘
- AJMP TIME1_3
- TIME1_2:MOV STOREKEYNUMT1 , KEYNUMT1 ;加1后存儲當(dāng)前的KEYNUMT1的值
- ACALL ADDBUFF0 ;分加1
- TIME1_3:JNB P3.2,TIME1_1 ;若p3.2已關(guān),則退出增時,否則繼續(xù)循環(huán)
- CLR ET1
- CLR PT1
- CLR TR1
- AJMP START1
-
- ;********************
- ;*****時間增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 ;時增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小時,則不必初值置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計時,用于調(diào)整時間
- MOV TL1 , #0B0H
- SETB ET1 ;開T1中斷
- SETB PT1 ;設(shè)T1中斷優(yōu)先級最高
- SETB TR1 ;允許T1計時
- 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 ;時增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小時,則初值不必置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)都是未按,此時復(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計時,用于調(diào)整時間
- 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
-
-
-
-
- ;**************
- ;** 整點報時 **
- ;**************
- ZDBS: MOV A , MBUFF ;在整點時,響半秒
- JNZ ZDBSEND
- MOV A , SBUFF
- CJNE A , #3CH , ZDBSEND
- CLR P3.2
- ACALL DL0FIVE
- SETB P3.2
- ZDBSEND:RET
-
- ;**************
- ;**定鬧顯示子程序**
- ;**************
- ALARMDISPLAY: MOV P1 ,#0FFH ;使時的十位亮
- MOV A , ALARMHBUFF2
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1 , A
- CLR P3.0
- ACALL DL1MS
- SETB P3.0
- MOV A , ALARMHBUFF1 ;使時的個位亮
- 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 ;使時的個位亮
- 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
-
- ;**************
- ;***延時程序***
- ;**************
-
- DL1MS: MOV R6 , #20 ;延時1ms
- DL11: MOV R7 , #25
- DL12: DJNZ R7 , DL12
- DJNZ R6 , DL11
- RET
-
- DL100MS:MOV R6 , #200 ;延時100ms
- DL100MS1:MOV R7 , #250
- DL100MS2:DJNZ R7 , DL100MS2
- DJNZ R6 , DL100MS1
- RET
-
- DL11S: MOV R5 , #10
- DL1S0: MOV R6 , #200 ;延時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 ;延時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秒的初值
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
完整論文下載地址(word格式 可編輯):
http://m.zg4o1577.cn/bbs/dpj-86574-1.html
|
|