老年公寓智能控制系統
目錄
摘要
Abstract
第1章 前言
1.1 課題背景和意義 1
1.2 國內發展現狀 1
1.3 主要研究內容 1
第2章 系統的總體方案
2.1 系統的功能設計
2.2 設計方案的論述
2.3 總體結構框圖 3
第3章 系統的硬件設計 4
3.1 硬件系統的構成 4
3.2 單片機的介紹 4
3.3 單片機最小系統 5
3.3.1控制器模塊 5
3.3.2 復位電路 6
3.3.3 時鐘電路 6
3.4 鍵盤模塊設計 7
3.5 報警模塊設計 9
3.6 顯示模塊設計 9
3.7 視頻監控模塊設計 11
3.8 控制模塊設計 11
第4章 系統的軟件設計 12
4.1 Keil uVision4軟件的使用 12
4.2 系統主程序設計 13
4.3 鍵盤掃描程序設計 14
4.4 顯示程序設計 15
第5章 仿真與調試 16
5.1 Proteus ISIS軟件 16
5.2 仿真調試結果 17
第6章 結束語 18
參考文獻 19
答謝辭 20
附錄
摘 要
本次課題為老年公寓智能控制系統,其實也就是病人請求值班醫生或護士進行診斷、護理的緊急呼叫工具。傳統的病房呼叫系統缺乏新意,功能不全,不能根據老人病情進行優先選擇的能力,功能單一,因此,本次設計在傳統呼叫系統基礎上加以改進,彌補不足。
本次畢業設計以三年所學專業知識為基礎,以AT89C51單片機為系統核心,其中系統硬件電路主要包括:時鐘電路、復位電路、鍵盤電路、LED顯示電路、報警電路,軟件部分對各部分電路用高級語言進行程序編寫設計。設計一個具有優先選擇功能的緊急呼叫系統,每個老人房間床位旁都有一個呼叫按鈕,當老人需要幫助的時候,按下床位呼叫按鍵,值班室便會有蜂鳴器響起,產生聲光報警,并在值班室的數碼管上顯示床位號。多人同時按下時可判斷病情進行優先級判斷,首先顯示優先級最高的床號,醫護人員接受響應后,可終止當前呼叫。然后通過proteus仿真軟件設計系統仿真電路圖,并對系統進行仿真調試。在此基礎上,考慮一些病情嚴重到無法按呼叫按鈕的老人,在其床位合適位置安裝攝像頭,進行實時監控。
第1章 前 言 1.1、選題背景和意義 伴隨著人口老齡化,現代科技日益發達,全國各地的醫院和老年公寓不斷增加。在以往醫院或老年公寓,病人遇到突發情況時,由于向醫護人員得不到及時的救助,往往錯過了最佳治療的時間,最后造成不可挽回的傷痛,因此,一種新型臨床呼叫儀器的研制成為近些年來的研究熱點之一。目前當今的一些大型醫院和老年公寓都會配備智能的基本呼叫系統, 若不安裝此系統,可能會導致老人們出現緊急情況無法找到醫護人員,對老人的安全有極大威脅,因此,呼叫系統對老人的日常生活和安全性都至關重要。 老年公寓智能控制系統就是一種呼叫和監控系統,在醫院等公開場所都是非常普遍的,是一種重要的工具,用于保證老人與醫務人員及時溝通,可以使老年公寓的服務質量得到很大的提高。整個系統是由安設在護士值班室的呼叫主機和分別設立在老人床位的呼叫分機、LED顯示等設備來組成,如果有老人按了呼叫按鈕,護士站的呼叫主機就會發出報警信號,以便在值班室能及時了解情況。 1.2、國內發展現狀 呼叫控制系統的發展,已經取得了很大的成就,并且已經進入商業化階段,現如今,基本所有醫院都配備這個控制系統。因此依據時代的發展,養老院和老年公寓也在逐漸的普及呼叫系統,提高行業的服務水平。 目前市場上已經出現了許多種型號不一、功能各異的醫院病房和老年公寓呼叫系統,其中主要也就分為兩大類:有線式和無線式。無線式病房呼叫系統不存在鋪設線路的問題,但是可靠性差,而且無線電波會干擾其他醫療儀器設備。本文設計的是有線式的,適合較小的醫院病房和老年公寓使用,具有成本低,易于操作、安裝和維護非常簡單等特點,而且具有可靠穩定,對其他醫療設備不會產生干擾的特點;但受到布線較多,影響美觀,故不適宜較大的醫院。 1.3、主要研究內容
1、熟悉AT89C51單片機功能及工作特性,掌握其接口擴展方法。
2、對鍵盤模塊和顯示器模塊進行選型比較,得出各種型號優劣比。
3、采用面向對象的思想分層次、分模塊構建設計的總體框架。 4、熟練使用Keil uVision4和Proteus仿真軟件
第2章 系統總體設定 2.1、系統的功能設計 設計系統的基本功能: 1)老人按下任何一個床位(16張)的呼叫按鈕,護工值班室都會立即顯示老人的床號,(若連續按兩次及以上將不重復顯示)蜂鳴器發出報警。 2)若有多個床位按下呼叫按鈕,則進行循環顯示。 3)接受呼叫后,數碼管不再顯示并且報警停止。 設計系統的拓展功能: - 當多個病房同時呼叫時,系統進行優先級判斷,首先顯示病情危重,優先級最高的床號。
- 在老人重病房裝上攝像頭,值班室護士可通過攝像頭實時監控老人情況。
2.2設計方案的論述 方案一 利用AT89C51單片機外加作地址鎖存器用的一塊帶三態輸出的8位鎖存器74LS373芯片和一塊EPROM芯片構成一個完整的最小系統電路,以此為基礎在智能裝置配置2個數碼管顯示器和X行Y列矩陣鍵盤,可通過擴展8255或8279之類的并行1/0芯片來完成。常常使用的設計方法,顯示和鍵盤搜索按下鍵均按動態掃描的方法進行,顯示電路接口由P1口和P2口組成,鍵盤接口由P2口和P3口組成。在顯示功能完成過程中,P1口鎖存器顯示字母的八段字形碼,P2口的高6位(P2.7-P2.2)鎖存器顯示字符的位選碼。AT89C51按分時方式執行程序進入到鍵盤搜索時,經P2.7-P2.2輸出鍵盤掃描的行選碼,鍵盤的列輸入由P3口的P3.7-P3.4承擔緩沖功能。利用P2.7-P2.2輸出數據代碼是通過改變程序計數器高6位的數值實現。 方案二 利用AT89C51自身接口實現數碼管靜態顯示和鍵盤掃描,使用AT89C51單片機外加作地址鎖存用的兩塊8位三態鎖存器74LS373芯片構成一個完整的最小系統電路。以此為基礎,在智能裝置中配置2個數碼管顯示器,以及4行4列矩陣鍵盤,可以不擴展I/O芯片,利用AT89C51自身I/O口便實現上述功能。P0口的八個端口作為LED的段選,用P1口做鍵盤電路的接口。 綜上所述,方案一中鍵盤顯示均采用動態掃描方式,所以軟件實現起來簡單,但硬件電路比較復雜,I/O浪費嚴重,沒有合理利用I/O口。而方案二電路簡單,并且軟件實現也不是太復雜,合理利用單片機I/O口,由此,權衡利弊之后,本設計選用方案二。
本病房呼叫系統主要由AT89C51單片機、按鍵模塊、LED數碼管顯示模塊、蜂鳴器報警模塊及復位電路等部分組成,其系統結構圖如圖2.1所示。該系統控制16間房間,床位旁設置呼叫開關,護士站設有顯示燈、蜂鳴器和一個數碼顯示器。當有兩位以上患者按下呼叫開關時,護士值班室的數碼管上只顯示優先權最高的病房床位號,并且蜂鳴器發出警報聲音來提醒值班護士。我們根據老人患者的病情給他們編級由l到 16的逐級遞減,當兩個以上的患者同時按下呼叫按鈕時,護士值班室的數碼管首先顯示患者病情最嚴重的病床號。例如,2、6、15號病房同時按下呼叫按鈕時,護士值班室顯示的數字為“2”,因為2號病房的優先級最高,其他病房優先級別依次遞減。全部處理完畢后,沒有病房呼叫,此時值班室的數碼管無顯示,同時蜂鳴器報警停止。
圖2.1 總體結構框圖(見附件) 總體結構框圖功能闡述: - 床位按鍵為輸入部分,通過老人或病人手動按鍵來向單片機傳輸命令。
- 微控制器采用通用型AT89C51單片機為核心,通過軟件編程對輸入處理并對輸出控制。
- 輸出部分包括數碼管顯示和蜂鳴器報警,可以將輸入信號在數碼管上顯示出來并通過蜂鳴器報警提醒護士等醫護人員。
- 可以控制老人房間攝像頭實時顯示老人身體狀況,協助呼叫系統共同監控。
綜合流程描述: 老人按下按鍵,向單片機輸入信號,經過AT89C51進行一系列處理后,信號通過輸出系統顯示在LED顯示屏幕上,并驅動蜂鳴器報警提醒。如果同時有多個輸入信號,利用控制器編程處理數據判斷優先級,在數碼管上顯示優先級最高的病床號,值班室護士收到提醒后,可通過按鍵結束顯示和報警。 第3章 系統的硬件設計 3.1 硬件系統的構成 主要硬件部分以AT89C51單片機為核心,與鍵盤電路、顯示電路、報警電路和控制電路共同構成。如下圖3.1為硬件示意圖:
圖 3.1 硬件構成示意(見附件)
3.2、單片機的介紹: 單片機是非常典型的嵌入式微控制器(Microcontroller Unit),它將各種部件集成到一塊硅片上,部件中包括中央處理器CPU,運算器,控制器,存儲器,多種I/O口,輸入輸出設備等構成,相當于一個微型的計算機。單片機具有體積小、集成度高、可靠性高、速度快、易于擴展、性價比高等眾多優點。因為單片機相當于一個微型計算機,在電子類專業課程里經常與單片機打交道,學習使用單片機,對計算機的原理與結構都有很大的幫助。單片機的各種優點也使它最先被用于工業控制領域。單片機不斷發展,從最初的4位或8位已經發展到了32位,處理能力飛速提升。現在我們所有日常用到的電子產品中基本都有集成的單片機。單片機應用領域如下: - 智能儀器儀表的應用。 如:示波器等。
- 工業控制中的應用。 如:測控系統等。
- 家用電器中的應用。 如:洗衣機、電冰箱等。
- 計算機網絡和通信中的應用。 如:移動電話等。
- 醫用設備中應用。 如:監護儀、病床呼叫系統等。
3.3、單片機最小系統 單片機的最小系統是由單片機、電源供電電路、晶振電路、復位電路和時鐘電路構成的。 圖3.2 單片機最小系統 3.3.1 控制器模塊 控制器選擇AT89C51單片機,這款單片機最常見,大學里使用最多,并且可以實現系統的所有功能,因此選擇AT89C51單片機。 圖3.2 AT89C51引腳圖 AT89C51的主要特點: 1、與MCS-51兼容
2、4K字節可編程FLASH存儲器 3、1000寫/擦循環
4、全靜態工作:0Hz-24MHz 5、三級程序存儲器鎖 6、128×8位內部RAM
7、32根可編程I/O線
8、兩個16位定時器/計數器
9、5個中斷源,2個中斷優先級
10、低功耗的閑置和掉電模式
11、片內振蕩器和時鐘電路 3.3.2 復位電路: RST為復位信號使能端,當復位引腳出現兩個機器周期以上的高電平,便可以使內部進行復位。復位電路有兩種方式:上電自動復位和按鈕復位。選用按鈕復位,簡易方便,節省資源,更加符合本系統的設計。如下圖所示: 圖3.3 復位電路 3.3.3 時鐘電路: 時鐘是時序的基礎,AT89C51片內由一個反相放大器構成振蕩器,可以由它產生時鐘。時鐘有兩種產生方式,內部方式和外部方式。本系統采用內部方式,在XTAL1和XTAL2端外接石英晶體做定時元件,內部反相放大器自激振蕩,產生時鐘。選用12MHz晶振和30pF電容。如下圖3.4所示: 圖 3.4 時鐘電路 3.4、鍵盤電路設計 1)鍵盤方式的選用: 獨立式鍵盤:每個按鍵占用一條I/O線,按鍵數量較多時,I/O口利用率不高,I/O口浪費較大,但程序編寫簡單,適合需要較少按鍵的設計。 矩陣式鍵盤:矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接,若需要設計一個4*4鍵盤,只需要一個并行端口和8條引線即可,可節省較多的I/O 口。本系統按鍵較多,因此采用矩陣式鍵盤是合理的。 如下圖所示:  圖3.5 鍵盤電路圖 2)鍵盤工作方式 CPU對鍵盤進行掃面的時候,有兩個重要的問題:第一個是要及時,必須保證用戶每次按鍵都能識別并做出響應;第二個是掃描時間不能占用過多,因為CPU的工作非常多,因此要根據CPU的情況選擇合適的鍵盤工作方式。常用的鍵盤工作方式有三種:編程掃描工作方式、中斷工作方式、定時掃描工作方式。本設計綜合考慮選擇中斷工作方式。 中斷工作方式:當鍵盤有按鍵按下時,硬件會產生中斷信號,CPU響應中斷申請后,對鍵盤進行掃描,并在有按鍵按下時轉入相應的鍵功能處理程序。該方式優點:因為在無鍵按下時不進行鍵掃描,因此大大提高了CPU的效率,同時確保每次按鍵都能及時響應。 3)鍵的識別功能: 判斷鍵盤中是否有鍵按下,若有鍵按下,則確定其所在行列位置。 識別按鍵通常有兩種方法:行掃描法和線反轉法。 a、行掃描法步驟: (1)確定是否有鍵按下,將全部行線置于低電平,然后檢測列線的狀態,只要有一列為低電平,則說明有按鍵被按下,若所有列線為高電平,則鍵盤中無按鍵按下。 (2)若有鍵按下,需確定按鍵所在的行列位置。即對鍵盤進行逐行掃描。 (3)鍵的抖動處理。用軟件延時消除抖動,即當有鍵按下時,不要立即逐行掃描,而是延時10ms后在進行。等待按鍵穩定后重新判斷一次,以躲避觸電抖動期。 b、線反轉法步驟: (1)把輸出線定為行線,輸入線定為列線。輸出線都設置為0,這時呈現低電平0的便是按鍵所在列線,如果都不為0,則確定沒有鍵被按下。 (2)在把輸出線設定用列線,輸入線設定為行線,輸出線都設置為0,然后,這行線中呈現低電平0的按鍵所在列,然后便確定按鍵的位置(M,N)。 (3)一次按鍵處理。有時,為了確保一個按鍵只被處理一次,可以根據是否釋放按鈕判斷,如果按鍵釋放,則啟動按鍵操作的執行。 在應用過程中仍需要軟件延時消除抖動的問題。抖動消失后,便可直接得到鍵的位置。 4)按鍵抖動及消除 按鍵抖動會將一次按鍵操作識別成多次操作,因此為了克服誤按和誤判,需要消除按鍵抖動,一般有兩種消除方法:硬件電路消除法和軟件延時法。因為硬件延時成本高,硬件麻煩,因此不采用,本方案采用軟件延時。 軟件延時法:當判斷有鍵按下時,用軟件延時15ms,等按鍵穩定后在次判斷,以此消除誤按的抖動期。 3.5、報警電路設計 利用三極管作為控制開關,用單片機P3.1口控制,利用三極管當開關電路可以保護單片機,并起到放大電流的作用,當三極管基極為低電平時,發射極截止,為高電平時,發射極導通。顯示器顯示床號同時發出聲光報警。通過編程令單片機執行中斷程序。
圖3.6 報警電路 3.6、顯示電路設計 1)顯示模塊的選擇方案 方案一:采用LCD1602液晶屏顯示,它是一種專門用來顯示字母、數字和符號等的點陣型液晶模塊。它由若干個點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位和每行之間都有一個點距的間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形,顯示效果不好,并且可視角度小。 方案二:采用七段LED數碼管顯示,七段LED數碼管由數個LED組成一個陣列,并封裝在一個標準的外殼里。其中由七個細長的發光二極管組成數字顯示,另外一個圓形的發光二極管顯示小數點,所以實際是八段。當發光二極管導通時,相應的一個點發光。控制相應的二極管導通,可顯示出各種字母以及0-9數字,顯示效果好,可視角度大,其控制簡單,使用也方便。 綜合比較下,顯示模塊選用七段LED數碼管作為系統顯示方案。 2)LED 顯示原理 LED是一種特殊半導體材料制成的PN結,因為摻雜濃度過高,當正向偏置時,會產生大量的電子-空穴復合,把多余的能釋放變為光能。LED顯示器具有工作電壓低、體積小、壽命長等特點。LED顯示器件有單個、七段、和點陣式等幾種類型。七段數碼管屬于LED發光器件的一種。 為適用于不同的驅動電路,有共陰極和共陽極兩種,為了使LED數碼管可以顯示不同的符號和數字,要為LED數碼管輸入相應的代碼,因為這些代碼可使LED相應的段發光,從而顯示不同字形,因此改代碼段也稱為段碼,又稱字型碼。 為了顯示數字和字母,需要點亮對應的發光二極管,就需要譯成二進制碼。譯碼有硬件和軟件兩種方法,硬件譯碼電路的優點是計算機時間開銷小,但成本較高,軟件譯碼省去硬件設備,成本低,本系統采用軟件譯碼。 圖3.7 七段LED顯示器的兩種結構 3)七段LED顯示方式 按照顯示方式,七段LED數碼管有靜態顯示和動態顯示兩種顯示方式。 a、靜態顯示:靜態顯示系統在每一次顯示輸出后能夠保持顯示不變,僅在待顯數字需要改變時,才更新數字顯示器中鎖存的內容。這種顯示方式優點是占用機時少,顯示穩定可靠。缺點是顯示位數多時,占用I/O口多。 b、動態顯示:控制器應定時地對各個顯示器進行掃描,顯示器件分時輪流工作,每次只能顯示一個器件,但由于人的視覺暫留現象,所以仍然感覺所有器件在同事顯示。這種顯示方式優點是使用硬件少,占用I/O口少。缺點是占用機時長,只要不執行顯示程序,就會立刻停止顯示。 靜態顯示方式,LED各顯示段的工作電流是恒定的,動態顯示方式LED各顯示段工作電流是脈動的。利用74LS373和顯示器組成顯示系統,本系統采用靜態顯示。 4)地址鎖存器74LS373:  ]] 圖3.8 鎖存器74LS373 當三態端OE為有效低電平,使能端G為有效高電平時,輸出跟隨輸入變化;當G端有高變低時,輸出端8位信息被鎖存,直到使能端G再次有效。 3.7 視頻監控模塊 考慮老人中可能有病情非常嚴重或者手不方便按下按鈕的情況,因此,安裝一個視頻監控,對老人實時監測。 監控模塊選擇方案 方案一:有線視頻監控 有線監控是一種比較傳統的方法,其布線復雜,浪費端口,擴展性較弱,施工難度高,移動性很低,如果需要移動,則費時費力,并且安裝成本和維護成本高。 方案二:無線視頻監控 隨著無線技術的發展,無線傳輸技術已經廣泛的應用在各行各業中。其安裝簡單方便、擴展性好、性價比高。 綜合對比,無線有著很多優勢,并且由于不需要布線,并且無線傳輸所需安裝成本很低,并且容易維護。因此選擇方案二。 3.8 控制模塊 值班護士控制的響應按鍵,由單片機復位鍵充當,當老人按下呼叫按鈕時,值班室收到報警后,按下響應按鍵,通過編寫程序使單片機執行中斷程序,令數碼管熄滅、振鈴停止。 第4章 系統的軟件設計 4.1、Keil uVision4軟件 Keil uVision4 軟件是眾多單片機應用開發的優秀軟件之一,在整個大學中,經常與其打交道,它集編輯,編譯,仿真于一體,支持匯編,PLM語言和 C 語言的程序設計,界面友好,易學易用。 圖4.1 Keil界面 Keil C51的使用步驟: - 新建文件夾,新建工程。例:文件夾為C51,文件名為proj1。
- 選擇Atmel里的AT89C51。
- 創建c文件。單擊File菜單,單擊New選項,首先保存該空白代碼文件,單擊工具條上的保存按鈕,然后更改文件名。
- 將C文件加入項目。回到編輯界面后,工作區出現一個target1,鼠標左鍵單擊+號,然后在Source Group1上單擊鼠標右鍵,選擇Add Files to “source group1”在彈出的界面中選擇要加入的c文件 ,左鍵單擊Add按鈕,然后單擊Close按鈕。
(5) 然后進行程序的編寫,寫好程序進行編譯檢查是否有錯誤。 (6) 在 Keil 軟件中把目標程序編輯好,編譯無誤后,生成單片機可以執行的 hex頭文件,然后通過USB轉接口線把程序燒到單片機系統板中,然后運行該程序,觀察系統的運行狀態。 4.2、系統主程序設計 程序設計步驟包括繪制程序流程圖,編寫程序,運行調試,仿真模擬等步驟。 系統軟件設計均采用模塊化設計,整個程序主要包括主程序、鍵盤掃描程序、顯示程序。所有程序均采用單片機C語言編寫。
圖4.2 主程序流程圖(見附件)
主程序程序描述: 首先,每個存儲單元的初始化,設置定時器的初始值,接收鍵,然后繼續掃描鍵盤,如果掃描到有鍵按下,判斷是否有多個按鍵同時按下,若只有一個按鍵按下,則查看床位標志顯示的數字,然后在數碼管顯示屏中顯示床號。若有多個按鍵同時按下,則判斷優先級,選擇優先級最高的床號顯示,最后,處理完所有房間的呼叫后,系統復位,繼續循環進行下一次判斷。 4.3、鍵盤掃描程序設計 鍵盤掃描依照線反轉法進行設計,先判斷是否有鍵按下,若有鍵按下,則延時15ms,消除抖動誤按,在判斷一次按鍵,再通過軟件獲取鍵值,再由單片機輸出到LED數碼管顯示。 鍵盤掃描程序流程圖: 圖4.3 鍵盤掃描程序流程圖
4.4 、顯示程序流程圖 顯示程序用來判斷是否需要顯示和如何顯示,設計流程圖如下:
圖4.4 顯示程序流程圖(見附件)
顯示程序描述: 床位數顯示標志設置為N,從1開始,判斷N是不是為0,如果不是0,說明有呼叫,然后床位號顯示出來,然后從原本的鍵值數加1繼續掃描,依此類推直到鍵值到16,以確定是否有別的病房呼叫。鍵值到16后則跳轉,再循序掃描,如果N為0,表示無呼叫,則繼續掃描下一個床號。
第五章 仿真與調試 本系統采用AT89C51單片機作為整個系統的核心,主要電路模塊有:晶振電 路、系統復位電路、響鈴報警電路和LED數碼顯示電路。完成了系統的硬件設計、軟件編程之后,我們需要依據設計要求將系統正常運行,因此必須進行硬件和軟件的調試。 如圖5.1 硬件電路圖 5.1 Proteus ISIS軟件 Proteus是EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。該軟件最大的優點在于能夠對常用微控制器進行仿真,適合于剛剛接觸單片機以及進行數模電綜合仿真的用戶使用.主要功能如下: - 滿足單片機軟件仿真系統的所有標準。
- 具有模擬電路仿真、數字電路仿真、單片機及其外圍電路組成的系統的仿真、鍵盤和LCD系統仿真的功能。
- 目前支持的單片機類型有:8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。
- 支持大量的存儲器和外圍芯片。
5.2 仿真調試結果 啟動電源,顯示屏無顯示,在按下6號鍵時,界面部分顯示06,指示燈閃爍,蜂鳴器報警;如果未按下復位鍵,再按下2號鍵時,界面顯示02,并循環顯示,指示燈閃爍,蜂鳴器報警。由此看出該系統具有記憶功能,所以不會忽略之前所按下的鍵,依次按下各個按鍵,相應病房號均會相應顯示。該設計反映了控制電路的可行性和穩定性。 按下6鍵顯示 按下2鍵顯示
按下10鍵顯示 按下15鍵顯示
綜上所述,本系統實現了主要功能:顯示床號,指示燈閃爍,蜂鳴器報警提醒值班人員。通過Proteus軟件仿真,能達到上述結論,滿足課題題目,達到目標要求。 第6章 結束語 輾轉兩個月過去了,畢業設計到了尾聲,剛開始選題的時候,心中非常擔心,因為不知道自己能不能完成,在老師的建議下,最終確定題目為老年公寓智能控制系統。 剛剛著手做的時候,腦子里沒有什么內容,不知從何寫起,因為需要大學里所需的專業知識,但是學的不是很扎實,因此已經遺忘許多,為此又復習了大二所學習的單片機應用技術和C語言。對設計的核心單片機,時鐘電路,復位電路,報警電路,矩陣鍵盤,LED數碼顯示,都重新復習了一遍,整個設計是模塊化的,各個模塊構成一個整體框架,從而完成整個系統。 做的過程中出現很多問題,我查閱相關資料,獨立解決不了的問題,我請教了同學和老師,同學們很熱心的幫助我,老師也不辭辛苦的指導我,并且督促我們的進度,最終基本上實現了目標要求。 在這里,我想感謝在這次畢業設計中幫助我的指導老師和同學,此次設計我學到了很多知識,并且把以前遺忘的又重新復習了一遍,這次獨立的設計讓我體會到只要努力,就可以克服一切困難。
答謝辭
輾轉兩個月過去了,畢業設計到了尾聲,剛開始選題的時候,心中非常擔心,因為不知道自己能不能完成,在老師的建議下,最終確定題目為老年公寓智能控制系統。
剛剛著手做的時候,腦子里沒有什么內容,不知從何寫起,因為需要大學里所需的專業知識,但是學的不是很扎實,因此已經遺忘許多,為此又復習了大二所學習的單片機應用技術和C語言。對設計的核心單片機,時鐘電路,復位電路,報警電路,矩陣鍵盤,LED數碼顯示,都重新復習了一遍,整個設計是模塊化的,各個模塊構成一個整體框架,從而完成整個系統。做的過程中出現很多問題,我查閱相關資料,獨立解決不了問題,我請教了同學和老師,同學們很熱心的幫助,指導老師更是盡心竭力進行輔導。
最后要感謝在整個論文寫作過程中幫忙過我的每一個人。首先,也是最主要感謝的是我的指導老師,黃宇航老師。在整個過程中他給了我很大的幫忙,在論文題目制定時,他首先幫助我確定了題目的方向,同時又幫我具體分析,使我最后選取老年公寓智能控制系統。在完成初稿后,老師每周都會給我們認真查看論文,指出了我存在的很多問題。一步步改,不斷完善我的論文設計。在此十分感謝黃宇航老師的細心指導,才能讓我順利完成畢業論文。
附錄

單片機源程序如下:
- #include <reg51.h>
- #define uint unsigned int
- #define uchr unsigned char
- sbit led0=P2^2;
- sbit buzzer=P2^3;
- sbit dula=P2^6; //聲明段選線選通端
- sbit wela=P2^7; //聲明位選線選通端
- sbit clear=P3^4;
- uchr key,shi,ge,count;
- uchr code tab[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,
- 0x76,0x79,0x38,0x3f};
- /*延時子函數,xms為形參*/
- void delay(uint xms)
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
-
- /*矩陣鍵盤掃描子程序*/
- void matrixkeyscan()
- {
- uint temp;
- P3=0xf7; //給P3口賦值
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0) //檢測是否有鍵按下
- {
- delay(6); //延時去抖
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0) //再次檢測是否有鍵按下
- {
- temp=P3;
- switch(temp)
- {
- case 0x77:
- key=1;
- break;
- case 0xb7:
- key=2;
- break;
- case 0xd7:
- key=3;
- break;
- case 0xe7:
- key=4;
- break; //判斷按下的是哪個鍵
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- } //等待按鍵釋放
- }
- }
- P3=0xfb;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(6);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0x7b:
- key=5;
- break;
- case 0xbb:
- key=6;
- break;
- case 0xdb:
- key=7;
- break;
- case 0xeb:
- key=8;
- break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- P3=0xfd;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(6);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0x7d:
- key=9;
- break;
- case 0xbd:
- key=10;
- break;
- case 0xdd:
- key=11;
- break;
- case 0xed:
- key=12;
- break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- P3=0xfe;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(6);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0x7e:
- key=13;
- break;
- case 0xbe:
- key=14;
- break;
- case 0xde:
- key=15;
- break;
- case 0xee:
- key=16;
- break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- }
- /*主函數*/
- void alarm()
- {
- buzzer=~buzzer;
- led0=~led0;
- delay(30);
- }
- void display(uchr num)
- {
- if(key!=0) //若有鍵按下,則進入該循環進行處理
- {
-
- dula=1;
- P0=tab[num/10];
- dula=0;
- P0=0x00;
- wela=1;
- P0=0xfe;
- wela=0;
- delay(100);
-
- dula=1;
- P0=tab[num%10];
- dula=0;
- P0=0x00;
- wela=1;
- P0=0xfd;
- wela=0;
- delay(100);
- alarm();
- }
- }
- void main()
- {
- P0=0x00;
- while(1)
- {
- matrixkeyscan();
- display(key);
- }
- }
-
復制代碼
所有資料51hei提供下載:
important.doc
(1.99 MB, 下載次數: 32)
2018-11-9 10:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|