每個病房有一個按鈕,當按下一個按鈕時,數碼管顯示病床號,指示燈閃爍,報警電路報警。 當護士按復位鍵應答,數碼顯示管顯示消失,取消當前呼叫。 未按復位鍵時,再按下另一按鈕,數碼管顯示相應病房號,指示燈閃爍,報警電路報警。 單片機復位時,系統清零。 2.1 系統總體方案及框圖 無線病房呼叫系統在工作過程中,為了知道是哪個房間的病人發出呼叫信號,必須設計一個系統來完成此任務。此系統能顯示呼叫房間號,并發出報警聲。系統框圖如下圖所示: (詳見附件) 2.2 時鐘電路設計 單片機必須在時鐘的控制下才能工作,在單片機內部有一個用于構成振蕩器的高增益反相放大器,時鐘頻率直接影響單片機的速度,時鐘電路的質量也直接影響單片機系統的穩定性。 此設計中的時鐘電路選用內部時鐘方式的石英晶體振蕩器,它的輸入端為芯片引腳XTAL1,在加電大約延遲10ms后振蕩器起振;輸出端為XTAL2,產生幅度為3V左右的正弦波時鐘信號。這兩個引腳跨接石英晶體和微調電容,構成一個穩定的自激振蕩器,其振蕩頻率主要由石英晶振的頻率確定。電路中兩個電容 C1、C2的作用有兩個:一是幫助振蕩器起振;二是對振蕩器的頻率進行微調。C1、C2的典型值為30PF。 單片機執行的指令均是在CPU控制器的時序控制電路的控制下進行的,各種時序均與時鐘周期有關。單片機在工作時,由內部振蕩器產生或由外直接輸入的送至內部控制邏輯單元的時鐘信號的周期稱為時鐘周期。其大小是時鐘信號頻率的倒數,常用f表示,是單片機時鐘控制信號的基本時間單位。如時鐘頻率為6MHz,即f=6MHz,則時鐘周期為1/6μs。 
圖2-2 時鐘頻率電路 2.3 系統復位電路設計 AT89C51的復位是由外部的復位電路實現的,復位電路通常采用上電自動復位和按鈕復位兩種方式本設計采用按鈕手動電平復位,該設計是通過RST端經電阻與電源Vcc接通來實現的,當時鐘頻率選用6MHz時,C的典型取值為10uf,R的取值為2KΩ,具體電路圖如圖2-3所示。  圖2-3 復位電路 2.4 鍵盤掃描電路設計 2.4.1 矩陣式鍵盤 鍵盤具有向單片機輸入數據,命令等功能,是人與單片機對話的主要手段。在單片機中應用最多的是獨立式鍵盤和矩陣式鍵盤。本設計采用矩陣式鍵盤,也稱為行列式鍵盤,用于按鍵數目較多的場合。與獨立式鍵盤相比,要節省較多的I/O 口。它由行線和列線組成,一組為行線,一組為列線,按鍵位于行列的交叉點上。 矩陣鍵盤中無按鍵按下時,行線位于高電平狀態;當有鍵按下時,行線電平狀態將由與此行線相連的列線的電平決定。列線的電平如果為低,則行線電平為低;列線電平如果為高,則行線的電平也為高,這一點是識別矩陣式鍵盤按鍵是否按下的關鍵所在。由于矩陣式鍵盤中行、列線為多鍵共用,各按鍵彼此將相互影響,所以必須將行、列信號配合,才能確定閉合鍵的位置。本設計中采用4*4矩陣鍵盤電路設計,其電路圖如下圖所示: 
圖 2-4 4*4矩陣鍵盤電路圖 2.4.2 鍵的識別 為了識別鍵盤上的閉合鍵,通常采用兩種方法,一種為掃描法,另一種為線發轉法。 1 掃描法原理:識別鍵盤有無鍵按下,可分兩部進行:第1步,識別鍵盤有無鍵按下;第2步,如有鍵按下,識別出具體的鍵位。下面以4*4行、列結構中鍵3被按下為例說明掃描法識別此鍵的過程。 第1步,識別鍵盤有無鍵按下。首先把所有列線均置為0電平,然后檢查各行線電平是否為高電平,如果不全為高電平,說明有鍵按下,否則說明無鍵被按下。例如,當鍵3按下時,第1行線電平為低電平,但還不能確定是鍵3被按下, 第2步,識別那個鍵被按下。采用掃描法,在某一時刻只讓1條列線處于低電平,其余所有列線處于高電平。當第1列為低電平,其余各列為高電平時,因為是鍵3被按下,所以第1列的行線仍處于高電平;而當第2列為低電平,其余各列為高電平時,同樣也會發現第1行的行線仍處于高電平狀態;直到讓第4列為低電平,其余各列為高電平時,此時第1行的行線電平變為低電平,據此,可判斷第1行與第4列交叉點處的按鍵,即鍵3被按下。 去除鍵抖動:用軟件延時來消除按鍵抖動,基本思想是:在檢測到有鍵按下時,該鍵所對應的行線為低電平,執行一段延時10ms的子程序后,確認該行線電平是否仍為低電平,如果仍為低電平,則確認該行確實有鍵按下。 線反轉法原理:線反轉法需3步,即可確定按鍵所在的行和列,從而識別出所按的鍵。 第1步:執行程序使行線均為低電平,此時讀取各列線的狀態即可知道是否有鍵按下。當無鍵按下時,各行線與各列線相互斷開,各列線仍保持為高電平;當有鍵按下時,則相應的行線與列線通過該按鍵相連,該列線就變為低電平,此時讀取列線的狀態,得到列碼。 第2步,執行程序使列線均為低電平,當有鍵按下時,行線中有一條為低電平,其余行線為高電平,讀取行線的狀態,得到行碼。 第3步,將第一步得到的列碼和第二步得到的行碼拼合成被按鍵的位置碼,即為所得(因為行線和列線各有一條為低電平,其余為高電平,所以位置碼低四位和高四位分別只有一位低電平,其余為高電平)。 也就是說,當某個鍵按下時,該鍵兩端所對應的行線和列線為低電平,其余行線和列線為高電平。 全部矩陣鍵盤的位置碼如下表2-1所示: 表2-1 矩陣鍵盤位置碼 本設計中采用掃描法。其綜合思想是:先把某一列置為低電平,其余各列置為高電平,檢查各行線電平的變化,如果某行線電平為低電平,則可確定此行此列交叉點處的按鍵被按下。 2.5 LED數碼管顯示部分 LED發光器件一般常用的有兩類:數碼管和點陣。7段數碼管屬于LED發光器件的一種。 為適用于不同的驅動電路,有共陰極共陽極兩種,為了使LED數碼管顯示不同的符號和數字,要把某些段的發光二極管點亮,這樣就要為LED數碼管提供代碼,因為這些代碼可使LED相應的段發光,從而顯示不同字形,因此改代碼段也稱為段碼或字型碼。 
圖2-5 LED顯示器的兩種結構 LED數碼管共計8段。因此提供給LED數碼管的段碼正好是一個字節。在使用時,一般習慣上還是以a段對應段碼字節的最低位。各段與字節中各位對應關系見表2-2 表 2-2 段碼與字節中各位對應關系 LED數碼管有靜態顯示和動態顯示兩種顯示方式。 靜態顯示:指無論多少位LED數碼管,同時處于顯示狀態,靜態顯示方式的顯示無閃爍,亮度都較高,軟件控制比較容易。 動態顯示:指無論在任何時刻只有一個LED數碼管處于顯示狀態,即單片機采用“掃描方式”控制各個數碼管輪流顯示。顯示亮度不如靜態顯示的亮度高,如果掃描速率較低,會出現閃爍現象。 本設計中采用動態顯示,利用74LS373和顯示器組成顯示系統。LED不同位顯示的時間間隔(掃描間隔)應根據實際情況而定。發光二極管從導通發光有一定的延時,導通時間太短,發光太弱,人眼無法看清;時間太長,要受限于臨界顯爍頻率,而且此時間越長,占用單片機的時間也越多。因此動態顯示的實質是以犧牲單片機時間來換取I/O端口的減少。 用AT89C51自身接口實現數碼管動態顯示和鍵盤掃描,使用AT89C51單片微機外加地址鎖存用的2塊8三態鎖存器74LS373。 74LS373是常用的地址鎖存芯片,它實質是一個帶三態緩沖輸出的8D觸發器。其引腳圖如下圖2-6所示:

圖2-6 74ls373引腳圖 其功能介紹如下: 1腳是輸出使能(OE),是低電平有效,當1腳是高電平時,不管輸入3、4、7、8、13、14、17、18如何,也不管11腳(鎖存控制端,G)如何,輸出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈現高阻狀態(或者叫浮空狀態); 當1腳是低電平時,只要11腳(鎖存控制端,G)上出現一個下降沿,輸出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈現輸入腳3、4、7、8、13、14、17、18的狀態. 鎖存端LE 由高變低時,輸出端8 位信息被鎖存,直到LE 端再次有效。 當三態門使能信號OE為低電平時,三態門導通,允許Q0~Q7輸出,OE為高電平時,輸出懸空。 1D~8D為8個輸入端。1Q~8Q為8個輸出端。其在電路圖中的連接如圖2-6所示

圖2-7 74LS373鎖存器及數碼管顯示電路
2.6 響鈴報警電路設計部分 用三極管加限流電阻作為控制開關,用單片機P2.3口控制,利用三極管當做開關電路可以保護單片機,還可以起到放大電流的作用,當三極管基極為低電平時,發射極截止,為高電平時,發射極導通。顯示器顯示床號同時發出報警聲。通過編程令單片機執行中斷程序。
其電路圖2-8如: 圖2-8 響鈴報警電路
2.7 系統總體硬件電路圖 本系統利用AT89C51作為呼叫系統的核心,外圍電路有:晶振電路、系統復位電路、響鈴報警電路和LED數碼顯示電路以及其他各應用電路。系統總體硬件如圖2-9所示。 圖2-9 系統總體硬件電路圖
第3章 單片機AT89C51簡介 3.1 AT89C51的基本結構 AT89C51是一種帶4K字節閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU(Cenctral Processing Unit)和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C系列單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。其管腳圖如3-1所示:  圖3-1 89C51管腳圖 部分引腳說明: XTAL2(18 腳):接外部晶體和微調電容的一端;在8051 片內它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時鐘電路時,該引腳輸入外部時鐘脈沖。
要檢查8051/8031 的振蕩電路是否正常工作,可用示波器查看XTAL2 端是否有脈沖信號輸出。 XTAL1(19 腳):接外部晶體和微調電容的另一端;在片內它是振蕩電路反相放大器的輸入端。在采用外部時鐘時,該引腳必須接地。 控制信號引腳RST,ALE,PSEN 和EA: RST/VPD(9 腳):RST 是復位信號輸入端,高電平有效。 ALE/PROG(30 腳):地址鎖存允許信號端。當8051 上電正常工作后,ALE 引腳不斷向外輸出正脈沖信號,此頻率為振蕩器頻率fOSC 的1/6。CPU 訪問片外存儲器時,ALE 輸出信號作為鎖存低8 位地址的控制信號。 ALE端的負載驅動能力為8 個LS 型TTL(低功耗甚高速TTL)負載。 此引腳的第二功能PROG 在對片內帶有4KB EPROM 的8751 編程寫入(固化程序)時,作為編程脈沖輸入端。 PSEN(29 腳):程序存儲允許輸出信號端。在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引肢接EPROM 的OE 端(見后面幾章任何一個小系統硬件圖)。PSEN 端有效,即允許讀出EPROM/ROM 中的指令碼。PSEN 端同樣可驅動8 個LS 型TTL 負載。要檢查一個8051/8031 小系統上電后CPU能否正常到EPROM/ROM 中讀取指令碼,也可用示波器看PSEN 端有無脈沖輸出。如有則說明基本上工作正常。 EA/Vpp(31 腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。 P0口(P0.0~P0.7,39~32 腳):P0口是一個漏極開路的8 位準雙向I/O口。作為漏極開路的輸出端口,每位能驅動8 個LS 型TTL 負載。當P0 口作為輸入口使用時,應先向口鎖存器(地址80H)寫入全1,此時P0 口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時要先寫1,這就是準雙向口的含義。在CPU 訪問片外存儲器時,P0口分時提供低8 位地址和8 位數據的復用總線。在此期間,P0口內部上拉電阻有效。 P1口(P1.0~P1.7,1~8 腳):P1口是一個帶內部上拉電阻的8 位準雙向I/O口。P1口每位能驅動4 個LS 型TTL 負載。在P1口作為輸入口使用時,應先向P1口鎖存地址(90H)寫入全1,此時P1口引腳由內部上拉電阻拉成高電平。 P2口(P2.0~P2.7,21~28 腳):P2口是一個帶內部上拉電阻的8 位準雙向I/O口。P口每位能驅動4個LS 型TTL 負載。在訪問片外EPROM/RAM 時,它輸出高8 位地址。 P3口(P3.0~P3.7,10~17 腳):P3口是一個帶內部上拉電阻的8 位準雙向I/O口。P3口每位能驅動4個LS型TTL負載。P3口與其它I/O 端口有很大的區別,它的每個引腳都有第二功能,如下:
P3.0:(RXD)串行數據接收。 P3.1:(RXD)串行數據發送。 P3.2:(INT0#)外部中斷0輸入。 P3.3:(INT1#)外部中斷1輸入。 P3.4:(T0)定時/計數器0的外部計數輸入。 P3.5:(T1)定時/計數器1的外部計數輸入。 P3.6:(WR#)外部數據存儲器寫選通。 P3.7:(RD#)外部數據存儲器讀選通。 3.2 AT89C51的指令系統 AT89C51的指令系統是一種簡明、易掌握、效率較高的指令系統,它共有7種尋址方式,111條指令,按其功能可分為五大類: - 數據傳送類指令(28條);
- 算術運算類指令(24條);
- 邏輯操作類指令(25條);
- 控制轉移類指令(17條);
- 位操作類指令(17條)。
指令的表示方法稱為指令格式。一條指令通常有兩部分組成:操作碼和操作數。大多數指令在執行時都需要使用操作數。尋址方式就是在指令中說明操作數所在地址的方法,一般來說,尋址方式越多,單片機的功能就越強,靈活性則越大,指令系統則就越復雜,AT89C51單片機的指令系統有7中尋址方式。分別是:寄存器尋址方式、直接尋址方式、寄存器間接尋址方式、立即數尋址方式、基址寄存器加變址寄存器間接尋址方式、相對尋址方式和位尋址方式。 3.3 AT89C51單片機的定時/計數器 在單片機應用系統中,常常會有定時控制需求,如定時輸出、定時檢測、定時掃描等;也經常要對外部事件進行計數。80C51單片機內集成有兩個可編程的定時/計數器:T0和T1,它們既可以工作于定時模式,也可以工作于外部事件計數模式,此外,T1還可以作為串行口的波特率發生器。
第4章 系統軟件設計 4.1 單片機C語言程序設計步驟 程序設計步驟包括繪制程序流程圖,編寫程序,運行調試,仿真模擬等步驟。 病房呼叫系統軟件設計均采用模塊化設計,整個程序主要包括主程序、鍵盤掃描程序、顯示程序。所有程序均采用單片機C語言編寫。病房呼叫系統的軟件設計思路說明如下:主程序的作用為程序初始化,顯示病房編號(病房號的獲得在鍵盤掃描程序中實現)。通過不斷的掃描,檢查是否有病人呼叫。顯示程序通過掃描16個病床的判斷標志截來決定是否需要顯示床號。鍵盤掃描程序是重要組成部分,它的功能是判困是否有按鍵并進一步確認是哪個按鍵按下或釋放,同時修改相應的標志位,以運用到顯示程序中。 4.2 系統主程序流程圖 主程序流程圖給出了系統工作的基本過程,,描述了信號的基本流向,起到了一個向導的作用。 
圖4-1主程序流程圖
主程序描述:首先對各存儲單元初始化,設定定時初值,清零鍵,然后繼續掃描鍵盤, 如掃描到鍵盤有鍵按下,則進而判斷是嘟個床位按下,進而顯示病床號時,要判斷標志位, 若已經按下,則不響應,否則顯示病床號。最后,返回掃描鍵值程序,準備下一次的判斷。 4.3 顯示程序流程圖 顯示程序主要是來判斷是否需要顯示,以及如何去顯示,是十分重要的程序之一。設計流程圖如4-2圖所示。 
圖 4-2 顯示程序流程圖 顯示程序描述:設定床號標志為,令n從1開始,判斷床號是否為0,若不為0,表示有病房呼叫,則顯示床號,繼續掃描鍵值判斷是否有別的病房呼叫,若n為0,表示無呼叫,則繼續掃描下一病床號。
4.4 鍵盤掃描流程圖 鍵盤電路設計為4*4矩陣式,在程序中可以先判斷按鍵編碼,然后在顯示子程序中通過程序進行譯碼,再顯示。設計流程圖如圖4-3所示:
第5章 電路的仿真及調試 5.1 軟件的仿真 啟動電源,顯示屏無顯示,在按下2號鍵時,界面部分顯示02,指示燈閃爍,聲音報警;未按按復位鍵,再按下6號鍵時,界面顯示06,指示燈閃爍,聲音報警。依次按下各按鍵,相應病房號會相應顯示。該設計反映了控制電路的可行性。綜上所述,本系統實現了主要功能:顯示病床號,指示燈閃爍,聲音報警提醒值班人員。通過Proteus軟件仿真,能達到上述結論,滿足課項目目的,達到要求。采用Proteus進行圖形繪制仿真,Keil進行編程,然后放入單片機中,實現應有的功能。 

5.2 硬件調試分析 由于時間有限,沒有做出電路板,只在單片機學習板上做了硬件仿真,以下是關于硬件仿真圖:  

5.3 調試問題分析與總結 本設計采用七段數碼管顯示功能,最初在軟件上進行仿真時按鍵個位數字是1和4時,數碼管不能正常顯示,將程序中數碼管顯示位數處進行了相應修改,能正常顯示。 按下一個按鍵時,數碼管顯示按鍵號,有聲音報警,再按下另一個按鍵,卻不能正常顯示,必須在按下復位鍵的前提下,按下另一個按鍵才能重新顯示。之后對程序進行了相應的修改,將while(key!=0)改成if(key!=0)后,數碼管就能在按下按鍵后顯示相應按鍵號,指示燈閃爍,聲音報警。 由于軟件仿真的延時問題,數碼管顯示相應病床號時會不穩定。

程序+仿真+完整文檔下載(word格式 可編輯):
http://www.raoushi.com/bbs/dpj-86776-1.html
|