畢業(yè)論文----鎖具壽命自動檢測系統(tǒng)的現(xiàn)狀_第1頁
已閱讀1頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  本文綜述了鎖具壽命自動檢測系統(tǒng)的現(xiàn)狀,在總結各種模式的鎖具壽命自動檢測控制系統(tǒng)利弊的基礎上,提出了一種基于89C51的鎖具壽命自動檢測儀控制系統(tǒng),并詳細介紹了該系統(tǒng)的原理與構成。重點論述了以89C51單片機為核心的軟硬件設計原理,利用步進電機和直流電機來模擬實際鎖具的上鎖與開鎖,并給出了硬件原理圖和軟件設計流程。通過實際運行

2、表明,該系統(tǒng)具有成本低、測試速度快、結構簡單、性能穩(wěn)定等優(yōu)點,有著良好的市場前景。</p><p>  關鍵詞:89C51;步進電機;直流電機;鎖具壽命</p><p><b>  Abstract</b></p><p>  This paper reviews the status quo of the automatic detectio

3、n system of the locks’ life ,on the basis of summing up the pros and cons of various modes of automatic detection system of the locks’ life ,an automatic detection system of the locks’ life based on 89C51 is presented ,

4、 and describe the principle and pose of the system in details .The paper focuses on the designing principles of the hardware and software which use the 89C51 microcontroller as the core ,and the system use stepper motor

5、a</p><p>  Keywords: 89C51; Stepper motor; DC motor;Locks life</p><p><b>  目錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 鎖具壽命測試儀1</p><p

6、>  1.2 選題的背景和意義1</p><p><b>  2 方案論證2</b></p><p>  2.1 方案的提出2</p><p>  2.2 方案的可行性分析2</p><p><b>  2.3 結論3</b></p><p>  3 系統(tǒng)硬件

7、設計4</p><p>  3.1 系統(tǒng)的總體設計4</p><p>  3.2 系統(tǒng)的模塊化設計4</p><p>  3.2.1 89C51及其外圍電路4</p><p>  3.2.2 LED顯示電路7</p><p>  3.2.3 鎖型選擇電路及故障報警電路9</p><p&g

8、t;  3.2.4 232串口電路10</p><p>  3.2.5 步進、直流電機及其控制電路11</p><p>  4 系統(tǒng)軟件設計16</p><p>  4.1 C語言介紹16</p><p>  4.1.1 C語言的發(fā)展16</p><p>  4.1.2 C語言的主要功能17</p&g

9、t;<p>  4.2 程序設計思想18</p><p>  4.3 模塊化設計19</p><p>  4.3.1 顯示模塊19</p><p>  4.3.2 上鎖開鎖模塊20</p><p>  4.3.3 鎖型模塊21</p><p>  4.3.4 報警模塊27</p>

10、<p>  4.3.5 延時、顯示延時模塊27</p><p><b>  5 系統(tǒng)調試29</b></p><p>  5.1 系統(tǒng)硬件調試29</p><p>  5.1.1 調試方法29</p><p>  5.1.2 調試過程29</p><p>  5.1.3 調試

11、結論29</p><p>  5.2 系統(tǒng)軟件調試29</p><p>  5.2.1 Wave6000、Keil簡介29</p><p>  5.2.2 調試過程30</p><p>  5.2.3 調試結果32</p><p><b>  5.3 結論32</b></p>

12、;<p><b>  致 謝33</b></p><p><b>  參考文獻34</b></p><p>  附錄Ⅰ電路原理圖35</p><p>  附錄Ⅱ 程序清單36</p><p><b>  緒論</b></p><p&g

13、t;<b>  鎖具壽命測試儀</b></p><p>  鎖具性能系列測試儀所測試的鎖具性能指標是指鎖具壽命、鑰匙拔出力、球形門鎖和抽屜鎖的扭矩、門鎖斜舌和掛鎖鎖粱閉合力、鎖斜舌軸向靜壓力等。而鎖具的壽命測試包括單舌和雙舌門鎖、球形門鎖、抽屜鎖、蟹鉗形自行車鎖、側開或直開掛鎖。</p><p>  鎖具性能系列測試儀的測試從宏觀上講可分為兩大類,即鎖具的耐久性測試和

14、鎖具的靈活度及牢固度測試。鎖具耐用度測試儀是用來進行鎖具壽命測試的專用檢測儀器。檢測部門用其對生產鎖具的企業(yè)產品質量進行抽樣檢測,檢測結果是判斷鎖具是否合格的重要依據(jù)。測試時將鎖具裝在測試儀上,由步進電機通過傳動機構帶動鎖體和鑰匙運動,模擬鎖具的使用狀況,測量其使用壽命。不同種類的鎖具其開啟次數(shù)在相關的標準中都有明確地規(guī)定。一般開啟次數(shù)都在1.5萬次至10萬次之間。我國的鎖具產品無論其內在質量還是外觀都在不斷的改進和完善,使鎖具產品在防

15、范盜竊事件的發(fā)生、保障國家和人民財產的安全、在環(huán)境裝飾和家庭裝飾中都發(fā)揮了重要的作用。</p><p><b>  選題的背景和意義</b></p><p>  對于耐久性測試儀器,由于從總體方案判定,采用了單片計算機技術、電子技術,使總體控制系統(tǒng)將機、電有機地結合在一起,不但提高了測試儀器的可靠性,而且還具有很大范圍的通用性。從可行性上看,如用傳統(tǒng)的機械方式完成這樣

16、復雜的動作是完全不可能的。無疑該耐久性測試儀器所具有的價值及近似完善的性能必將在鎖具質量監(jiān)控中發(fā)揮重要作用。而且其有些性能可移植于生產過程控制中,對于鎖具行業(yè)控制手段的提高具有非常積極的意義。</p><p><b>  方案論證</b></p><p><b>  方案的提出</b></p><p>  鎖具壽命自動測試

17、儀是利用89C51單片機來實現(xiàn)的。硬件方面:通過89C51單片機控制步進電機和直流電機模擬現(xiàn)實中鎖具的上鎖與開鎖;利用LED來顯示測試鎖具的次數(shù);利用撥碼開關來選擇鎖具類型;利用232串口實現(xiàn)程序的下載;當電路發(fā)生故障時,用報警電路報警。軟件方面:利用C語言和Wave6000編程,再利用SIC-ISP下載到89C51單片機中,實現(xiàn)模擬鎖具的選擇。</p><p><b>  方案的可行性分析</b

18、></p><p>  當今社會科技不斷進步,新的技術推動著社會的發(fā)展。就鎖具壽命測試儀而言,現(xiàn)在已經發(fā)展到很高的水平。PLC技術運用在鎖具壽命測試儀上,使鎖具壽命測試儀的性能得到了很大的提高。傳統(tǒng)的鎖具壽命自動測試儀是利用單片機來實現(xiàn)的。現(xiàn)在就其兩種方法進行比較。</p><p>  在經濟上來比較,PLC的成本要遠遠高于單片機的成本。因為單片機的技術已經成熟,價格比較便宜,而PL

19、C是新興的技術,價格上比較昂貴。</p><p>  根據(jù)題目要求設計鎖具壽命測試儀結構,如圖2.1所示。步進電機固定在底座上,在其軸上裝夾有鎖具,直流電機也固定在底座上,在其軸上安裝有齒輪,通過齒輪齒條副,將直流電機的圓周運動變換為鑰匙的直線運動。</p><p>  測試前的準備工作:首先把鎖具放在鎖具卡具里面固定好,然后把鑰匙放在鑰匙卡具里面卡好,之后根據(jù)鎖具類型調整測試儀初始位置。

20、</p><p>  圖2.1鎖具壽命測試儀結構</p><p>  鎖具壽命測試儀測試過程;</p><p> ?、?直流電機正轉將鑰匙插入鎖具;</p><p>  ⑵ 步進電機正轉鎖死斜舌,繼續(xù)正轉鎖死方舌;</p><p> ?、?步進電機反轉開啟方舌,繼續(xù)反轉開啟斜舌;</p><p>

21、; ?、?直流電機反轉將鑰匙拔出鎖具;</p><p>  ⑸ 記錄一次鎖具壽命。</p><p>  通過不斷的重復試驗就可以測試出鎖具的壽命。</p><p>  步進電機轉動角度是根據(jù)步進電機的轉速和時間調整的,同樣插進鑰匙的深度是通過直流電機的速度和時間調整的。</p><p><b>  結論</b></

22、p><p>  綜上所述,通過比較發(fā)現(xiàn)利用單片機實現(xiàn)鎖具壽命自動檢測系統(tǒng)設計是可以實現(xiàn)的。</p><p><b>  系統(tǒng)硬件設計</b></p><p><b>  系統(tǒng)的總體設計</b></p><p>  鎖具壽命測試儀控制系統(tǒng)的硬件設計是整個系統(tǒng)設計的基礎,硬件設計能否實現(xiàn)直接影響到整個系統(tǒng)。

23、根據(jù)題目要求:能連續(xù)模擬各種鎖具的使用過程,能顯示記錄鎖具使用次數(shù),設計出系統(tǒng)的總體結構。利用撥碼開關來實現(xiàn)連續(xù)模擬各種鎖具,用步進電機和直流電機來模擬鎖具的使用過程,用LED來顯示鎖具的測試次數(shù)。該系統(tǒng)設計的電路圖見附錄Ⅰ。</p><p><b>  系統(tǒng)的模塊化設計</b></p><p>  采用模塊化的設計思想,再根據(jù)題目要求,系統(tǒng)可分為89C51及其外圍電

24、路、LED顯示電路、鎖型選擇電路、232串口電路、報警電路和步進、直流電機電路。</p><p>  89C51及其外圍電路</p><p>  89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。單片機的可擦除只讀存儲器可以反

25、復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89C51是一種高效微控制器,89C2051是它的一種精簡版本。89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。 ⑴主要特性 與MCS-51 兼容; 4K字節(jié)可編程閃爍存儲器; 壽命:1000寫/擦循

26、環(huán); 數(shù)據(jù)保留時間:10年; 全靜態(tài)工作:0Hz-24Hz; 三級程序存儲器鎖定; 128*8位內部RAM; 32可編程I/O線; 兩個16位定時器/計數(shù)器; 5個中斷源; 可編程串行通道; 低功耗的閑置和掉電模式; </p><p>  89C51管腳圖如3.1圖所示。</p><p><

27、;b>  89C51管腳圖</b></p><p>  Vdd:供電電壓。 Vss:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內部提供上

28、拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高可用作輸入,P1口被外部下拉為低電平時將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低將輸出電流。

29、這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的</p><p>  RST:復位輸入。當振蕩器復位器件時要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在F

30、LASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 XTAL1:反向振

31、蕩放大器的輸入及內部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。 ⑶ 振蕩器特性 XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。輸入內部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求</p><p><b&g

32、t;  LED顯示電路</b></p><p>  數(shù)碼管是一種半導體發(fā)光器件,其基本單元是發(fā)光二極管。數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽極數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽極數(shù)

33、碼管在應用時應將公共極COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應字段就點亮。當某一字段的陰極為高電平時,相應字段就不亮。共陰極數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰極數(shù)碼管在應用時應將公共極COM接到地線GND上,當某一字段發(fā)光二極管的陽極為高電平時,相應字段就點亮。當某一字段的陽極為低電平時,相應字段就不亮。共陰、共陽數(shù)碼管段碼表如表3.1。本題目用到共陽極數(shù)碼管。</p&

34、gt;<p>  3和8為公共引腳接,A-7接P0.0口,B-6接P0.1口,C-4接P0.2口,D-2接P0.3口,E-1接P0.4口,F(xiàn)-9接P0.5口,G-10接P0.6口。數(shù)碼管結構圖如圖3.2所示,數(shù)碼管的內部電路見圖3.3所示。</p><p>  表3.1 共陰、共陽數(shù)碼管段碼表</p><p>  圖 3.2 數(shù)碼管結構圖</p><p&g

35、t;  圖3.3 數(shù)碼管的內部電路</p><p>  數(shù)碼管電路圖如圖3.4所示。</p><p>  圖3.4 數(shù)碼管電路圖</p><p>  鎖型選擇電路及故障報警電路</p><p>  題目的一個要求是:能夠連續(xù)模擬各種鎖具的使用過程。每種鎖具轉動的角度、插入鑰匙的深度都不盡相同。這就要求鎖具壽命自動測試儀在設計時要考慮鎖具的類型

36、選擇,基于設計的目的,現(xiàn)設計出四種鎖具類型可供選擇。電路圖如圖3.1所示。P3是雙向I/O口,數(shù)碼開關的5腳接P3.5口,6腳接P3.4口,7腳接P3.3口,8腳接P3.1口。</p><p>  在鎖具壽命自動檢測控制系統(tǒng)中,鎖具的壽命總是有限的,當鎖具壞了,鎖具壽命自動檢測控制系統(tǒng)就不能正常工作,這時就發(fā)出報警,以提示測試人員測試結束。報警電路如圖3.1所示。</p><p><

37、b>  232串口電路 </b></p><p>  計算機與計算機或計算機與終端之間的數(shù)據(jù)傳送可以采用串行通訊和并行通訊二種方式。由于串行通訊方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。在串行通訊時,要求通訊雙方都采用一個標準接口,使不同的設備可以方便地連接起來進行通訊。RS- 232-C接口(又稱 EIA RS-232-C)是目前最常用的一種串行通

38、訊接口。典型的RS-232信號在正負電平之間擺動,在發(fā)送數(shù)據(jù)時,發(fā)送端驅動器輸出正電平在+5~+15V,負電平在-5~-15V電平。當無數(shù)據(jù)傳輸時,線上為TTL,從開始傳送數(shù)據(jù)到結束,線上電平從TTL電平到RS-232電平再返回TTL電平。接收器典型的工作電平在+3~+12V與-3~-12V。接口的信號內容實際上RS-232-C的25條引線中有許多是很少使用的,在計算機與終端通訊中一般只使用3~9條引線。RS-232-C最常用的9條引線

39、的信號內容見表3.2所示 接口的電氣特性 在RS-232-C中任何一條信號線的電壓均為負邏輯關系。即:邏輯“1”,-5~ -15V;邏輯“0”+5~ +15V。噪聲容限為2V。即要求接收器能識別低至+3V的信號作為邏</p><p><b>  表 3.2</b></p><p>  接口的物理結構 RS-232-C接口連接器一般使用型號為DB-25的25芯插頭座,通

40、常插頭在DCE端,插座在DTE端。一些設備與PC機連接的RS-232-C接口,因為不使用對方的傳送控制信號,只需三條接口線,即“發(fā)送數(shù)據(jù)”、“接收數(shù)據(jù)”和“信號地”。所以采用DB-9的9芯插頭座,傳輸線采用屏蔽雙絞線。 </p><p>  在編制程序完成后通過RS-232串口寫到單片機中,結構圖如圖3.5所示。</p><p>  DB-9的9芯插頭座:5腳接地,2接RS-232的14腳

41、,3接RS-232的13腳。</p><p>  RS-232引腳:1腳接電解電容接3腳,2腳接電解電容然后接電源,4腳接電解電容接5腳,6腳接電解電容接地,7、8、9、10腳懸空,11接89C51的P3.0,12接89C51的P3.1,13接DB-9的9芯插頭座的3腳,14接DB-9的9芯插頭座的2腳,15接地,16接電源。</p><p>  圖 3.5 RS-232串口結構圖<

42、/p><p>  步進、直流電機及其控制電路</p><p>  步進電機是將電脈沖信號轉變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響,即給電機加一個脈沖信號,電機則轉過一個步距角。這一線性關系的存在,加上步進電機只有周期性的誤差而無累積誤差等特點。使得在速度、位置等控制領域用步進電機來控制非常簡單。</p

43、><p>  ⑴ 步進電機的工作原理</p><p>  該步進電機為一四相步進電機,采用單極性直流電源供電。只要對步進電機的各相繞組按合適的時序通電,就能使步進電機步進轉動。圖3.6是該四相反應式步進電機工作原理示意圖。</p><p>  圖 3.6  四相反應式步進電機工作原理示意圖</p><p>  開始時,開關SB接通電源,

44、SA、SC、SD斷開,B相磁極和轉子0、3號齒對齊,同時,轉子的1、4號齒就和C、D相繞組磁極產生錯齒,2、5號齒就和D、A相繞組磁極產生錯齒?! ‘旈_關SC接通電源,SB、SA、SD斷開時,由于C相繞組的磁力線和1、4號齒之間磁力線的作用,使轉子轉動,1、4號齒和C相繞組的磁極對齊。而0、3號齒和A、B相繞組產生錯齒,2、5號齒就和A、D相繞組磁極產生錯齒。依次類推,A、B、C、D四相繞組輪流供電,則轉子會沿著D、C、B、A方向轉動

45、?! ∷南嗖竭M電機按照通電順序的不同,可分為單四拍、雙四拍、八拍三種工作方式。單四拍與雙四拍的步距角相等,但單四拍的轉動力矩小。八拍工作方式的步距角是單四拍與雙四拍的一半,因此,八拍工作方式既可以保持較高的轉動力矩又可以提高控制精度?! 嗡呐?、雙四拍與八拍工作方式的電源通電時序與波形分別如圖3.7 a、b、c所示:</p><p><b>  圖3.7 </b></p>

46、<p> ?、?直流電機的工作原理</p><p>  輸出或輸入為直流電能的旋轉電機,稱為直流電機,它是能實現(xiàn)直流電能和機械能互相轉換的電機。當它作電動機運行時是直流電動機,將電能轉換為機械能;作發(fā)電機運行時是直流發(fā)電機,將機械能轉換為電能。</p><p>  直流電機由定子和轉子兩部分組成,其間有一定的氣隙。其構造的主要特點是具有一個帶換向器的電樞。直流電機的定子由機座、主

47、磁極、換向磁極、前后端蓋和刷架等部件組成。其中主磁極是產生直流電機氣隙磁場的主要部件,由永磁體或帶有直流勵磁繞組的疊片鐵心構成。直流電機的轉子則由電樞、換向器(又稱整流子)和轉軸等部件構成。其中電樞由電樞鐵心和電樞繞組兩部分組成。電樞鐵心由硅鋼片疊成,在其外圓均勻分布著齒槽,電樞繞組則嵌置于這些槽中。換向器是一種機械整流部件。由換向片疊成圓筒形后,以金屬夾件或塑料成型為一個整體。各換向片間互相絕緣。換向器質量對運行可靠性有很大影響。&l

48、t;/p><p>  直流電機的勵磁方式是指對勵磁繞組如何供電、產生勵磁磁通勢而建立主磁場的問題。根據(jù)勵磁方式的不同,直流電機可分為下列幾種類型。 ① 他勵直流電機 勵磁繞組與電樞繞組無聯(lián)接關系,而由其他直流電源對勵磁繞組供電的直流電機稱為他勵直流電機。M表示電動機,若為發(fā)電機,則用G表示。永磁直流電機也可看作他勵直流電機。 ② 并勵直流電機 并勵直流電機的勵磁繞組與電樞繞組相并聯(lián)。作

49、為并勵發(fā)電機來說,是電機本身發(fā)出來的端電壓為勵磁繞組供電;作為并勵電動機來說,勵磁繞組與電樞共用同一電源,從性能上講與他勵直流電動機相同。 ③ 串勵直流電機 串勵直流電機的勵磁繞組與電樞繞組串聯(lián)后,再接于直流電源。這種直流電機的勵磁電流就是電樞電流。 ④ 復勵直流電機 復勵直流電機有并勵和串勵兩個勵磁繞組。若串勵繞組產生的磁通勢與并勵繞組產生的磁通勢方向相同稱為積復勵。若兩個磁通勢方向相反,則稱為差復勵。

50、不同勵磁方式的直流電機有著不同的特性。一般情況直流電動機的主要勵磁方式是并勵式、串勵式和復勵式,直流發(fā)電機的主要勵磁方式是他勵式、并勵式和和復勵式。</p><p>  步進電機,直流電機的電路圖如圖3.8所示。</p><p>  圖 3.8 步進電機,直流電機的電路圖</p><p><b>  系統(tǒng)軟件設計</b></p>

51、<p><b>  C語言介紹</b></p><p>  C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作為系統(tǒng)設計語言,編寫工作系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。因此,它的應用范圍廣泛。</p><p>  C語言對操作系統(tǒng)和系統(tǒng)使用程序以及需要對硬件進行操作的場合,用C語言明顯

52、優(yōu)于其它解釋型高級語言,有一些大型應用軟件也是用C語言編寫的。</p><p>  C語言具有繪圖能力強,可移植性,并具備很強的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫。它是數(shù)值計算的高級語言。</p><p><b>  C語言的發(fā)展</b></p><p>  C語言的原型ALGOL 60語言。(也稱為A語言)1963年,劍

53、橋大學將ALGOL 60語言發(fā)展成為CPL(Combined Programming Language)語言。1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,于是產生了BCPL語言。1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,并為它起了一個有趣的名字“B語言”。意思是將CPL語言煮干,提煉出它的精華。并且他用B語言寫了第一個UNIX操作系統(tǒng)。而在1973年,B語言也給人“煮”了一

54、下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。為了使UNIX操作系統(tǒng)推廣,1977年Dennis M.Ritchie 發(fā)表了不依賴于具體機器系統(tǒng)的C語言編譯文本《可移植的C語言編譯程序》。即是著名的ANSI C。1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C語言程序》(The C Progra

55、mming Language),從而使C語言成為當時世界</p><p>  1988年,隨著微型計算機的日益普及, C語言出現(xiàn)了許多版本。由于沒有統(tǒng)一的標準,使得這些C語言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準, 成為現(xiàn)行的C語言標準3.C語言的主要特點 。C語言發(fā)展迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的功能。許多著名的系統(tǒng)

56、軟件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。用C語言加上一些匯編語言子程序, 就更能顯示C語言的優(yōu)勢了,像PC- DOS 、WORDSTAR等就是用這種方法編寫的。</p><p><b>  C語言的主要功能</b></p><p>  隨著微型計算機的日益普及,出現(xiàn)了許多C 語言版本。由于沒有統(tǒng)一的標準,使得這些C 語言之間出現(xiàn)了一些

57、不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C 語言制定了一套ANSI標準,成為現(xiàn)行的C語言標準。而在這里我們將主要以美國Borland 公司的產品Turbo C2.0作為介紹對象,簡要介紹一下C語言的基本知識。 </p><p><b>  ⑴ 數(shù)據(jù)類型 </b></p><p>  在C語言中,每個變量在使用之前必須定義其數(shù)據(jù)類型。Turbo

58、C有以下幾種類型:整型(int)、浮點型(float)、字符型(char)、指針型(*)、無值型(void)以及結構(struct)和聯(lián)合(union)。其中前五種是C語言的基本數(shù)據(jù)類型、后兩種數(shù)據(jù)類型(結構和聯(lián)合)則是C語言的擴展數(shù)據(jù)類型。 </p><p>  ⑵ 關鍵字和標識符、運算符 </p><p>  所謂關鍵字就是已被C語言本身使用、不能作其它用途的字。例如關鍵字else,就

59、再不能用作變量名、函數(shù)名等。所謂標識符是指常量、變量、語句標號以及用戶自定義函數(shù)的名稱。C標識符的定義十分靈活。 </p><p>  C的運算符非常豐富,主要分為三大類:算術運算符、關系與邏輯運算符、按位運算符。 </p><p><b> ?、?變量 </b></p><p>  C規(guī)定所有變量在使用前都必須加以說明。一條變量說明語句由數(shù)據(jù)

60、類型和其后的一個或多個變量名組成,例如“int x”。變量可以在程序中三個地方說明:函數(shù)內部、函數(shù)的參數(shù)定義中或所有的函數(shù)外部。根據(jù)所定義位置的不同,變量可分為局部變量、形式參數(shù)和全程變量。C像其它高級語言一樣也使用數(shù)組變量。所謂數(shù)組就是指具有相同數(shù)據(jù)類型的變量集,并擁有共同的名字。數(shù)組中的每個特定元素都使用下標來訪問。 </p><p><b> ?、?控制流程語句 </b></p&

61、gt;<p>  C提供了豐富、靈活的控制流程語句,主要有:條件語句、循環(huán)語句和開關語句。條件語句的一般形式為if-else。C提供三種基本的循環(huán)語句:for語句、while語句和do-while語句。而在編寫程序時,經常會碰到按不同情況分轉的多路問題, 這時可用嵌套if-else-if語句來實現(xiàn),但if-else-if語句使用不方便,并且容易出錯。對這種情況,C提供了一個switch開關語句。 </p>&

62、lt;p>  ⑸ 指針(point) </p><p>  學習C語言,指針是較難理解的一個概念。我們知道變量在計算機內占有一塊存貯區(qū)域(也就是有一個“地址”),變量的值就存放在這塊區(qū)域之中,在計算機內部,通過訪問或修改這塊區(qū)域的內容來訪問或修改相應的變量。C語言中,對于變量的訪問形式之一,就是先求出變量的地址,然后再通過地址對它進行訪問,這就是指針及指針變量。指針變量的一般定義為“類型標識符?。獦俗R符”,

63、其中標識符是指針變量的名字,標識符前加了“*”號, 表示該變量是指針變量,而最前面的“類型標識符”表示該指針變量所指向的變量的類型。一個指針變量只能指向同一種類型的變量,也就是說,我們不能定義一個指針變量,既能指向一整型變量又能指向雙精度變量。 </p><p><b>  程序設計思想</b></p><p>  程序的設計主要是圍繞上述的操作來進行,在軟件的設計過

64、程中,以實現(xiàn)各個預定功能作為各個模塊的設計原則。各獨立功能一般都設計了相應的函數(shù),例如文本編輯函數(shù)、初始化函數(shù)、運行函數(shù)等。使所設計的軟件具有層次清楚,修改方便等特點。在計算機控制步進電機運動時,要注意在換向時,給出一定的延時。以避免由于機器運行的慣性造成位置的偏差,延時的長短可在實際調試過程中確定。此外,在軟件的設計中還對一些常見的錯誤以及可能發(fā)生的誤操作進行了必要的處理。出現(xiàn)錯誤時,軟件中設計了報警功能。</p>&l

65、t;p><b>  模塊化設計</b></p><p><b>  顯示模塊</b></p><p>  在鎖具壽命測試儀測試鎖具時,會有實時顯示測試的次數(shù)。下面的程序就是用來顯示測量次數(shù)。</p><p>  unsigned char code Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x

66、92,0x82,0xF8,0x80,0x90};</p><p>  上面一段小程序是共陽數(shù)碼管段碼表,下面的程序是顯示程序。</p><p>  void display(unsigned long n)</p><p><b>  {</b></p><p>  P0=Tab[n/10000000];</p&g

67、t;<p><b>  P2=0xfe;</b></p><p>  delay(10);</p><p>  P0=Tab[n%10000000/1000000]; //數(shù)碼管千萬位數(shù)字</p><p><b>  P2=0xfd;</b></p><p>  delay

68、(10);</p><p>  P0=Tab[n%1000000/100000]; //數(shù)碼管百萬位數(shù)字</p><p><b>  P2=0xfb;</b></p><p>  delay(10);</p><p>  P0=Tab[n%100000/10000]; //數(shù)碼管十萬位數(shù)

69、字</p><p><b>  P2=0xf7;</b></p><p>  delay(10);</p><p>  P0=Tab[n%10000/1000]; //數(shù)碼管萬位數(shù)字</p><p><b>  P2=0xef;</b></p><p>

70、  delay(10);</p><p>  P0=Tab[n%1000/100]; //數(shù)碼管千位數(shù)字</p><p><b>  P2=0xdf;</b></p><p>  delay(10);</p><p>  P0=Tab[n%100/10]; //數(shù)碼

71、管百位數(shù)字</p><p><b>  P2=0xbf;</b></p><p>  delay(10);</p><p>  P0=Tab[n%10]; //數(shù)碼管十位數(shù)字</p><p><b>  P2=0x7f;</b></p><p

72、>  delay(10); //數(shù)碼管個位數(shù)字</p><p><b>  P2=0xff;</b></p><p><b>  }</b></p><p><b>  上鎖開鎖模塊</b></p><p>  上鎖函數(shù)的主要功

73、能是:把16制代碼送到P1口,使步進電機轉動</p><p>  void motor_lock(unsigned int a)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<a;i++)</p>

74、<p><b>  {</b></p><p>  P1=0x06; //將二進制0000 0110送到P1口</p><p>  displaydelay(10); //延時</p><p>  P1=0x05; //將二進制0000 0101送到P1口</p

75、><p>  displaydelay(10); </p><p>  P1=0x09; //將二進制0000 1001送到P1口</p><p>  displaydelay(10);</p><p>  P1=0x0A; //將二進制0000 1010送到P1口</p

76、><p>  displaydelay(10);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  停止函數(shù)</b></p><p>  void motor_stop(unsigned int b)

77、</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<b;i++)</p><p><b>  {</b></p><p>  P1=0xff; //將二進制1

78、111 1111送到P1口,使步進電機停止轉動</p><p>  displaydelay(10); //延時</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  解鎖函數(shù)</b></p>&l

79、t;p>  void motor_unlock(unsigned int c)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<c;i++)</p><p><b>  {</b>&l

80、t;/p><p>  P1=0x0A; //將二進制0000 1010送到P1口</p><p>  displaydelay(10); //延時</p><p>  P1=0x09; //將二進制0000 1001送到P1口</p><p>  displaydelay(1

81、0);</p><p>  P1=0x05; //將二進制0000 0101送到P1口</p><p>  displaydelay(10);</p><p>  P1=0x06; //將二進制0000 0110送到P1口</p><p>  displaydelay(10);<

82、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  鎖型模塊</b></p><p>  本程序段是鎖具類型的選擇,當使用撥碼開關選擇了鎖具類型時,函數(shù)就跳轉到相應的鎖型函數(shù)中。如果在測試鎖具時出現(xiàn)錯誤,函數(shù)會自動跳轉到出錯子

83、函數(shù)中執(zhí)行報警提示。 </p><p>  鎖型模塊的流程圖如圖4.1所示</p><p>  由于四種鎖型在流程圖上的表示是一樣的,在此就鎖型1的流程圖作以分析,其它三種鎖型也一樣。</p><p>  圖4.1 鎖型模塊的流程圖</p><p><b>  鎖型選擇程序段:</b></p><p&

84、gt;<b>  while(1)</b></p><p><b>  {</b></p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p><b>  d=1;</b></

85、p><p><b>  if(d==1)</b></p><p><b>  {</b></p><p><b>  chucuo();</b></p><p><b>  }</b></p><p><b>  }</

86、b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(L1==0&&L2!=0&&L3!=0&&L4!=0) //若L1為0,L2、L3、L4不為1</p><p><b>

87、;  {</b></p><p><b>  lock1();</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  { if(L2==0&&L1!=0&&L3!=0&am

88、p;&L4!=0) //若L2為0,L1、L3、L4不為1</p><p><b>  {</b></p><p><b>  lock1();</b></p><p><b>  }</b></p><p><b>  else</b></

89、p><p>  { if(L3==0&&L1!=0&&L2!=0&&L4!=0) //若L3為0,L1、L2、L4不為1</p><p><b>  {</b></p><p><b>  lock1();</b></p><p><b>  

90、}</b></p><p><b>  else</b></p><p>  { if(L4==0&&L1!=0&&L2!=0&&L3!=0) //若L4為0,L1、L2、L3不為1</p><p><b>  {</b></p><p>

91、<b>  lock1();</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  display(number);</p><p>

92、;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><

93、b>  }</b></p><p>  型鎖1測試壽命函數(shù)程序段:</p><p>  void lock1(void)</p><p><b>  {</b></p><p>  displaydelay(20,number);</p><p>  KEY_IN=0;

94、 //進鑰匙</p><p>  displaydelay(10,number); //延時并顯示</p><p>  KEY_IN=1; //停止進鑰匙</p><p>  displaydelay(20,number); //延時并顯示</p><p>  moto

95、r_lock(1); //鎖</p><p>  motor_stop(5); //停頓</p><p>  motor_lock(2); //反鎖</p><p>  motor_stop(5); //停頓</p><p>  motor

96、_unlock(3); //解鎖</p><p>  motor_stop(5); //停頓</p><p>  displaydelay(20,number);</p><p>  KEY_OUT=0; //出鑰匙</p><p>  displaydelay(

97、10,number); //延時并顯示</p><p>  KEY_OUT=1; //停止進鑰匙</p><p>  displaydelay(20,number); //延時并顯示</p><p>  number++; //測試完畢,測試次數(shù)加一</p><

98、;p><b>  }</b></p><p>  型鎖2測試壽命函數(shù)程序段:</p><p>  void lock2(void)</p><p><b>  {</b></p><p>  displaydelay(500,number);</p><p>  KEY

99、_IN=0; //進鑰匙</p><p>  displaydelay(100,number); //延時并顯示</p><p>  KEY_IN=1; //停止進鑰匙</p><p>  displaydelay(500,number); //延時并顯示</p><

100、p>  motor_lock(3); //鎖</p><p>  motor_stop(10); //停頓</p><p>  motor_lock(7); //反鎖</p><p>  motor_stop(10); //停頓</p><p

101、>  motor_unlock(10); //解鎖</p><p>  motor_stop(10); //停頓</p><p>  displaydelay(500,number);</p><p>  KEY_OUT=0; //出鑰匙</p><p>  

102、displaydelay(100,number); //延時并顯示</p><p>  KEY_OUT=1; //停止進鑰匙</p><p>  displaydelay(500,number); //延時并顯示</p><p>  number++; //測試完畢,測試次數(shù)加一</

103、p><p><b>  }</b></p><p>  型鎖3測試壽命函數(shù)程序段:</p><p>  void lock3(void)</p><p><b>  {</b></p><p>  displaydelay(500,number);</p><

104、p>  KEY_IN=0; //進鑰匙</p><p>  displaydelay(100,number); //延時并顯示</p><p>  KEY_IN=1; //停止進鑰匙</p><p>  displaydelay(500,number); //延時并顯示</

105、p><p>  motor_lock(5); //鎖</p><p>  motor_stop(10); //停頓</p><p>  motor_lock(10); //反鎖</p><p>  motor_stop(10); //停頓</p

106、><p>  motor_unlock(15); //解鎖</p><p>  motor_stop(10); //停頓</p><p>  displaydelay(500,number);</p><p>  KEY_OUT=0; //出鑰匙</p>

107、<p>  displaydelay(100,number); //延時并顯示</p><p>  KEY_OUT=1; //停止進鑰匙</p><p>  displaydelay(500,number); //延時并顯示</p><p>  number++; //

108、測試完畢,測試次數(shù)加一</p><p><b>  }</b></p><p>  型鎖4測試壽命函數(shù)程序段:</p><p>  void lock4(void)</p><p><b>  {</b></p><p>  displaydelay(500,number);

109、</p><p>  KEY_IN=0; //進鑰匙</p><p>  displaydelay(100,number); //延時并顯示</p><p>  KEY_IN=1; //停止進鑰匙</p><p>  displaydelay(500,number)

110、; //延時并顯示</p><p>  motor_lock(8); //鎖</p><p>  motor_stop(10); //停頓</p><p>  motor_lock(12); //反鎖</p><p>  motor_stop(10);

111、 //停頓</p><p>  motor_unlock(20); //解鎖</p><p>  motor_stop(10); //停頓</p><p>  KEY_OUT=0; //出鑰匙</p><p>  displaydelay(500,numbe

112、r);</p><p>  displaydelay(100,number); //延時并顯示</p><p>  KEY_OUT=1; //停止進鑰匙</p><p>  displaydelay(500,number); //延時并顯示</p><p>  number++;

113、 //測試完畢,測試次數(shù)加一</p><p><b>  }</b></p><p><b>  報警模塊</b></p><p>  蜂鳴器函數(shù),當鎖具測試完成時,蜂鳴器會發(fā)出聲響提示,鎖具測試已經完成。</p><p>  void sound (void)</p>

114、<p><b>  {</b></p><p>  SPEAKER=0;</p><p>  delay(50);</p><p>  SPEAKER=1;</p><p><b>  }</b></p><p>  void chucuo(void)</p&

115、gt;<p><b>  {</b></p><p><b>  sound();</b></p><p>  displaydelay(1,number);</p><p><b>  }</b></p><p><b>  延時、顯示延時模塊<

116、/b></p><p>  本程序段的功能是延時。延時函數(shù)用到的很多,在鎖函數(shù)中,通過延時時間的不同來區(qū)別鎖型。在顯示延時中也用到了延時函數(shù),主要是顯示的作用,使LED的顯示更清晰。</p><p>  void delay(unsigned int times)</p><p><b>  {</b></p><p

117、><b>  int j;</b></p><p><b>  int i;</b></p><p>  for(j=0;j<times;j++)</p><p><b>  {</b></p><p>  for (i=0;i<20;i++);</p&

118、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  void displaydelay(unsigned int times,unsigned long n)</p><p><b>  {</b></p><p>&

119、lt;b>  int j;</b></p><p>  for(j=0;j<times;j++)</p><p><b>  {</b></p><p><b>  delay(1);</b></p><p>  display(n);</p><p>

120、;<b>  } }</b></p><p><b>  系統(tǒng)調試</b></p><p><b>  系統(tǒng)硬件調試</b></p><p><b>  調試方法</b></p><p>  眾所周知,硬件電路是實現(xiàn)功能的前提。在焊接硬件電路要時要按

121、模塊檢查。一旦出現(xiàn)問題,馬上解決問題。這樣就大大縮小了出錯的范圍,利于工作的進程。</p><p><b>  調試過程</b></p><p>  檢測電路連接無誤后,接通電源,看數(shù)碼管是否顯示,結果有顯示說明數(shù)碼管電路沒有錯誤。用萬用表測量各個元件及引腳的電壓,看是否導通。經過測量各個都能正常工作。</p><p><b>  調

122、試結論</b></p><p>  經過調試,硬件電路已經沒有問題了,接下來的工作就是軟件編程,下面就介紹系統(tǒng)軟件的實現(xiàn)過程。</p><p><b>  系統(tǒng)軟件調試</b></p><p>  Wave6000、Keil簡介</p><p>  偉福6000只是一個仿真工具。 用Keil C51 將程序在

溫馨提示

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

評論

0/150

提交評論