版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)</p><p><b> ?。ǘ?屆)</b></p><p> 染廠水缸數控水表設計</p><p> 所在學院 </p><p> 專業(yè)班級 電子信息工程 </p>
2、<p> 學生姓名 學號 </p><p> 指導教師 職稱 </p><p> 完成日期 年 月 </p><p><b> 摘 要</b></p><p> 染廠的
3、染缸需要經常的上水和放水,人工操作時水量不易控制精度,而且放水后人一旦走開,易造成浪費。本文紹了一種基于低功耗芯片AT89C51的染廠水缸數控水表設計,能夠實現對染廠的染缸上水的自動控制,使操作時能精確控制水量,避免不必要的浪費。</p><p> 此次設計包括硬件電路設計和軟件設計。硬件電路設計以AT89C51單片機為核心部件,外擴了LCD顯示電路、電磁閥驅動電路、鍵盤輸入電路、水量檢測電路、復位電路以及時鐘
4、電路。軟件設計采用C語言編程,給出了具體的流程圖。數控水表實現的主要功能有:上水模式設定,LCD顯示,復位、停止、水量設定步進、步退等。</p><p> 關鍵詞:AT89C51,LCD顯示,數控水表</p><p> THE DESIGN OF CNC WATER METER FOR DYEING FACTORY’S WATER VAT </p><p>&l
5、t;b> Abstract</b></p><p> The vat dye of dyeing factory always need to hold and discharge the water. Manual operation is difficult to control the accuracy of water.And it is easily led to waste if
6、 people go away after drainaging. This paper introduces a design of CNC water meter for dyeing factory’s water vat based on a low power consumption chip AT89C51. It can achieve the automation of the dye vat of dyeing fac
7、tory in holding water,and make us precisely control the amount of water and not easily to led to waste.</p><p> This design includes hardware and software design.The core components of hardware design is a
8、single-chip microcomputer AT89C51, and external expanded LCD display circuit,electromagnetic valve urge circuit,keyboard input circuit,water flow measuring circuit,reset circuit and clock circuit. Software design using C
9、 language programming,the flow charts are provided.The CNC water meter achieves many main functions: holding water mode setting, LCD display, reset, stop, water setting step,step back,ec</p><p> Keywords: A
10、T89C51,LCD display, the CNC water meter</p><p><b> 目錄</b></p><p><b> 摘 要I</b></p><p> AbstractII</p><p><b> 1 緒論1</b></p&
11、gt;<p> 1.1課題的來源及意義1</p><p> 1.2數控水表在國內的發(fā)展現狀1</p><p> 1.3課題研究的主要內容2</p><p> 2數控水表方案論證與硬件設計3</p><p> 2.1數控水表系統(tǒng)結構框圖設計3</p><p><b> 2.2
12、方案論證3</b></p><p> 2.3數控水表各模塊原理及設計3</p><p> 2.3.1 最小系統(tǒng)模塊設計3</p><p> 2.3.2 鍵盤輸入模塊設計6</p><p> 2.3.3 LCD液晶顯示模塊設計6</p><p> 2.3.4 數據采集模塊設計9</
13、p><p> 2.3.5 電磁閥驅動模塊設計11</p><p> 3染廠水缸數控水表軟件設計11</p><p> 3.1主程序流程圖12</p><p> 3.1.1 顯示子程序流程圖12</p><p> 3.1.2 鍵盤子程序流程圖13</p><p> 3.2 系統(tǒng)調
14、試16</p><p> 3.2.1 軟件調試16</p><p> 3.2.2 仿真16</p><p><b> 4總結17</b></p><p><b> 參考文獻18</b></p><p> 致謝錯誤!未定義書簽。</p>&l
15、t;p><b> 附錄20</b></p><p> 附錄圖1 完整的系統(tǒng)電路原理圖20</p><p> 附錄圖2 PCB版圖20</p><p> 附錄圖3 程序21</p><p><b> 1 緒論</b></p><p> 1.1課題的來源
16、及意義</p><p> 水是生命的源泉,是人類賴以生存和發(fā)展的重要的物質資源之一。在染整工廠中,水同樣是不可缺之的一項資源,從燒毛、精練、漂白以至于染色整理各工程均需要用水,舉凡染料之溶解、化學助劑之使用、雜質之去除及用于熱源之蒸汽也要用水,鍋爐才能供應蒸汽,由此可見水對一個染整工程之重要性。然而我國是個水資源十分短缺的國家,人均水資源量僅占世界平均水平的四分之一。因此我們更應該注重節(jié)約用水,尤其是工業(yè)用水方
17、面。而染廠的染缸需要經常的上水和放水,但是人工操作時水量不易控制精度,而且放水后人一旦走開,易造成浪費,因此要設計一個具有多種模式的上水水表,實現對上水的自動控制。</p><p> 21世紀是一個普遍實現現代化的時代。隨著現代計量技術、信息網絡技術和傳感技術以及社會化需求的發(fā)展,在很多企業(yè)甚至是許多家庭中都已經實現了自動化控制。而染廠在用水方面,由于接到訂單數量不定,經常造成浴比過大,使用水量過大。而使用數控
18、水表實現了染廠染缸上下水的自動控制,很好的解決了這個問題,不僅節(jié)約了水資源更節(jié)省了人力資源。</p><p> 隨著人們生活水平的不斷提高,數字化控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中數控制直流穩(wěn)壓電源就是一個很好的典型例子,但人們對它的要求也越來越高,要為現代人工作、科研,生活、提供更好的,更方便的設施就需要從數字電子技術入手,一切向數字化,智能化方向發(fā)展[1]。</p&g
19、t;<p> 1.2數控水表在國內的發(fā)展現狀</p><p> 在近兩個世紀的時間旅程中,水表漸漸進入我們的生活中,從最初的新奇到現在的習以為常,但不可否認不管是民用還是工業(yè)企業(yè)用水,水表都起著不可或缺的作用。而隨著科技的不斷發(fā)展,水表也從最初簡陋的平衡罐式水表發(fā)展成現今各種完善的數控水表。在我國,比較先進的數控水表主要有寧波埃美柯銅閥門有限公司的DLB型數控定量水表,寧波水表股份有限公司的LX
20、LD型數控定量水表以及石家莊瑞輝機械設備有限公司RHDLB型數控定量水表等。它們主要用于陶瓷、紡織、化工、玻璃等行業(yè)需要重復自來水的場合。 </p><p> 雖然數控水表有著各種各樣的功能,但是現如今應用最廣的還是定量給水功能。而在我國不管是哪種數控定量水表,它們采用的原理都是:啟動電磁閥后水流通過水表,使葉片感應出一系列的脈沖信號。脈沖信號經放大、分頻后與定值器所預置的流量相減,當減到零時,經過控制器關閉
21、電磁閥,完成一次定量供水。 這已經是我國現今比較先進的數控定量水表[2]。</p><p> 1.3課題研究的主要內容</p><p> 本課題要研究的內容主要是實現對染廠水缸的上下水的自動控制。染廠水缸數控水表設計在硬件設計方面以AT89c51單片機為核心部件,采用模塊化電路設計,包括LCD顯示電路、電磁閥驅動電路、鍵盤輸入電路、水量檢測電路、復位電路以及時鐘電路。在軟件設計方面,通
22、過C 語言編程,配合硬件的各個功能模塊的功能更加精準,同時要設計一些簡單的算法來處理在數據采集電路中得到的數據。</p><p> 在硬件電路模塊化設計中,本課題利用AT89C51單片機的P0口和P2口、P0口、P3口的T0引腳以及P2口的P2.0引腳分別驅動LCD顯示電路、4*4矩陣鍵盤電路、電磁閥驅動電路和水量檢測電路。其中LCD選用的是1602,電磁閥選用的是MP15A-5V,傳感器選用的是A44E集成開
23、關型霍耳傳感器。</p><p> 在軟件設計方面,我選擇自己比較熟悉的C語言進行設計編程。同硬件設計一樣,軟件設計采用了結構化、模塊化的設計方法,由主程序以及顯示子程序、鍵盤子程序等模塊組成。</p><p> 本設計主要實現的功能有上水模式設定, LCD顯示,復位、點動、停止、水量設定步進、步退等。</p><p> 2數控水表方案論證與硬件設計</
24、p><p> 2.1數控水表系統(tǒng)結構框圖設計</p><p> 圖2-1硬件總體設計方案</p><p><b> 2.2方案論證</b></p><p> 工作原理:通過水量傳感器,采集實際上水水量數據并與設定的上水水量作比較,并將數據反饋會單片機,從而控制LCD的顯示以及閥門的開關,達到水缸上水自動控制的目的。&
25、lt;/p><p> 本課題研究的系統(tǒng)比較小,且大部分電路的工作電壓都比較小,因此在實際應用中各模塊電路采用的器件的功耗都比較低。例如AT89C51單片機、MP15A-5V電磁閥、1602LCD顯示器和A44E集成開關型霍爾傳感器等等。</p><p> 2.3數控水表各模塊原理及設計</p><p> 2.3.1 最小系統(tǒng)模塊設計</p><
26、p> 單片機的最小系統(tǒng)主要由三部分組成,即AT89C51單片機、復位電路以及時鐘電路。</p><p> ?。?)AT89C51單片機</p><p> AT89C51單片機是美國ATMEL公司生產的一種帶4K字節(jié)FLASH存儲器的低電壓,低功耗,高性能的CMOS 8位微處理器。此單片機采用ATMEL公司的高密度、不易丟失的存儲技術制造,可反復寫擦循環(huán)1000次,保存數據達10年
27、之久并且兼容標準MCS-51指令系統(tǒng),能靈活的應用于各種控制領域之中。其引腳排列圖如圖2-2所示。</p><p> 圖2-2 51單片機雙列直插封裝方式的引腳</p><p> 由圖可知,AT89C51單片機共有40個引腳,按功能可分為三類:電源及時鐘引腳,控制引腳,I/O口引腳。</p><p><b> 電源及時鐘引腳</b>&l
28、t;/p><p> Vcc(40引腳):接供電電壓,+5V。</p><p> GND(20引腳):接地。</p><p> XTAL1(19引腳):反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 </p><p> XTAL2(18引腳):來自反向振蕩器的輸出。</p><p><b> 控制引腳
29、</b></p><p> RST(9引腳):復位輸入,高電平有效。當振蕩器復位器件時,要保持RST引腳大于兩個機器周期的高電平時間。 </p><p> ALE/PROG(30引腳):ALE引腳輸出為地址鎖存允許信號。在FLASH編程期間,此引腳用于輸入編程脈沖。當單片機上電正常時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部
30、輸出的脈沖或用于定時目的。然而要注意的是,當單片機訪問外部數據存儲器時(即執(zhí)行的是MOVX類指令),在1個機器周期中ALE只出現一次,即丟失1個ALE脈沖。</p><p> /PSEN(29引腳):程序存儲器允許輸出控制端。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。 </p><p> /EA/VPP
31、(31引腳):當/EA保持低電平時,單片機則在只訪問外部程序存儲器,不管是否有內部程序存儲器。當/EA引腳為高電平時,單片機訪問片內程序存儲器,但在PC值超過0FFFH(對于8051、8751)時,即超出片內存儲器的4KB地址范圍時,將自動轉向執(zhí)行外部程序存儲器內的程序[3]。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP),是本引腳的第二功能。</p><p><b> I/O口引腳&
32、lt;/b></p><p> P0口:雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數據總線分時復用口,可以驅動8個LS型TTL負載。 </p><p> P1口:P1口是一個8位準雙向I/O口。P1口只能作為I/O口使用,它的內部有一個上拉電阻,所以連接外圍負載的時侯不需要在外接上拉電阻。</p><p> P2口:P2口是一個置內部上拉電阻的
33、8位準雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流。當P2口作為地址輸出口時,可以輸出程序存儲器或外部數據存儲器的高8位地址,并與P0口輸出的低8位地址一起構成16位地址線,從而可以分別尋址64KB的程序存儲器或者外部數據存儲器[4]。 </p><p> P3口: 8位準雙向I/O口,雙功能復用口,可接收輸出4個TTL門電流[3]。但在實際的電路應用中,P3口第二功能比第一功能更為重要。<
34、/p><p> 表2-1 P3口的第二功能</p><p> (2)復位電路與時鐘電路</p><p> 如下圖所示,復位電路是電平方式的,通過RST端經電阻與電源Vcc接通而實現。時鐘電路由2個起振電容和1個晶振構成。</p><p> 圖2-3 復位電路與時鐘電路</p><p> 2.3.2 鍵盤輸入模塊設
35、計</p><p> 在這里,我選用矩陣鍵盤,即4*4鍵盤作為輸入電路,它是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤。在行線和列線的每一個交叉點設置一個按鍵,一共就有16個按鍵,其中有10個鍵代表0-9十個數字,其他六個鍵有水量設定步進、步退按鈕,輸入水量按鈕,輸入確定按鈕,修改設定水量按鈕。這種矩陣鍵盤結構能夠有效的提高單片機系統(tǒng)中I/O口的利用率。</p><p>
36、對于鍵盤來說,最重要的就是識別按鍵。無按鍵按下時,行線處于高電平狀態(tài),而當有鍵按下時,行線的電平狀態(tài)則由與此行線相連的列線的電平決定。如果列線的電平為低,則行線電平為低,反之,行線電平為高。這是識別行列式鍵盤按鍵是否按下的關鍵。具體的鍵盤設計電路如圖2-4所示。</p><p> 圖2-4 4*4鍵盤輸入</p><p> 2.3.3 LCD液晶顯示模塊設計</p>&
37、lt;p> LCD(Liquid CrystalDisplay)是液晶顯示器英文名稱的縮寫,液晶顯示器是一種被動式的顯示器,即液晶本身并不發(fā)光,而是利用液晶經過處理后能改變光線通過方向的特性,達到白底黑字或黑底白字顯示的目的。液晶顯示器是一種功耗極低的顯示器件,具有低壓微功耗、平板型結構、顯示信息量大、沒有電磁輻射、壽命長等特點。目前市場上的液晶顯示器主要有字段型、點陣字符型以及點陣圖形型三種。在這里,我選用的是1602LCD液
38、晶顯示器。</p><p> ⑴1602液晶顯示的性能及特點</p><p> ?、?602LCD的特點</p><p> 1602液晶顯示屏是基于HD44780液晶芯片,屬于工業(yè)字符型液晶顯示器,能夠同時顯示16*2個字符(16列2行),模塊結構緊湊輕巧,裝配容易,單+5V電源供電,低功耗、壽命長、可靠性高。</p><p><b
39、> ?、谥饕夹g參數</b></p><p> 顯示容量:16×2個字符</p><p> 芯片工作電壓:4.5—5.5V</p><p> 工作電流:2.0mA(5.0V)</p><p> 模塊最佳工作電壓:5.0V</p><p> 字符尺寸:2.95×4.35(W
40、×H)mm</p><p><b> ③引腳介紹及說明</b></p><p> 1602字符型LCD通常有14條或者16條引腳,但是16引腳的控制原理與14引腳的控制原理完全一樣。相對14引腳的LCD,16引腳多出了兩條背光電源線,即Vcc和地線GND。詳見表2-2。</p><p> 表2-2 1602LCD引腳說明<
41、;/p><p> ?、?602LCD的顯示及讀寫操作時序</p><p> HD44780內置了DDRAM,就是顯示數據的RAM,用來寄存待顯示的字符代碼,一共80個字節(jié),但要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,地址和屏幕的對應關系如下圖所示。</p><p> 圖2-5 1602LCD內部顯示地址</p><p>
42、 要輸入需要顯示的字符,1602LCD就必須進行讀寫操作。對于1602LCD而言,讀操作的輸出取決于RS、R/W、E三個引腳,他們的時序關系如下圖所示。</p><p> 圖2-6 寫操作時序</p><p> 圖2-7 讀操作時序</p><p> ?、?602與51單片機的鏈接</p><p> 本設計以P0口驅動LCD,用P2
43、口的高三位分別控制RS、R/W和E三位。由于1602LCD內置上拉電阻,因此在P0口不用接上拉電阻,具體電路如圖2-8所示。</p><p> 圖2-8 LCD顯示電路</p><p> 2.3.4 數據采集模塊設計</p><p> 隨著現代測量、控制和自動化技術的發(fā)展,各個領域大多都已經實現用計算機的控制,而傳感器作為一種能將各種非電量(包括物理量、化學量
44、、生物量等)轉變成為另一種物理量(一般為電量)的裝置恰恰為其提供了保障。在現實生活中,我們也可能見到各種各樣的傳感器,如在水表中就有用到水流量傳感器。本課題中也同樣會用到水流量傳感器,選用的是霍爾傳感器。</p><p> 霍爾傳感器以霍爾效應為其工作基礎,是由霍爾元件和它的附屬電路組成的集成傳感器。它可以檢測磁場及其變化,也可在用于各種與磁場有關的場合。霍爾傳感器一般可分為線性型霍爾傳感器和開關型霍爾傳感器兩
45、種。其中線性型霍爾傳感器由霍爾元件、線性放大器和射極跟隨器組成,它輸出模擬量,一般用于電流和唯一測量。開關型霍爾傳感器由穩(wěn)壓器、霍爾元件、差分放大器,斯密特觸發(fā)器和輸出級組成,它輸出數字量,主要用于測轉數、轉速、風速、流速、接近開關、關門告知器、報警器、自動控制電路等。因此在數控水表中采用的是開關型霍爾傳感器。</p><p> ?、呕魻杺鞲衅鳒y水量原理</p><p> 圖2-9 霍爾
46、傳感器水表</p><p> 如圖所示,在六片螺旋葉其中對應的3片葉片上各粘上一塊小磁鋼, B處為霍耳傳感器。當有小磁鋼的葉片經過時,霍耳傳感器就會輸出一個脈沖,由圖可知,葉片每轉動一周就會輸出三個脈沖。水表每轉一周,即螺旋葉片經水推動旋轉一周,就有一水表大容量的水流過。因此,在一段時間內只要記錄葉片旋轉的圈數并乘以水表的體積,就可以得到流過的總的水量。</p><p> 設水表的容積
47、為V,傳回單片機的脈沖數為N,總的水量為S。則水表轉動了1/3N圈,得到的用水量為</p><p><b> (2-1)</b></p><p> ⑵A44E集成開關型霍爾傳感器</p><p> (a)結構圖 (b)特性曲線</p><p> 圖2-10 集成開關
48、型霍耳傳感器原理圖</p><p> A44E 集成霍耳開關由穩(wěn)壓器A、霍耳電勢發(fā)生器B、差分放大器C、施密特觸發(fā)器D 和OC 門輸出E 五個基本部分組成,如圖2-10(a)所示。其中(1)、(2)、(3)代表集成霍耳開關的三個引出端點。在輸入端輸入電壓Vcc,經穩(wěn)壓器穩(wěn)壓后加在霍耳電勢發(fā)生器的兩端,根據霍耳效應的原理,當霍耳片處在磁場中的時侯,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產生霍耳電
49、勢差輸出,該信號經放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當施加的磁場達到工作點(即Bop)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導通,此時OC門輸出端輸出低電壓,通常稱這種狀態(tài)為開。當施加的磁場達到釋放點(即BrP)時,觸發(fā)器輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關。這樣兩次電壓變換,使霍耳開關完成了一次開關動作。Bop與BrP的差值一定,此差值BH = Bop - BrP稱為磁滯,在此
50、差值內,V0保持不變,因而使開關輸出穩(wěn)定可靠,這也就是集電成霍耳開關傳感器優(yōu)良特性之一[5]。A44E集成霍爾開關傳感器的輸出特性如圖2-10(b)所示。</p><p> ⑵A44E霍爾傳感器與51單片機的連接</p><p> 圖2-11 霍爾傳感器接線圖</p><p> 霍爾傳感器輸出的脈沖傳向單片機的P3.4口。</p><p&
51、gt; 2.3.5 電磁閥驅動模塊設計</p><p><b> ?、烹姶砰y工作原理</b></p><p> 電磁閥從工作原理上可分為三大類,分別是直動式電磁閥、分步直動式電磁閥以及先導式電磁。目前大多數水表采用的都是先導式電磁閥,它的原理是:通電時,電磁力把先導孔打開,上腔室壓力迅速下降,在關閉件周圍形成上低下高的壓差,流體壓力推動關閉件向上移動,閥門打開;斷
52、電時,彈簧力把先導孔關閉,入口壓力通過旁通孔迅速腔室在關閥件周圍形成下低上高的壓差,流體壓力推動關閉件向下移動,關閉閥門。</p><p> ?、菩滦碗p穩(wěn)態(tài)自吸電磁閥MP15A-5V</p><p> 雙穩(wěn)態(tài)電磁閥采用先進的脈沖和永磁技術,只需通過控制器切換脈沖的電極觸點來改變閥的開、關狀態(tài),當控制器發(fā)出電脈沖時,驅動磁芯帶動閥瓣克服永磁力產生上下位移、閥瓣到位后永磁作用下處于自保持狀態(tài)
53、。雙穩(wěn)態(tài)電磁閥主要應用于水、液體或可燃性所在液體管路中的自動控制系統(tǒng),具有響應迅速、使用簡單、高效節(jié)能等優(yōu)點。</p><p> ?、请姶砰y的驅動電路圖</p><p> 圖2-12 電磁閥驅動電路</p><p> 如圖2-12所示為電磁閥驅動電路。當P2.0口輸出為高電平時,PNP型三極管Q1導通,繼電器就得到點動作,驅動電磁閥打開。</p>
54、<p> 3染廠水缸數控水表軟件設計</p><p> 數控水表的軟件設計,我利用C語言進行編程,采用了結構化、模塊化的設計方法,由主程序以及顯示子程序、鍵盤子程序等模塊組成。C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作為系統(tǒng)設計語言,編寫工作系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。C語言簡潔緊湊、靈活方便、運算符豐富、數據
55、結構豐富,應用范圍非常廣泛。</p><p><b> 3.1主程序流程圖</b></p><p> 圖3-1 主程序流程圖</p><p> 3.1.1 顯示子程序流程圖</p><p> 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。</
56、p><p> 圖3-2 LCD顯示子程序流程圖</p><p> 3.1.2 鍵盤子程序流程圖</p><p> 程序主流程如圖3-3所示。主程序每隔4ms掃描一次鍵盤,若有按鍵被按下,則將鍵值標志位置0。</p><p> 圖3-3 鍵盤主程序流程圖</p><p> 鍵盤的掃描程序流程圖如圖3-4所示。其中
57、鍵盤掃描方法:首先由輸出口P1.7~P1.4向所有的列線輸出低電平,讀取各行線P1.3~P1.0的狀態(tài),若行線狀態(tài)全為高電平,則表明無鍵按下,若行線狀態(tài)中有低電平,則表明有鍵按下。若有鍵按下,先進行消抖,消抖結束,再對每一列進行掃描,即:P1.7~P1.4四條列掃描線分別輸出低電平,在每次輸出低電平期間,讀取各行線P1.3~P1.0的狀態(tài),確定鍵值。例如:P1.7~P1.4輸出"1011",此時若讀取P1.3~P1.
58、0的狀態(tài)為"1110",則表明按鍵S2被按下。</p><p> 鍵值計算方法為:設置一個變量,高4位放列掃描線控制字,低4位放行掃描線狀態(tài)字。按鍵S0~ S15分別對應不同的變量值,因而可以根據變量值確定當前的按鍵值。消抖方法:在按鍵閉合和打開的瞬間會產生許多尖脈沖,持續(xù)時間約幾毫秒到幾十毫秒。因而在程序中,當檢測到按鍵被按下后,便開始讀取鍵值,每隔4ms讀一次鍵值,直到連續(xù)7次讀取的鍵值
59、完全相同,則認為抖動已經消除。消抖時間為4ms X 7=28ms。</p><p> 圖3-4 鍵盤掃描程序流程圖</p><p><b> 3.2 系統(tǒng)調試</b></p><p> 3.2.1 軟件調試</p><p> 軟件調試是通過對用戶程序的匯編、連接、執(zhí)行來發(fā)現程序中存在的各種錯誤(如語法錯誤、邏輯
60、錯誤等),并加以排除和改正的過程。在本文中,我的程序是利用C語言編程的。在調試過程中使用的工具是Keil C51,其簡單的調試過程為:先建立一個新工程,選擇單片機的型號,然后將寫好的C程序導入,最后就可以進行調試直至沒有出現錯誤就可以了。但是,在實際的調試過程中往往沒有這么簡單。我在做軟件調試的時候出現了一個問題,修改過好幾次都沒發(fā)現問題出在哪里,后來我只好在出錯的地方設置斷點,然后利用單步調試,一步一步慢慢查找問題,最后終于改好了。&
61、lt;/p><p><b> 3.2.2 仿真</b></p><p> 本文使用的是protues軟件進行仿真,過程一般可分為三步。第一,先在ISIS平臺上畫出自己設計的硬件電路圖。第二,在keil平臺上進行軟件設計,并調試成功,最后要生成目標代碼文件(*.hex)。最后,在ISIS平臺上將目標代碼文件加載到單片機系統(tǒng)中,并實現單片機系統(tǒng)的實時交互、協(xié)同仿真。<
62、;/p><p> 在仿真時,由于在protues中沒有霍爾傳感器,因此我利用里面的信號發(fā)生器代替,提供脈沖。本設計通過仿真,基本上能完成染廠水缸數控水表的運行要求。當輸入設定水量并設置好工作模式后,閥門能夠開啟,此時,信號發(fā)生器發(fā)出脈沖,由脈沖我們可以得到此時的上水量,將設定水量與上水量進行對比,能夠控制閥門的開關。</p><p><b> 4總結</b></
63、p><p> 從三月初開始畢業(yè)設計工作到現在已經將近三個多月了,從最初的茫然,然后慢慢的進入狀態(tài),再到后來思路逐漸的清晰,時至今日終于到了收獲的季節(jié),我已經基本上完成了課題的設計與論文的撰寫。</p><p> 在本設計中,我采用AT89C51單片機作為核心控制器件,研究了染廠水缸數控水表系統(tǒng)的設計原理與實現方法。其中在各模塊的設計以及器件的選型方面,我也費了很多心思。我選用A44E集成開
64、關型霍爾傳感器提取脈沖信號,并通過換算將脈沖信號轉換成上水量,并用1602LCD顯示出來。在電磁閥控制電路上,我利用繼電器驅動電磁閥,從而控制電磁閥的開關,達到自動控制上水的目的。在軟件設計方面,我利用C語言進行程序設計,比較系統(tǒng)的配合了硬件電路的功能。在整個設計的過程中,我深感自己專業(yè)知識的缺乏,但同時也明確的感覺到自己對知識的加深了解,有了很大的進步。</p><p> 通過此次的設計,我對單片機的原理及應
65、用有了更深的了解并且掌握了一些常用器件的使用方法,還更加的精通了protel、keil 51軟件,可謂一舉多得。但最重要的是,我基本達到了預期的目標,完成了畢業(yè)設計和論文,將我大學四年來所學的專業(yè)理論知識很好的應用于實踐之中。雖然本設計還存在著很多的不足,但是我相信我以后能夠做的更好。</p><p><b> 參考文獻</b></p><p> [1] 何立民.
66、單片機應用技術選編.北京航空航天大學出版社,1998</p><p> [2]詹志杰.水表技術手冊.2004</p><p> [3]張毅剛.單片機原理及應用.北京:高等教育出版社,2003.12</p><p> [4]潘曉寧,朱耀東.單片機程序設計實踐教程.北京:清華大學出版社,2009.8</p><p> [5]楊繼生,劉芬.
67、霍爾傳感器A44E在車輪測速中的應用研究.電子測量技術.2009年第10期:100-102</p><p> [6]王化詳,張淑英.傳感器原理及應用.天津:天津大學出版社 ,2004.9</p><p> [7]葉顯蒼,姚靈.環(huán)球表記(中文版).2010年 第三期</p><p> [8]朱先俊.對水表自轉問題的處理及水表技術發(fā)展趨勢瞻望.河南省安陽市水表檢測
68、站.2010.9.17</p><p> [9]李素康.用單片機實現精確計量的智能水表.企業(yè)技術開發(fā).2005年 第6期:23—25</p><p> [10]韓樹屏、李烜.智能水表的應用現狀及前景展望.中國一卡通網.2010.4</p><p> [9]楊雪巖.基于 MSP430單片機的電子式水表設計.計算機工程與應用.2006年 第18期:92—94&l
69、t;/p><p> [12]蔡美琴,張為民,沈新群等.MCS—51系列單片機系統(tǒng)及其應[M].北京:高等教育出版社,1992.8</p><p> [13]皮大熊,南光群,劉金華.單片機課程設計指導書.北京:北京理工大學出版社,2010.7</p><p> [14]陳志旺,陳志茹,閻巍山. 51系列單片機系統(tǒng)設計與實踐.北京:電子工業(yè)出版社,2010.1<
70、/p><p> [15]張謹,張偉,張立寶.Protel99SE入門與提高.北京:人民郵電出版社,2007.7</p><p> [16]汪德彪.MCS-51單片機原理及接口技術(第二版).北京:電子工業(yè)出版社.2009.6</p><p> [17]王德祥.微程序控制器在智能化定量水表中的應用.寧夏石油化工.1999年 第3期:32-34.</p>
71、<p> [18]Wenhong Wu ,Wenjun Wu ,Xinping Wu. Research on long-range and metering reading for water meter based on GPRS. Computer Engineering and Technology (ICCET), 2010 2nd International Conference on .Vol.7,725-
72、727 .</p><p> [19]Young-Woo Lee; Seongbae Eun; Seung-Hyueb Oh .Wireless Digital Water Meter with Low Power Consumption for Automatic Meter Reading . Convergence and Hybrid Information Technology, 2008. ICHI
73、T '08. International Conference on .639 - 645 </p><p><b> 附錄</b></p><p> 附錄圖1 完整的系統(tǒng)電路原理圖</p><p> 附錄圖2 PCB版圖</p><p><b> 附錄圖3 程序</b></p
74、><p> #include <reg51.h></p><p> #include <math.h></p><p> #include <stdio.h></p><p> #include <absacc.h></p><p> #define uchar
75、unsigned char</p><p> #define uint unsigned int</p><p> #define P1</p><p> #define Lcd_Data P0</p><p> #define Busy 0x80 //用于檢測Lcd狀態(tài)字中的Busy標識</p><p>
76、 sbit Lcd_RW =P2^6; //定義Lcd的引腳</p><p> sbit Lcd_RS =P2^7;</p><p> sbit Lcd_E =P2^5;</p><p> sbit Solen = P2^0;</p><p> sbit AE =P3^4;</p><p> char
77、swater;//設定水量</p><p> char ywater;//上水量</p><p> char v=120;//水表的容積</p><p> code char temp1[]="setting:";</p><p> code char temp2[]="turn on:&
78、quot;;</p><p> void Lcdwritedata(unsigned char WDLcd);//Lcd寫數據</p><p> void Lcdwritecommand(unsigned char WCLcd,BuysC);//Lcd寫命令</p><p> unsigned char LcdreaWdata(void); //Lcd
79、讀數據</p><p> unsigned char Lcdread(void); //Lcd讀命令</p><p> void Lcdreset(void);//Lcd初始化</p><p> void LocateXY(char X,char Y);//指定LCD被寫位置</p><p> void DisplayOneC
80、har(unsigned char X, unsigned char Y, unsigned char Wdata); //在Lcd指定位置顯示一個字符</p><p> void Displaystr(uchar x,uchar y,uchar code *ptr) ; //在LCD指定位置顯示字符串子函數;</p><p> void delay(void);//延時<
81、/p><p> uchar kbscan(void);//鍵盤掃描</p><p> uchar handlekey(void);</p><p> uchar read_water(void);</p><p><b> //主函數</b></p><p> void main(void
82、)</p><p><b> { </b></p><p> unsigned char key ;</p><p> char i=0;</p><p> Lcdreset();</p><p> key=handlekey();</p><p> if
83、(key!=0x0a)//自動模式</p><p><b> {</b></p><p> swater=read_water();</p><p><b> Solen=1;</b></p><p><b> while(1)</b></p><p
84、><b> {</b></p><p><b> if (AE=1)</b></p><p><b> i++;</b></p><p><b> }</b></p><p> ywater=1/3*v*i;</p><
85、p> if(swater=ywater)</p><p><b> Solen=0;</b></p><p><b> else</b></p><p><b> Solen=1;</b></p><p> Displaystr(0,0,temp1) ;<
86、/p><p> Displaystr(0,8,swater);</p><p> Displaystr(1,0,temp2);</p><p> Displaystr(1,8,ywater);</p><p><b> }</b></p><p><b> }</b>
87、</p><p> //------------------------------------------------------------------</p><p> // 函數名稱: delay</p><p> // 函數功能: 延時程序</p><p> //-------------------------------
88、-----------------------------------</p><p> void delay( uchar x)</p><p><b> {</b></p><p> uchar i; </p><p> while(x--)</p><p> f
89、or (i=0;i<125;i++){}</p><p> } </p><p> //------------------------------------------------------------------</p><p> // 函數名稱: kbscan 鍵盤掃描子程序</p><p>
90、; // 函數功能: 判斷是否有鍵按下,有返回鍵值,沒有返回0 </p><p> // p0的高四位為列,低四位為行 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0</p><p> // 列4 列3 列2 列1
91、 行4 行3 行2 行1</p><p> // 過程:先根據列判斷是否有鍵按下,沒有返回0,有,則逐行掃描以確定按鍵所在的行,再確定按鍵所在列</p><p> // 從而最終確定該按鍵。</p><p> //-----------------------------------------------------
92、-------------</p><p> uchar kbscan(void)</p><p><b> {</b></p><p> uchar posx,posy;</p><p> P0=0xf0; //置所有行為低電平,行掃描,列線輸入(此時)</p>
93、<p> if((P0&0xf0)!=0xf0) //判斷是否有有鍵按下(讀取列的真實狀態(tài),若第4列有鍵按下則P1的值會變成0111 0000),有往下執(zhí)行</p><p><b> {</b></p><p> delay(4); //延時去抖動(4ms)</p><p> if
94、((P0&0xf0)!=0xf0) //再次判斷列中是否是干擾信號,不是則向下執(zhí)行</p><p><b> {</b></p><p> posx=0xFE; //逐行掃描初值(即先掃描第1行) </p><p> while((posx&0x10)!=0) //行掃描完成時(即4行已經全
95、部掃描完成)posx為1110 1111 停止while程序 </p><p><b> {</b></p><p> P0=posx; //輸出行掃描碼</p><p> if ((P0&0xf0)!=0xf0) //本行有鍵按下(即P1(真實的狀態(tài))的高四位不全為1)</p
96、><p><b> {</b></p><p> posy=(P0&0xf0)|0x0f; //列</p><p> return(posx&posy); //返回行和列</p><p><b> }</b></p><p> else /
97、/所掃描的行沒有鍵按下,則掃描下一行,直到4行都掃描,此時posx值為1110 1111 退出while程序</p><p><b> {</b></p><p> posx=(posx<<1)|0x01;//行掃描碼左移一位</p><p><b> }</b></p><p>
98、<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p>
99、return 0; //無鍵按下,返回0</p><p><b> }</b></p><p><b> }</b></p><p> //------------------------------------------------------------------</p><p>
100、 //函數名稱: handlekey 鍵盤讀取程序</p><p> //函數的功能 : 返回按下按鍵的值</p><p> //------------------------------------------------------------------</p><p> uchar handlekey(void)</p>&
101、lt;p><b> {</b></p><p> unsigned char num;</p><p> char key;</p><p> key=kbscan();</p><p> delay(4); </p><p> switch(key)</p>
102、<p><b> {</b></p><p> case 0xee: num=0x01;break; // 1110 1110</p><p> case 0xde: num=0x02;break; // 1101 1110</p><p> case 0xbe: num=0x03;break; // 1
103、011 1110</p><p> case 0x7e: num=0x04;break; // 0111 1110</p><p> case 0xed: num=0x05;break; // 1110 1101</p><p> case 0xdd: num=0x06;break; // 1101 1101</p><p
104、> case 0xbd: num=0x07;break; // 1011 1101</p><p> case 0x7d: num=0x08;break; // 0111 1101</p><p> case 0xeb: num=0x09;break; // 1110 1011</p><p> case 0xdb: num=0x00
105、;break; // 1101 1011</p><p> case 0xbb: num=0x0a;break; // 1011 1011</p><p> case 0x7b: num=0x0b;break; // 0111 1011</p><p> case 0xe7: num=0x0c;break; // 1110 0111&l
106、t;/p><p> case 0xd7: num=0x0d;break; // 1101 0111</p><p> case 0xb7: num=0x0e;break; // 1011 0111</p><p> case 0x77: num=0x0f;break; // 0111 0111 </p><p> def
107、ault:num=0xff;break;</p><p><b> }</b></p><p> return (num);//返回按鍵對應的16進制數據</p><p><b> }</b></p><p> //--------------------------------------
108、----------------------------</p><p> //函數名稱: Lcdwritedata Lcd寫數據函數</p><p> //函數的功能 : 將數據寫入液晶模塊</p><p> //------------------------------------------------------------------</
109、p><p> void Lcdwritedata(unsigned char WDLcd)</p><p><b> {</b></p><p> Lcdread(); //檢測忙</p><p> Lcd_Data = WDLcd;</p><p> Lcd_RS = 1;</p&g
110、t;<p> Lcd_RW = 0;</p><p> Lcd_E = 0; //若晶振速度太高可以在這后加小的延時</p><p> Lcd_E = 0; //延時</p><p> Lcd_E = 1;</p><p><b> }</b></p><p> //--
111、----------------------------------------------------------------</p><p> //函數名稱: Lcd寫命令函數</p><p> //函數功能:將模式設置之林或顯示地址寫入液晶模塊</p><p> //------------------------------------------
112、------------------------</p><p> void Lcdwritecommand(unsigned char WCLcd,BuysC) //BuysC為0時忽略忙檢測</p><p><b> {</b></p><p> if (BuysC) Lcdread(); //根據需要檢測忙</p>&
113、lt;p> Lcd_Data = WCLcd;</p><p> Lcd_RS = 0;</p><p> Lcd_RW = 0; </p><p> Lcd_E = 0;</p><p> Lcd_E = 0;</p><p> Lcd_E = 1; </p><p><
114、;b> }</b></p><p> //------------------------------------------------------------------</p><p> //函數名稱: Lcd讀數據函數</p><p> //--------------------------------------------
115、----------------------</p><p> unsigned char LcdreaWdata(void)</p><p><b> {</b></p><p> Lcd_RS = 1; </p><p> Lcd_RW = 1;</p><p> Lcd_E = 0
116、;</p><p> Lcd_E = 0;</p><p> Lcd_E = 1;</p><p> return(Lcd_Data);</p><p><b> }</b></p><p> //---------------------------------------------
117、---------------------</p><p> //函數名稱: Lcd讀狀態(tài)函數</p><p> //------------------------------------------------------------------</p><p> unsigned char Lcdread(void)</p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 染廠水缸數控水表設計【文獻綜述】
- 染廠水缸數控水表設計【畢業(yè)設計】
- 染廠水缸數控水表設計【開題報告】
- 畢業(yè)設計開題報告+文獻綜述.doc
- 數控超聲機床傳動系統(tǒng)設計【畢業(yè)設計+開題報告+文獻綜述】
- 畢業(yè)設計開題報告+文獻綜述.doc
- 半導體廠水資源回收系統(tǒng)設計【開題報告+文獻綜述+畢業(yè)設計】
- 運動器械設計【開題報告+文獻綜述+畢業(yè)設計】
- 遮陽雨棚設計【開題報告+文獻綜述+畢業(yè)設計】
- 畢業(yè)設計開題報告和文獻綜述.doc
- 益智玩具設計【開題報告+文獻綜述+畢業(yè)設計】
- 無線數控脈沖信號放大器設計【開題報告+文獻綜述+畢業(yè)設計】
- 畢業(yè)設計開題報告和文獻綜述.doc
- 鐵路隧道畢業(yè)設計-開題報告文獻綜述
- 畢業(yè)設計開題報告和文獻綜述.doc
- 空調創(chuàng)新設計【開題報告+文獻綜述+畢業(yè)設計】
- 多媒體講臺設計【畢業(yè)設計+開題報告+文獻綜述】
- 病房呼叫系統(tǒng)設計【開題報告+文獻綜述+畢業(yè)設計】
- 多功能椅子設計【開題報告+文獻綜述+畢業(yè)設計】
- 電暖器設計【開題報告+文獻綜述+畢業(yè)設計】
評論
0/150
提交評論