基于單片機的紙張計數器設計_第1頁
基于單片機的紙張計數器設計_第2頁
基于單片機的紙張計數器設計_第3頁
基于單片機的紙張計數器設計_第4頁
基于單片機的紙張計數器設計_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

頁第1章緒論1.1課題研究的背景在21世紀的今天,計算機電子技術飛速發(fā)展,其幾乎滲透到了人們生活中的各個領域,有利推動了社會生產力的發(fā)展和社會信息化程度的提高。同時現代電子產品的性能愈來愈高,產品的更新迭代愈來愈快,這就需要的更加高深科學知識和更好的創(chuàng)新能力來支撐產品的升級,而單片機技術的在其中占有極為重要的部分。近幾年來,單片機在“智能化”電子產品中的應用越來越廣泛,同時單片機計數以其高集成度、高可靠性、體積小、便于攜帶等優(yōu)勢在“智能化”電子產品中受到了廣大客戶的青睞。目前基于單片機等嵌入式技術幾乎滲透到了我們生活中各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡,導彈的導航系統(tǒng)、飛機上儀表控制、計算機網絡通訊與數據傳輸、工業(yè)自動化控制,民用的安保系統(tǒng)、手機、自動洗衣機、錄音機、攝影機,更不用說自動控制鄰域的機器人、智能儀表、醫(yī)療器械等[1]。隨著電子產品的智能化,基于單片機等硬件編程的嵌入式技術就顯得格外重要了,像我們平時見到的手表、數字相機,都是典型的基于單片機的嵌入式技術,隨著internet的迅速發(fā)展和鏈家處理器的出現,單片機技術在日常生活里形成更大的應用領域。從事該行業(yè)的待遇和發(fā)展前景可想而知。首先關于單片機的研究,早在上世紀70年代,Intel公司研制出了第一塊4位微處理器,隨著半導體計數及大規(guī)模繼承點路技術的發(fā)展,單片機逐漸發(fā)展到后來的8位、16位、32位甚至64位。國內的臺灣華邦公司很早前已經生產了W77和W78系列單片機并且完全兼容80C51;宏晶科技公司推出的STCMCU全系列單片機其基于Flash制造工業(yè)的80C51單片機,宏晶STC不僅支持ISP技術且擁有完全獨立自主的知識產權,該系列單片機還有超強加密、高速、低功耗、低價、功能強、抗干擾能力強等[2]。由此可以看出,單片機無論是在國內外已經有了非常成熟的技術基礎了。1.2國內外發(fā)展現狀但盡管單片機技術成熟,智能化發(fā)展越來越快,但是其應用面還不夠廣泛,如在印刷行業(yè)中,其發(fā)展還處于初級階段,多數企業(yè)對智能化建設的解決方案、關鍵計數等認識不清。雖然有少數印刷企業(yè)在裝備上已經逐漸實現了機械化、自動化,但是還有有數量眾多的中小型企業(yè)在設備的智能化方面基礎薄弱、缺少經濟支撐以及系統(tǒng)建設規(guī)劃,甚至還有企業(yè)在使用傳統(tǒng)的人工作業(yè),如在紙張計數流程中使用人工計數,這就造成了操作人員長期處于疲勞狀態(tài),費時費工,而且還會出現計數不準確現象,效率大大較低。當然目前也出現了一些紙張計數器能夠使用在印刷業(yè)中,如光電紙張計數器,計數器是利用投射式光路,利用應刷前紙張透射率大致均勻的特點,檢驗透射光的強度的變化達到計數的目的,但是這種方式的計數器不適合用于印刷后紙張的計數。而本次所設計的基于單片機的紙張計數器,則可以解決這個問題,因為它的檢測時通過電容變化來進行檢測,與紙張投射率關系不大。1.3研究的意義及重點為了解決人工紙張計數中所發(fā)生的一系列效率問題,本文中設計了一款基于單片機的紙張計數裝置,其是通過STC89C52RC單片機進行控制,通過測量不同紙張引起的不同頻率的脈沖,經過編程的控制實現最終結果的快速顯示。該裝置在一定程度上解決了人工計數多帶來的效率慢、錯誤率高等各種問題,提高的企業(yè)生產上的效率。當然要是實現基于單片機的紙張計數器,也是需要一定的理論知識基礎和克服一些問題的。首先是單片機的知識,由于之前從未接觸過單片機的相關理論知識,所以需要花費一定的時間精力學習相關知識。紙張計數器的需要研究重點是通過測量紙張的什么數據來計算紙張的數量。紙張的數據是如何存儲和顯示的。編寫什么樣的程序來實現所測量的紙張的數據轉換成最終的紙張張數并顯示在數碼上的。設計什么樣測量裝置能夠保證一定的測量數據的穩(wěn)定性。第2章系統(tǒng)方案設計2.1系統(tǒng)設計要求(1)極板A和極板B上的金屬電極部分均為邊長50mm±1mm的正方形,導線a和導線b長度均為500mm±5mm。測量顯示電路應具有“自校準”功能,即正式測試前,對置于兩極板間不同張數的紙張進行測量,以獲取測量校準信息;(2)測量顯示電路可自檢并報告極板A和極板B電極之間是否短路;(3)測量置于兩極板之間1~10張不等的給定紙張數。每次在極板間放入被測紙張并固定后,一鍵啟動測量,顯示被測紙張數并發(fā)出一聲蜂鳴。每次測量從按下同一測量啟動鍵到發(fā)出蜂鳴的時間不得超過5秒鐘,在此期間對測量裝置不得有任何人工干預;

(4)極板、導線均不變,測量置于兩極板之間15~30張不等的給定紙張數。對測量啟動鍵、顯示蜂鳴、測量時間、不得人工干預等有關要求同“基本要求(3)”;(5)極板、導線均不變,測量置于兩極板之間30張以上的給定紙張數。對測量啟動鍵、顯示蜂鳴、測量時間、不得人工干預等有關要求同“基本要求(3)”;(6)系統(tǒng)具有顯示、清零功能。2.2系統(tǒng)模塊設計思路通過系統(tǒng)設計的要求的分析思考,將本系統(tǒng)大致分成控制模塊、測量模塊、存儲模塊、顯示模塊、報警模塊以及電源模塊。2.2.1控制模塊控制模塊是整個系統(tǒng)的核心,它起著系統(tǒng)各個模塊的之間的協調控制以及數據的運算等作用。2.2.2測量模塊測量模塊是紙張的某些信息,如紙張的電容、以及電容引起的其他的裝置的變化的測量。2.2.3存儲模塊存儲模塊的作用是在校準的時候將紙張的信息存儲起來,到測量紙張的數量的時候,控制模塊則負責將存儲的信息取出來。2.2.4顯示模塊顯示模塊的作用就是負責顯示紙張測量來的信息數據,如紙張的數量等。2.2.5報警模塊該模塊的作用就是當系統(tǒng)發(fā)生短路情況的時候,該模塊報警,防止燒毀整個系統(tǒng)。2.2.6電源模塊電源模塊的作用為系統(tǒng)各個模塊提供必要的能源,使得每個模塊都能夠正常的工作。2.3系統(tǒng)設計的整體結構框圖 圖2-1系統(tǒng)總體框圖2.4方案的論證與比較通過對各個模塊的設計方案進行論證比較,選出適合本系統(tǒng)的各種元器件和組裝方案。2.4.1控制模塊的設計方案論證選擇根據設計要求,控制部分主要有用于對測量紙張的的數據進行存儲計算顯示、控制報警系統(tǒng)等。方案一:采用FPGA作為控制系統(tǒng)FPGA是現場可編輯邏輯器件,由存放在片內RAM中的程序來設置其工作狀態(tài)的,因此,工作時需要對片內的RAM進行編程。加電后,FPGA芯片將EPROM中數據讀入片知內編程RAM中,配置完成后,FPGA進入工作狀態(tài)。掉電后,FPGA恢復成白片,內部邏道輯關系消失。因此,FPGA可以反復使用,并且通過不同的編程數據能夠實現不同的電路功能,使用靈活[3]。方案二:使用單片機 單片機是單片機未向計算機的簡稱。它是將計算機中的微處理器、只讀存儲器、隨機存儲器、I/O接口、串行接口、中斷系統(tǒng)、定時器/計數器等基本功能模塊集成到一塊芯片上構成的小而完善的計算機系統(tǒng)。因此省去了諸多外部獨立元件。單片機本身擁有穩(wěn)定性強、精確度高、抗干擾能力強、外部擴展能力強等特點。并且單片機支持C語言編程控制,通過編寫C語言以及調用其庫函數能夠簡便實現很多復雜的功能[1]。綜上,考慮到單片機的易用性以及對FPGA的相關知識不熟悉,最終使用單片機作為本系統(tǒng)的控制部分。2.4.2顯示模塊的設計方案論證選擇方案一:液晶顯示LCD1602液晶顯示器是廣泛使用的一種字符性液晶顯示模塊,具有體積小、功耗低等優(yōu)點,他是一種專門顯示字母、數字、符號等的點陣型液晶模塊。方案二:數碼管顯示數碼管是通過單片機的I/O端口驅動數碼管各個段碼,點亮不同的段碼從而形成字符顯示我們所需要的數字。其具有:低能耗、壽命長、對頑疾我環(huán)境要求低、易于維護,同時其精度高,操作簡單,數碼管采用BCD編碼顯示數字和代碼,程序的編寫容易,資源占用較少。由于本系統(tǒng)所需要顯示的內容信息種類并不多,相比LCD1062的控制程序的繁瑣和復雜,數碼管的程序更為簡潔,所以系統(tǒng)最終采用了4位數碼管作為最終顯示模塊。2.4.3測量模塊的設計方案論證選擇方案一:fdc2214電容式傳感器fdc2214一個電容檢測傳感器,其原理時是基于LC諧振電路,即將芯片的每一個檢測通道的輸入端都連上一個電感和一個電容。而被測的電容傳感端LC諧振的電路連接在一起,將產生一個諧振的頻率,通過頻率我們可以計算出被測的電容值[4]。但是芯片使用較為復雜,并且成本較貴。方案二:555定時器搭建多諧振蕩電路利用555定時器搭建一個多諧振蕩電路,該電路可以通過不同紙張影響使其發(fā)射出不同頻率的脈沖信號,利用這一點,可以判斷紙張的相關信息。555定時器搭建電路簡單、使用方便,且成本便宜,穩(wěn)定性高。綜上,我們選擇性價比更高的方案二。2.4.4測量機械結構的設計方案論證選擇該部分可以說時本系統(tǒng)靈魂部分,它本實其實和電路方面的關系不大,但是其直接關系到了測量紙張的電容的準確性。而電容的特性大家都知道,面積、間距、介質等都會對測量值的準確性造成一定影響。這個在實際測量中反應出來是什么狀況,例如:如果兩塊極板對得不齊,一會正一會斜,那么測量出來的數據肯定時不準確的。那么如何去固定板子,就是一個問題。如何讓其固定并且保持兩塊板子對應的面積不變,并且又可以塞入紙張?為此查閱了相關資料,并且得到了一些答案。方案一:通過升降式的方式對板子進行控制,如圖2-2:圖2-2升降舵機式結構雖然這種方式能夠基本保證的兩塊板子100%對齊,但是該裝置的設備設計非常復雜,并且實驗的條件十分有限,這種機械加工對應電子專業(yè)的學生來說有點愛莫能助。方案二:通過木板整齊的切面來保證兩個極板對齊:如圖2-3:圖2-3切面固定結果雖然這種辦法沒有辦法方法1中那樣高度精確,但是,其卻大大增加了機械機構制造的可行性,是一種不錯的替代方法,在此基礎上,我搭建出了一個類似的測量機械結構。2.4.5軟件編程語言的選取方案論證選擇方案一:匯編語言匯編語言時一種面向CPU指令的程序設計語言,它采用指令助記符來表示操作碼和操作數,用符號地址表示操作數地址。用匯編語言編寫的程序能夠直接利用硬件系統(tǒng)的特性,直接對位、字節(jié)、字寄存器、存儲單元、I/O端口等進行處理,通過也能直接使用CPU指令系統(tǒng)和指令系統(tǒng)提供各種尋址方式編制出高質量的程序,程序占用內存空間少,執(zhí)行速度快[5]。但是特定的匯編語言和特定的機器語言指令集是相對應的,不同平臺之間不可直接移植,其可讀性很差,初學者調試和排錯非常困難。方案二:C語言C語言是一種編譯型程序設計語言,其兼顧了多種語言的特點。C語言有功能豐富的庫函數、編譯效率高、有良好的可移植性,而且可以直接實現對系統(tǒng)硬件的控制。C語言是一種結構化程序設計語言,它支持當前程序設計中廣泛采用的由頂向下結構化程序設計技術。此外,C語言程序具有完善的模塊程序結構,從而為軟件開發(fā)中采用模塊化程序設計方法提供了有力的保障。使用C語言編寫控制程序,可以縮短編寫周期,增加代碼可讀性,便于改進和擴充。綜上,以及對C語言更為了解的情況下,本系統(tǒng)中使用C語言作為控制語言。第3章系統(tǒng)硬件設計3.1系統(tǒng)主要元器件介紹該部分內容針對系統(tǒng)使用的主要元器件進行介紹。3.1.1單片機本系統(tǒng)選取的單片機是是stc公司生產的一種低功耗、高性能的以MCS-51為核心的芯片STC89C52RC單片機。單片機的引腳圖如圖3-1:圖3-1單片機引腳圖VCC(40引腳):電源電壓VSS(20引腳):接地P0端口(P0.0-P0.7,39-32引腳):P0口是一組8位漏極開路型雙向I/O口,也即地址/數據總線復用。作為輸出口用時,每位能吸收電流的方式驅動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8位)和數據總線復用,在訪問期間激活內部上拉電阻。在Flash編程時,P0口接受指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。P1端口(P1.0-P1.7,1-8引腳):P1是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作為輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。Flash編程和程序校驗期間,P1接受低8位地址。P2口:P2是一個帶有內部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作為輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在訪問外部程序存儲器或16位四肢的外部數據存儲器(例如執(zhí)行MOVX@DPTR指令)時,P2口送出高8位地址數據,在訪問8位地址的外部數據存儲器(例如執(zhí)行MOVX@RI指令)時,P2口線上的內容(也即特殊功能寄存器(SFR)區(qū)中R2寄存器的內容),在整個訪問期間不改變。Flash編程和程序校驗時,P2也接收高位地址和其他控制信號。P3口:P3是一個帶有內部上拉電阻的8位雙向I/O口,P3的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作為輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。RST:復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將使單片機復位。ALE/PROG:當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是,每當訪問外部數據存儲器時將跳過一個ALE脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH單元D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令ALE才會被激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應設置ALE無效。PSEN:程序存儲允許輸出是外部程序存儲器的讀選通型號,當89C51由外部存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,這兩次有效的PSEN信號不出現。EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12v的編程允許電源Vpp,當然這必須是該器件使用12v編程電壓Vpp。XTAL1:振蕩器反相放大器及內部時鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。89C51中有一個用于構成內部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構成自激振蕩器,振蕩電路參見圖5。外接石英晶體或陶瓷諧振器及電容C1、C2接在放大器的反饋回路中構成并聯振蕩電路。對電容C1、C2雖沒有十分嚴格的要求,但電容容量的大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性,如果使用石英晶體,我們推薦電容使用30Pf±10Pf,而如使用陶瓷諧振器建議選擇40Pf±10Pf。用戶也可以采用外部時鐘。這種情況下,外部時鐘脈沖接到XTAL1端,即內部時鐘發(fā)生器的輸入端XTAL2則懸空。掉電模式:在掉電模式下,振蕩器停止工作,進入掉電模式的指令是最后一條被執(zhí)行的指令,片內RAM和特殊功能寄存器的內容在終止掉電模式前被凍結。推出掉電模式的唯一方法是硬件復位,復位后將重新定義全部特殊功能寄存器但不改變RAM中的內容,在Vcc恢復到正常工作電平前,復位應無效,且必須保持一定時間以使振蕩器重啟動并穩(wěn)定工作。89C51的程序存儲器陣列是采用字節(jié)寫入方式編程的,每次寫入一個字符,要對整個芯片的EPROM程序存儲器寫入一個非空字節(jié),必須使用片擦除的方法將整個存儲器的內容清楚[6]。3.1.23線-8線譯碼器譯碼器的邏輯功能是將每個輸入的二進制代碼譯成對應的輸出高電、低電平信號或另外一個代碼。系統(tǒng)中使用的譯碼器是一種二進制譯碼器,其輸入的3位二進制代碼共用8種狀態(tài),譯碼器將每個注入代碼譯成對應的以根輸出線上的高、低電平信號。因此,也將這個譯碼器稱為3線-8線譯碼器。在本系統(tǒng)種,我們使用3線-8線譯碼器來分別控制2個4位數碼管分別顯示各個位的數字,達到動態(tài)顯示的效果。圖3-2譯碼器引腳圖3.1.3數碼管數碼管是一種半導體發(fā)光器件,器基本單元是發(fā)光二極管,本系統(tǒng)中采用的是共陰極四位數碼管,能夠動態(tài)顯示4位數。共陰數碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極的數碼管。共陰數碼管在應用時應將公共極接到地線GND上,當某一字段發(fā)光二極管的陽極為高電平時,相應字段就點亮。當某一字段的陽極為低電平時,相應字段就不亮。數碼管動態(tài)驅動方式將所有數碼管的8個顯示劃“a,b,c,d,e,f,g,dp“的同名端連在一起,另外為每個數碼管的公共極COM增加增加選通控制電路,位選通有各自獨立的I/O線控制,顯示數據時,通過單片機對數碼管各個位分時輪流控制,達到顯示多位數據的效果。這就是動態(tài)驅動。動態(tài)顯示的效果和靜態(tài)顯示時一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。而本系統(tǒng)所采用的驅動方式就是動態(tài)顯示。以下為4位共陰極數碼管引腳圖:圖3-3數碼管引腳圖3.1.4AT24C02芯片AT24C02是低電壓的2k串行電可擦除只讀存儲器,內部組織為128個字節(jié),每個字節(jié)8位,該芯片被廣泛應用于低電壓及低功耗的工商業(yè)領域。在本系統(tǒng)中,用來存儲測量的數據。其引腳圖如下:圖3-4AT24C02引腳圖引腳說明:串行時鐘信號(SCL):在SCL輸入時鐘信號的上升沿將數據送入EEPROM器件,并在時鐘的下降沿將數據讀出。循環(huán)性數據輸入/輸出引腳(SDA):SDA引腳可實現雙向串行數據傳輸。該引腳為開漏輸出,可以其他多個開漏輸出器件或開集電極器件線或連接。器件/頁地址(A2,A1,A0):A2、A1、A0引腳為AT24C02的硬件連接的器件地址輸入引腳。AT24C02在一個總線上最多可尋址八個2k器件,A2、A1和A0內部必須連接。寫保護(WP)引腳:AT24C02具有用于硬件數據寫保護功能的引腳。當該引腳接GND時,允許正常的讀/寫操作。當該引腳接VCC時,芯片啟動寫保護功能[7]。3.1.5蜂鳴器在本系統(tǒng)種采用的是有源蜂鳴器。有源蜂鳴器是一種一體結構化的電子訊響器,采用直流電壓供電,蜂鳴器如下圖:圖3-5蜂鳴器實物圖3.1.6555定時器定時器是一種多用途的數字模擬混合集成電路,利用它能夠及其方便的構成多諧振蕩電路。如圖3-6,為定時器的電路結構圖,它是由比較器C1和C2、SR鎖存器和集電極開路的放電的三極管TD三部分組成。 圖3-6555定時器電路結構圖1腳接地。2腳位觸發(fā)輸入端;3腳位輸出端,輸出的電平狀態(tài)受觸發(fā)控制,而觸發(fā)器受上比較器6腳和下比較器2腳的控制。當觸發(fā)器接受上比較器A1從R腳輸入的高電平時,觸發(fā)器被置于復位狀態(tài),3腳輸出低電平:2腳和6腳是互補的,2腳只對低電平起作用,高電平對它不起作用,即電壓小于1Ucc/3,此時3腳輸出高電平。6腳為閾值端,只對高電平起作用,低電平對它不起作用,即輸入電壓大于2Vcc/3,稱高觸發(fā)端,3腳輸出低電平,但有一個先決條件,即2腳電位必須大于1Vcc/3時才有效。3腳在高電位接近電源電壓Vcc,輸出電流最大可打200mA。4腳是復位端,當4腳電位小于0.4V時,不管2、6腳狀態(tài)如何,輸出端3腳都輸出低電平。5腳是控制端。7腳稱放電端,與3腳輸出同步,輸出電平一致,但7腳并不輸出電流,所以3腳稱為實高(或低)、7腳稱為虛高。利用555定時器可以接成本系統(tǒng)中使用到的多諧振蕩電路。3.2電路模塊設計3.2.1控制模塊電路控制模塊采用的是51單片機為核心的AT89C51(其與硬件芯片STC89C52RC基本一致)作為本系統(tǒng)的核心模塊,通過C語言編程的方式分別控制控制處理其他模塊的正常運轉,例如紙張數據的計算顯示、報警模塊等。如圖3-7:圖3-7單片機仿真圖3.2.2測量模塊電路系統(tǒng)的測量模塊采用的時利用555定時器搭建的一個多諧振蕩器,然后利用C電容充當測量極板。多諧振蕩電路原理:施密特觸發(fā)器有當輸入信號達到某一定電壓值時,輸出電壓會發(fā)生突變(即當輸出電壓逐漸升高或下降時,輸出電壓會跳變),并且它的電壓傳輸特性有一個滯回區(qū)。而555定時器能很方便地接成施密特觸發(fā)器,我們可以先將它接成施密特觸發(fā)電路,再將其改造成多諧振蕩電路。我們只要把施密特觸發(fā)電路的反向輸出端經RC積分電路接回到它的輸入端,就構成了多諧振蕩電路。因此,只要將定時器的v11和v12連接在一起接成施密特觸發(fā)電路,然后再將v0經RC積分電路接回輸入端得到了多諧振蕩電路。如圖3-8所示:圖3-8用555定時器接成的多諧振蕩電路為減輕門G的負載,在電容C的容量較大時不宜直接由G提供電容的充、放電電流。為此,在電路中將TD于R1接成一個反向器,它的輸出V0D于V0在高、低電平狀態(tài)上完全相同。將v0D經R2和C組成的積分電路接到施密特觸發(fā)電路的輸入端同樣也能構成多諧振蕩電路。根據多諧振蕩電路中的知識得知,電容上的電壓vc將在VT+和VT-之間往復振蕩,vc和v0的波形將如圖3-9所示:圖3-9電路的電壓波形圖由圖中vc的波形求得電容C的充電時間T1和放電時間T2各為:

T1= =R1+R2CIn2 (3.T2=R2CIn =R2CIn2 (3.2)由公式(3.1)和公式(3.2)可得電路的振蕩周期為: T=T1+T2=R1+2R2CIn2 由公式(3.3)振蕩頻率為:

f=所以通過R和C的參數即可改變振蕩頻率[8]。通過仿真軟連接如下仿真圖3-10:圖3-10多謝振蕩電路仿真圖3.2.3顯示模塊電路其原理是兩塊數碼管的控制發(fā)光二極管的亮滅的引腳共同接在單片機的P0(P0.0-P0.7)端口上,以此控制數碼上數字顯示,當然P0端口上還應接上一塊74HC245芯片,它是一種兼容TTL器件引腳的高速CMOS總線收發(fā)器,典型的CMOS型三態(tài)緩沖門電路,八路信號收發(fā)器。由于單片機或CPU的數據/地址/控制總線端口都有一定的負載能力,所以需要額外的芯片74HC245來增加驅動能力。而兩個數碼管的控制其位顯示的引腳接分別一次接在一個38譯碼器上,通過單片機控制驅動譯碼器來分別實現兩個數碼管快速依次顯示每一位數字,由于視覺暫留,看上去數碼管好像每一位都顯示著數字。以此來達到顯示紙張數據的效果。通過仿真采用的時兩個4位共陰極數碼管對數據進行動態(tài)顯示。如圖3-11:圖3-11數碼管仿真圖3.2.4報警模塊電路原理是報警模塊是通過一個pnp三極管驅動的蜂鳴器,當測量極板短路時,pnp三極管發(fā)射極e電壓大于基極b電壓0.7V以上使得三極管發(fā)射極e和集電極導通[9]。導通后蜂鳴器發(fā)出聲音。報警模塊仿真如圖3-12:圖3-12報警模塊的仿真圖3.2.5存儲數據模塊電路存儲數據模塊采用24C02芯片對紙張測量數據的存儲與調用。在系統(tǒng)校準時,當測量紙張的頻率和張數信息時,通過按鈕觸發(fā)單片機INT1中斷,實現對每N張紙頻率信息的存儲。當測量時,放N張紙,測量出其頻率信息,然后對比存儲芯片中的頻率信息,將相應的紙張數量調出顯示在數碼管上。其仿真如圖3-13:圖3-13存儲模塊仿真圖3.2.6系統(tǒng)的總設計圖圖3-14系統(tǒng)總設計圖第一部分圖3-15系統(tǒng)總設計圖第二部分

第4章 系統(tǒng)軟件設計4.1軟件設計平臺在本系統(tǒng)中軟件設計頻臺使用的是Keil,其是美國公司KeilSoftware公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng)。4.2軟件設計思路在本系統(tǒng)中,我們要考慮將系統(tǒng)功能實現分成多個模塊分別編寫函數,從而協調各個模塊功能最終達到控制整個系統(tǒng)的作用。4.2.1數碼管顯示函數設計系統(tǒng)中要顯示的數據均需通過該函數控制數碼管才能顯示相應數據,其設計流程圖如下:圖4-1數碼管顯示設計流程圖具體步驟:我們首先需知道的是GPIO_DIG就是單片機P0口,其控制著數碼管每一位中8段LED燈的亮滅。而LSA、LSB、LSC代表38譯碼器輸入端,而譯碼器的輸出端Y0-Y7就分別控制著8位數碼管的每一位顯示與否。而DisplayData[i]是一個存儲著數碼管每一位顯示的編碼,而所謂的編碼就控制P0口各引腳輸出,達到數碼管顯示字符的效果。在本函數中,我們設置一個for循環(huán),并且循環(huán)8次,因為數碼管有8位,在第i次循環(huán)中,通過switch控制第i位顯示,而顯示的字符內容是DisplayData數組中的第i個編碼控制的字符,并且延時100ms后清空P0口。通過這種方式達到動態(tài)顯示相應數據內容的效果[10]。4.2.2頻率存儲函數設計在系統(tǒng)的校準階段,通過調用該函數實現對頻率的存儲,其流程圖如下:圖4-1頻率存儲函數流程圖具體步驟:在校準的階段時,我們需要將每N張紙測量出的頻率存儲到24c02中。當頻率值穩(wěn)定時,按下相應按鈕,觸發(fā)中斷1函數,在程序中,我需要設置一段延時來消除按下按鈕之后回彈抖動的現象所帶來的影響,并通過條件if(KeySure==0)判斷是否真的按下去了,當滿足條件時,我們將測量的頻率Freqs[5]寫入到24c02芯片中。最后還需將第N次校準的N的值傳入顯示的編碼數組,交給顯示函數控制數碼管顯示N數字,表示第幾次校準,其代碼如下:At24c02Write(NumOfPos,Freqs[5]/255);NumOfPos++;At24c02Write(NumOfPos,Freqs[5]%255);NumOfPos++;DisplayData[6]=smg[(NumOfPos/2-1)/10];DisplayData[7]=smg[(NumOfPos/2-1)%10];其中由于24c02每個地址位只能存儲一個字節(jié),而頻率值是int類型,為2字節(jié),所以需要將頻率值分成高低8位分別存儲到兩個地址位中。NumOfPos代表地址位位置,所以第N次校準數字N可以表示為NumOfPos/2-1。4.2.3紙張計算函數設計紙張的計算函數是測量時通過測量頻率值來與24c02中存儲的頻率值做對比,并最終計算出紙張數量并返回。其流程圖如下:圖4-3紙張計算流程圖具體步驟:傳入頻率值后,將頻率值與24C02中的頻率值做出對比并進行計算,我們不斷依次取出三個相鄰的頻率值N-1、N、N+1張紙頻率分別為freq1、freq2、freq3,直到第i次循環(huán)后,N張紙的頻率在區(qū)間[freq2-(freq2-freq1)*0.4,freq2+(freq3–freq2)*0.6]內,紙張的數量就可以判定為i/2,并返回紙張數量。其代碼思路如下:for(i=2;i<MAXNUM-3;i+=2){if((freq2-(0.4)*(freq2-freq1)<=freq)&&(freq<freq2+(0.6)*(freq3-freq2))){PaperNum=i/2;returnPaperNum; }}其中i=2是因為,24c02在初始化時提前將0特殊值存儲在地址位的前2位。MAXNUM代表是24c02地址位最大使用數量,而MAXNUM-3是為了預留空間,防止存儲內容超額。4.2.4外部中斷0函數在本中斷中,實現紙張數量的顯示,并且蜂鳴器需要發(fā)聲。其流程圖如下:圖4-4外部中斷0函數具體步驟:當按下測量按鈕時,觸發(fā)該中斷,程序中也需要延時消抖再判斷操作,當真的按下后,通過調用紙張計算函數獲得紙張數量,并將該數字各位調用相應的編碼傳入顯示編碼數組中,通過數碼管顯示函數進行顯示:Num=FigurePaper(Freqs[5]);DisplayData[6]=smg[Num/10]; DisplayData[7]=smg[Num%10]; smg是存儲著共陰極數碼管0-9字符對應的字符編碼數組,為全局變量。最后蜂鳴器發(fā)出響聲:bee=0;delay(500);bee=1;delay(10);4.2.5定時器/計數器0中斷函數該函數中主要處理的是利用定時器定時規(guī)定時間,而計數器記錄多諧振蕩器發(fā)出脈沖的個數。通過此,可以最終實現頻率的計算。其流程圖如:圖4-5定時器/計數器0中斷流程圖 具體步驟:在本函數之中,我們通過先將定時器定時為50ms。這里使用16位的定時器,那單片機定時器0的最大計數就是65536。單片機晶振為12M,那單片機的一個機器周期就是1us,定時器0工作在方式1時最大定時65536us。則其定時器的定時時間為T=(65536-X)us,所以初值為X=(65536-T)us,則初值為X=65536-50000=15536,轉化成16進制為0x3CB0,所以有: TH0=0x3C TL0=0xB0而timeCount是一個全局變量,負責記錄定時器0中斷執(zhí)行的次數,由于每次中斷定時50ms,所以當TimeCount為20時,定時器計數器關閉,就可以定時1s,此時,計數器中就記錄了1s內脈沖數量。其代碼思路如:TimeCount++; if(TimeCount==20){TimeCount=0;TR1=0;TR0=0;}4.2.6主函數設計系統(tǒng)中主函數是程序開始執(zhí)行的地方,本函數是通過協調調用各個函數功能達到實現系統(tǒng)總的功能,其設計流程圖如下:圖4-6軟件設計流程圖第一步:啟動裝置,程序進行初始化。第二步:接收并計算多諧振蕩器發(fā)出的頻率。如何計算頻率,通過定時器/計數器0中斷函數中實現的計數器在1s之內所記錄的脈沖數量,檢測到定時器結束后,取計數器中的脈沖數。定時器分為高八位和低八位,所以高八位的數據需要乘以256對數據進行恢復。最后得到瞬時頻率Freq:Freq=Freq+TL1;Freq=Freq+(TH1*256);將Freq[4]存儲的瞬時頻率值往前傳,實現頻率的不斷更新:Freqs[0]=Freqs[1];…Freqs[3]=Freqs[4];Freqs[4]=Freq;將數組中保存的5個頻率數據進行加權平均,得到頻率的穩(wěn)定值后將該值再次存儲到頻率數組Freqs中:Freqs[5]=Freqs[0]*0.1+Freqs[1]*0.1+Freqs[2]*0.2+Freqs[3]*0.3+Freqs[4]*0.3;第三步:判斷頻率Freqs[5]是否為0,如果是0,蜂鳴器報警:bee=~bee。如果不是,我們將Freqs[5]的值的每一位數字其對應的編碼傳給顯示的編碼數組DisplayData,如下:DisplayData[0]=smg[Freqs[5]%100000000/1000000];DisplayData[1]=smg[Freqs[5]%10000000/1000000];…DisplayData[7]=smg[Freqs[5]%10];再將數組交給數碼管顯示函數進行顯示。第四步:進行校準時,按下按鈕觸發(fā)中斷1,執(zhí)行頻率存儲函數將測量的頻率值寫入24c02中。第五步:進行測量工作時,按下按鈕觸發(fā)中斷0函數,執(zhí)行紙張計算和顯示功能,并進行下一次測量。第5章系統(tǒng)的調試結果5.1系統(tǒng)仿真的調試結果5.1.1多諧振蕩器波形調試結果圖5-1多諧振蕩波形圖如圖,我們嘗試了555定時器搭建的多諧振蕩器是否能夠發(fā)出波形脈沖,通過示波器,我們可以看到波形圖,說明多諧振蕩器搭建成功。5.1.2數碼管顯示調試結果圖5-2數碼管顯示在仿真電路時,我們將測量極板模擬成一個電容,并且在數碼管上看到了其顯示的頻率值。說明仿真電路問題不大。5.2系統(tǒng)硬件的調試結果通過系統(tǒng)設計要求中的條目對紙張計數器的功能進行相應的測試。5.2.1測試環(huán)境測試的實驗環(huán)境在室內進行,其溫度約為25攝氏度左右。如圖:圖5-3測試環(huán)境其中測量結構的兩個極板為邊長10cm的銅板,連接極板的兩條導線長約50cm左右,基本符合系統(tǒng)設計要求(1)中的規(guī)定。5.2.2測試校準校準是在正式測量前獲取紙張的校準信息。(1)校準1張紙信息圖5-4校準1張紙如圖5-4所示,在極板間放1張紙,按下校準按鈕,可以看到數碼管顯示1,說明將1張紙信息存儲到了24c02芯片中。(2)校準2張紙信息圖5-5校準2張紙如圖5-5所示,在極板間放2張紙,按下校準按鈕,可以看到數碼管顯示2,說明將2張紙信息存儲到了24c02芯片中。通過不斷重復以上校準動作,可以實現系統(tǒng)對每N張紙校準信息的收集,最后在測量時才能有正確的數據做對比。而此功能也基本符合系統(tǒng)設計(6)要求中的校準。5.2.3測量紙張數量本測試是基于系統(tǒng)設計要求中的(3)、(4)、(5)就紙張在0~10、15~30以及30以上張數的紙進行抽取測試。(1)5張紙的測量結果圖5-65張紙顯示頻率在放入5張紙在極板上,使用重物固定后,可以看到如圖5-6中數碼管顯示的結果,其頻率顯示為3761。然后此時按下測量按鈕,如圖5-7:圖5-75張紙測量結果圖5-7中數碼管顯示了測量紙張的張數5,并且蜂鳴器發(fā)出聲響。通過本次測試,可得系統(tǒng)基本滿足設計要求(3)中0~10張給定紙張數量。(2)15張紙的測量結果圖5-815張紙顯示頻率在放入15張紙在極板上,使用重物固定后,可以看到如圖5-8中數碼管顯示的結果,其頻率顯示為6703。然后此時按下測量按鈕,如圖5-9:圖5-915張紙測量結果圖5-9中數碼管顯示了測量紙張的張數15,并且蜂鳴器發(fā)出聲響。(3)22張紙的測量結果圖5-1022張紙顯示頻率在放入22張紙在極板上,使用重物固定后,可以看到如圖5-10中數碼管顯示的結果,其頻率顯示為8015。然后此時按下測量按鈕,如圖5-11:圖5-1122張紙測量結果圖5-11中數碼管顯示了測量紙張的張數22,并且蜂鳴器發(fā)出聲響。通過以上兩次測試結果可得系統(tǒng)基本滿足設計要求(4)中15~30給定的紙張數量。(3)31張紙的測量結果圖5-1231張紙顯示頻率在放入31張紙在極板上,使用重物固定后,可以看到如圖5-12中數碼管顯示的結果,其頻率顯示為9380。然后此時按下測量按鈕,如圖5-13:圖5-1331張紙測量結果圖5-13中數碼管顯示了測量紙張的張數31,并且蜂鳴器發(fā)出聲響。通過本次測試結果可得系統(tǒng)基本滿足設計要求(5)中30張以上的給定紙張數。5.2.4極板短路報警測試圖5-14極板短路圖當兩個極板合在一起形成短路的時候,數碼管上顯示“ERROR”的字樣,并且蜂鳴器不斷發(fā)出警報聲響。通過本次測試可以確定系統(tǒng)基本滿足設計要求(2)中的報警功能。第6章結論6.1畢設的總結通過長時間的畢業(yè)設計的制作,最終基本完成了畢業(yè)設計的系統(tǒng),系統(tǒng)的功能以及指標等基本達到了了課題要求。系統(tǒng)的創(chuàng)新點和作用:在一定范圍內,本通能夠準確快速測量出紙張的數量,該系統(tǒng)不僅能夠充分替代人力實現對紙張的計數,提高效率,而且能夠根據不同的紙張類型進行校準,進而達到測量多種紙張的功能。本系統(tǒng)的制作成本不高,在一定程度上可以節(jié)省企業(yè)的成本。系統(tǒng)存在的一些問題:首先是本系統(tǒng)測量紙張的機械結構問題,由于受到實驗條件及工藝的影響。機械結構的不太完善,導致了系統(tǒng)的檢測功能的穩(wěn)定性不太好,受外接環(huán)境以及紙張差異的影響較為大,因此需要一定嚴格的實驗環(huán)境。其次是單片機的性能問題,由于在設計代碼時,沒有考慮到單片機的性能有限,導致代碼的總體量比較冗余,從而使單片機處理的時間較為緩慢,當然相對于人力計數,確實效率提高不少,但是如果可以更換新能更加強大的單片機芯片和設計更好測量機械結構,紙張計數器的運算速率和準確性將會得到更大的提高。6.2收獲及感悟畢業(yè)設計作為我們大學生活的最后一個環(huán)節(jié),是對大學四年的學習知識以及學習能力的綜合的運用和考核。同時也是個人學習能力再一次提升和知識的再一次豐富。大學的畢業(yè)設計決定著該大學教育的綜合水平,所以說大學也是對本環(huán)節(jié)及其的重視,通過也為每個學生提供了很多的畢業(yè)設計上的指導??梢妼W校對學生的重視程度。當然,畢業(yè)設計的整個過程使充滿了困難與挑戰(zhàn)。在分析本次選到的課題時,就發(fā)現了諸多難題,首先是單片機的使用以及選擇。因為大學的期間并沒有接觸到單片機的相關課課程,還有就是對以前所學知識的遺忘。所以不僅需要閱讀學習大量新的文獻資料看大量學生課程,還要回顧溫習以前學習過的文獻資料。當然對于本人來說這些問題其實不是問題,因為一個合格的大學生因該擁有了一定的自學能力。在學習完相關的知識后,我們就需要投入到真正的畢業(yè)設計當中了。首先是仿真電路的設計和程序的設計。通過查閱資料和不斷嘗試相關的電路和修改代碼,最終,完成了整個電路的設計圖。然后是元件的選擇和實物的組裝焊接,在組裝實物過程中,通過元件參數的不斷測試和更換,基本完成了實物的組裝,但是最棘手的問題出現在了自己的面前,那就是測量機械結構的搭建,該機構直接關系到測量的紙張數據的準確性。所以我在這里放緩了步伐,然后通過老師的幫助以及在網上查閱相關示例的一些參考后,我最終搭建出來了一個相對較好機械結構。雖然也有一些瑕疵,但是這是通過自己搭建出來的,這就是對自己能力的一種肯定??偟膩碚f,本次畢業(yè)設計雖然困難重重,但是也收獲滿滿,首先就是學生的獨立思考的能力,當我們遇到新的難點時候,應該學會通過自己的能力解決它,而不是張口就問,因為問題的獨立思考不僅有助于對知識理解程度加深,還能培養(yǎng)個人迎難而上的精神。當然,老師等他人的意見也很重要,因為其可以給我們指定相對較好的方向去努力,這樣可能會使我們的工作效率得到提升,做起事來事半功倍。本次畢業(yè)設計通過理論和實際相結合,不僅是課堂上所學相關知識的綜合運用,還引導了學生去了解社會上實際生產上的知識內容。這樣理論實踐相結合的方式為將來自己走向社會奠定了基礎。 參考文獻[1]陳章龍.嵌入式系統(tǒng)[M].北京航空航天大學出版社.2002:1-2.[2]陳勇.單片機原理與應用[M].高等教育出版社.2010:2-4.[3]華清遠見.FPGA應用開發(fā)入門和經典實例[M].人民郵電出版社.2008:1-2.[4]馬其才.紙張計數器顯示裝置設計[J].中國科技信息.2019,第21期:1.[5]楊立.微型計算機原理與接口技術[M].第二版.中國鐵道出版社.2006:79.[6]Atml.instructions for AT89C52 of Atmel Corporation[M].AtmelCorporatio.2000:3-6.[7]聯拓輝電子.二線制串行EEPROM-AT24C02[M].聯拓輝電子.2002:1-8.[8]閻石.數字電子技術基礎[M].第六版.高等教育出版社.2006:375-380.[9]楊拴科.模擬電子技術基礎[M].高等教育出版社.2003:31-34.[10]彭偉.單片機C語言程序設計實訓100例[M].電子工業(yè)出版社.2010:7-8.致謝為期幾個月的畢業(yè)設計即將進入尾聲,首先我對整個畢業(yè)設計過程中幫助過我的老師、同學以及網上學習博客、視頻的作者致以最衷心的感謝。雖然受到疫情的影響,不能到學校開展畢業(yè)設計。但是這也并沒有使我的畢業(yè)設計進度受到太大的影響。這一切很大部分都要歸功于導師們的在線監(jiān)督和指導,以及大學同學的幫助,使得我的畢業(yè)設計順利進行。大學即將結束,感謝大學四年來老師、教授們對我們傳授知識,感謝大學四年來陪伴我的室友同學。附錄附錄1AT24C02芯片封裝函數 #include"i2c.h" voidDelay10us(void)//誤差0us { unsignedchara,b; for(b=1;b>0;b--) for(a=2;a>0;a--); } voidI2cStart() { SDA=1; Delay10us(); SCL=1; Delay10us(); SDA=0; Delay10us(); SCL=0; Delay10us(); } voidI2cStop() { SDA=0; Delay10us(); SCL=1; Delay10us(); SDA=1; Delay10us(); } unsignedcharI2cSendByte(unsignedchardat) { unsignedchara=0,b; for(a=0;a<8;a++) { SDA=dat>>7; dat=dat<<1; Delay10us(); SCL=1; Delay10us(); SCL=0; Delay10us(); } SDA=1; Delay10us(); SCL=1; while(SDA) { b++; if(b>200) { SCL=0; Delay10us(); return0; } } SCL=0; Delay10us(); return1; } unsignedcharI2cReadByte() { unsignedchara=0,dat=0; SDA=1; Delay10us(); for(a=0;a<8;a++) { SCL=1; Delay10us(); dat<<=1; dat|=SDA; Delay10us(); SCL=0; Delay10us(); } returndat; } voidAt24c02Write(unsignedcharaddr,unsignedchardat) { I2cStart(); I2cSendByte(0xa0); I2cSendByte(addr); I2cSendByte(dat); I2cStop(); } unsignedcharAt24c02Read(unsignedcharaddr) { unsignedcharnum; I2cStart(); I2cSendByte(0xa0); I2cSendByte(addr); I2cStart(); I2cSendByte(0xa1); num=I2cReadByte(); I2cStop(); returnnum; }附錄2系統(tǒng)完整的程序代碼#include"reg52.h"#include"i2c.h"typedefunsignedcharu8;//u8替代unsignedchartypedefunsignedintu16;u8codesmg[16]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79};//數碼管共陰極編碼#defineGPIO_DIGP0#defineMAXNUM80unsignedlongTimeCount;u16Freqs[6]={0};//裝頻率的數組u16NumOfPos=0;//計數起始位charNum=0;//當前紙張數量u8DisplayData[8];u16Freq=0;sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;sbitKeyAddNum=P3^2;//定義按鍵 外部中斷0sbitKeySure=P3^3;//定義按鍵K4 外部中斷1sbitbee=P2^7;//蜂鳴器voiddelay(u16i){while(i--);}//定時器和計數器配置voidTimer_Config(){ TMOD=0x51;//定時器0模式,工作方式1,僅用TR0打開啟動 TH0=0x3C; //賦初值50ms TL0=0xB0; ET0=1;//打開定時器0中斷允許 ET1=1;//打開定時器計數器1中斷允許 EA=1;//打開總中斷 TR0=1;//打開定時器0 TR1=1;//打開計數器1}//外部中斷0&1初始化voidInt01_Config(){//設置INT0IT0=1;//跳變沿出發(fā)方式(下降沿) EX0=1;//打開INT0的中斷允許。 //設置INT1 IT1=1;//跳變沿出發(fā)方式(下降沿) EX1=1;//打開INT1的中斷允許。 PX1=1; EA=1;//總中斷}voidTimer_On(){ TR0=1;//打開定時器0,定時 TR1=1;//打開定時器1,計數} voidTimer_Off(){ TR0=0;//關閉定時器0,定時 TR1=0;//關閉定時器1,計數}voidDigDisplay(){ u8i; for(i=0;i<8;i++) { switch(i) { case0:LSA=0;LSB=0;LSC=0;break; case1:LSA=1;LSB=0;LSC=0;break; case2:LSA=0;LSB=1;LSC=0;break; case3:LSA=1;LSB=1;LSC=0;break; case4:LSA=0;LSB=0;LSC=1;break; case5:LSA=1;LSB=0;LSC=1;break; case6:LSA=0;LSB=1;LSC=1;break; case7:LSA=1;LSB=1;LSC=1;break; } GPIO_DIG=DisplayData[i]; delay(100); GPIO_DIG=0x00; }}//紙張數計算函數unsignedcharFigurePaper(u16freq){ chari; intfreq1,num11,num12; intfreq2,num21,num22; intfreq3,num31,num32; unsignedcharPaperNum; for(i=2;i<MAXNUM-3;i+=2) { num11=At24c02Read(i-2); delay(1000); num12=At24c02Read(i-1); delay(1000); freq1=num11*255+num12; num21=At24c02Read(i); delay(1000); num22=At24c02Read(i+1); delay(1000); freq2=num21*255+num22; num31=At24c02Read(i+2); delay(1000); num32=At24c02Read(i+3); delay(1000); freq3=num31*255+num32; //在頻率表前后點范圍內查詢該頻率對照的紙張數量 if( (freq2-(0.4)*(freq2-freq1)<=freq) &&(freq<freq2+(0.6)*(freq3-freq2)) ) { PaperNum=i/2; returnPaperNum; } } return0;} //共陰voidmain(){ Int01_Config(); Timer_Config();//定時器0/1初始化 At24c02Write(NumOfPos,0); NumOfPos++; delay(2000); At24c02Write(NumOfPos,0); NumOfPos++; delay(2000); while(1) { if(TR1==0)//定時到達200ms,計數器關閉 { Freq=Freq+TL1; Freq=Freq+(TH1*256); Freqs[0]=Freqs[1]; Freqs[1]=Freqs[2]; Freqs[2]=Freqs[3]; Freqs[3]=Freqs[4]; Freqs[4]=Freq; Freqs[5]=F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論