模擬病房呼叫系統(tǒng)設(shè)計(jì)(共17頁)_第1頁
模擬病房呼叫系統(tǒng)設(shè)計(jì)(共17頁)_第2頁
模擬病房呼叫系統(tǒng)設(shè)計(jì)(共17頁)_第3頁
模擬病房呼叫系統(tǒng)設(shè)計(jì)(共17頁)_第4頁
模擬病房呼叫系統(tǒng)設(shè)計(jì)(共17頁)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上模擬病房呼叫系統(tǒng)設(shè)計(jì)一、設(shè)計(jì)目的通過設(shè)計(jì)模擬病床呼叫的程序,更加熟練掌握單片機(jī)C語言指令的使用,培養(yǎng)用單片機(jī)來實(shí)現(xiàn)一些電子設(shè)備運(yùn)行的邏輯思路,為以后更好的使用單片機(jī)打下基礎(chǔ)。二、設(shè)計(jì)要求模擬一個護(hù)理站下管8個床位,哪個病人要呼叫可以按鍵,相應(yīng)蜂鳴器響,數(shù)碼管顯示:呼叫數(shù)量_床位號.要求:16個數(shù)碼管,正常情況下顯示時間(時分秒),時間可通過按鍵調(diào)整。2有人呼叫則閃爍顯示數(shù)量_床位號并蜂鳴器響,按應(yīng)答鍵后繼續(xù)顯示時間。3若同時有多個病人呼叫則依次輪流顯示:數(shù)量_床位號。4、要求做出實(shí)物。三、硬件電路設(shè)計(jì)3.1 系統(tǒng)結(jié)構(gòu)框圖圖3-1系統(tǒng)框圖當(dāng)單片機(jī)一上電時,數(shù)碼管顯示時,

2、分,秒。并且可通過按鍵對時,分的調(diào)節(jié)。調(diào)節(jié)按鍵主要運(yùn)用外部中斷程序,其中時鐘的顯示是通過TO定時器定時1s和數(shù)碼管顯示電路主要運(yùn)用動態(tài)掃描的方式以實(shí)現(xiàn)的。此設(shè)計(jì)主要運(yùn)用鍵盤掃描電路來設(shè)計(jì)病床號。當(dāng)有按鍵按下時數(shù)碼管由當(dāng)前的顯示時,分,秒,變?yōu)轱@示當(dāng)前呼叫數(shù)量和呼叫床號,并且呼叫床號按呼叫順序循環(huán)顯示,程序中運(yùn)用數(shù)組作為按鍵緩沖區(qū),先存儲按鍵鍵值然后實(shí)現(xiàn)動態(tài)顯示。當(dāng)按下復(fù)位鍵后重新顯示時,分,秒。并且清空按鍵緩沖區(qū)。3.2 STC89C52單片機(jī)芯片 89C52共有四個八位的并行雙向口,即有32根輸入輸出口線。各口的每一位均由鎖存器、輸出驅(qū)動器和輸入緩沖器組成。 圖3-2 STC89C52集成芯

3、片89C52共有四個八位的并行雙向口,即有32根輸入輸出口線。各口的每一位均由鎖存器、輸出驅(qū)動器和輸入緩沖器組成。 VCC(40引腳):電源電壓VSS(20引腳):接地P0端口(P0.0P0.7,3932引腳):P0口是一個漏極開路的8位雙向I/O口。作為輸出端口,每個引腳能驅(qū)動8個TTL負(fù)載,對端口P0寫入“1”時,可以作為高阻抗輸入。在訪問外部程序和數(shù)據(jù)存儲器時,P0口也可以提供低8位地址和8位數(shù)據(jù)的復(fù)用總線。此時,P0口內(nèi)部上拉電阻有效。在Flash ROM編程時,P0端口接收指令字節(jié);而在校驗(yàn)程序時,則輸出指令字節(jié)。驗(yàn)證時,要求外接上拉電阻。P1端口(P1.0P1.7,18引腳):P1

4、口是一個帶內(nèi)部上拉電阻的8位雙向I/O口。P1的輸出緩沖器可驅(qū)動(吸收或者輸出電流方式)4個TTL輸入。對端口寫入1時,通過內(nèi)部的上拉電阻把端口拉到高電位,這是可用作輸入口。P1口作輸入口使用時,因?yàn)橛袃?nèi)部上拉電阻,那些被外部拉低的引腳會輸出一個電流。P1口特點(diǎn)是輸出鎖存器,輸出時沒有條件。輸入緩沖,輸入時有條件,即需要先將該口設(shè)為輸入狀態(tài),先輸出1。 此外,P1.0和P1.1還可以作為定時器/計(jì)數(shù)器2的外部技術(shù)輸入(P1.0/T2)和定時器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX) P3口為準(zhǔn)雙向口??梢宰止?jié)訪問,也可以位訪問。P3.0-RXD,串行輸入口。P3.1-TXD,串行輸出口。P3

5、.2-INT0,外部中斷0的請求。P3.3-INT1,外部中斷1的請求。P3.4-T0,定時器/計(jì)數(shù)器0外部計(jì)數(shù)脈沖。P3.5-T1,定時器/計(jì)數(shù)器,1外部計(jì)數(shù)脈沖。P3.6-WR,外部數(shù)據(jù)存儲器寫選通。P3.7-RD,外部數(shù)據(jù)存儲器讀選通。RST(9引腳):復(fù)位輸入。當(dāng)輸入連續(xù)兩個機(jī)器周期以上高電平時為有效,用來完成單片機(jī)單片機(jī)的復(fù)位初始化操作。ALE(30引腳):地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。XTAL1(19引腳):振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2(18引腳):振蕩器反相放大器的輸入端。3.3 鍵盤掃描電路圖3-3 按鍵掃

6、描電路病床呼叫按鈕采用了矩陣鍵盤掃描的方式。按鍵設(shè)置在行、列線交點(diǎn)上,行、列線分別連接到按鍵開關(guān)的兩端。首先將列至零,主程序中掃描P1是否有鍵按下,如果有鍵按下執(zhí)行子程序,先將列至零,掃描行然后置位行掃描列。3.4 數(shù)碼管顯示電路圖3-4 數(shù)碼管顯示電路數(shù)碼管是通過鎖存器573輸出的。驅(qū)動573需要上拉電阻。通過P0口控制他的片選,以及數(shù)碼管的位選,通過P2口控制數(shù)碼管的段選,主程序中通過動態(tài)掃描以實(shí)現(xiàn)數(shù)碼管的動態(tài)輸出。原理說明:74HC573的八個鎖存器都是透明的D 型鎖存器,當(dāng)使能(G)為高時,Q 輸出將隨數(shù)據(jù)(D)輸入而變。當(dāng)使能為低時,輸出將鎖存在已建立的數(shù)據(jù)電平上。輸出控制不影響鎖存

7、器的內(nèi)部工作,即老數(shù)據(jù)可以保持,甚至當(dāng)輸出被關(guān)閉時,新的數(shù)據(jù)也可以置入。這種電路可以驅(qū)動大或低阻抗負(fù)載,可以直接與系統(tǒng)總線接口并驅(qū)動總線,而不需要外接口。特別適用于緩沖寄存器,I/O 通道,雙向總線驅(qū)動器和工作寄存器。當(dāng)輸入的數(shù)據(jù)消失時,在芯片的輸出端,數(shù)據(jù)仍然保持; 這個概念在并行數(shù)據(jù)擴(kuò)展中經(jīng)常使用到。3.5 系統(tǒng)電路原理圖圖3-7 系統(tǒng)電路原理圖所用器件如下如所示:數(shù)碼管:LD3461AS-SS22鎖存器:74HC573單片機(jī):AT89S52上拉電阻:RESPACK-84、 軟件4.1 程序設(shè)計(jì) 圖4-1 程序設(shè)計(jì)流程圖 無人呼叫時,運(yùn)用動態(tài)掃描方式利用定時器T0顯示時間;有人呼叫時,運(yùn)用

8、數(shù)組作為按鍵緩沖區(qū),先存儲按鍵值然后動態(tài)顯示按鍵床號。4.2 子程序設(shè)計(jì)圖4-2 子程序流程圖掃描P1口前四位是否有變化,變化的位數(shù)為按鍵床號所屬的行數(shù);掃描P1口后四位是否有變化,變化的位數(shù)為按鍵床號所屬的列數(shù)。行列結(jié)合可知呼叫的病床號。五、實(shí)驗(yàn)結(jié)果圖仿真時間:啟動后系統(tǒng)會自動進(jìn)入顯示時間狀態(tài),此狀態(tài)下S8、S9、S10三個按鍵分別能對秒、分、時進(jìn)行加1設(shè)置,而S12、S13、S14三個按鍵分別能對毫秒、秒、分進(jìn)行減1設(shè)置。按下S11便暫停顯示。仿真時間如圖所示:圖5-1 仿真時間有呼叫時仿真:在任意時刻按下S0至S7中的一個按鍵,蜂鳴器發(fā)出響聲,進(jìn)入顯示病床號狀態(tài),左1顯示呼叫總?cè)藬?shù),右1

9、閃爍顯示病床號(若有多個人呼叫)。在按下復(fù)位鍵P37以前如有病人重復(fù)按鍵則只發(fā)出響聲,不會改變呼叫總?cè)藬?shù)的顯示。另外此狀態(tài)下S8至S15處于無效無效狀態(tài),但時間計(jì)數(shù)仍未停止。圖5-2 仿真呼叫倒計(jì)時秒表仿真:在無人呼叫時按下S15便進(jìn)入秒表時間設(shè)定狀態(tài),此狀態(tài)下S8、S9、S10三個按鍵分別能對毫秒、秒、分進(jìn)行加1設(shè)置,而S12、S13、S14三個按鍵分別能對毫秒、秒、分進(jìn)行減1設(shè)置,設(shè)置完成后再次按下S15倒計(jì)時便開始。當(dāng)計(jì)時結(jié)束后再次按下S15,便又回到了時間顯示狀態(tài)。兩個狀態(tài)互不影響。圖5-3 倒計(jì)時秒表仿真六、源程序/*程序名稱:病床呼叫系統(tǒng)設(shè)計(jì)簡要說明:無人呼叫顯示時間,有人呼叫顯示

10、病床號及呼叫總?cè)藬?shù)。P0,P2口接數(shù)碼管顯示,P1口接4*4矩陣鍵盤(鍵號015)。各鍵功能:07號按鍵:病床號07; 810號按鍵:秒,分,時加1調(diào)整鍵 1214號按鍵:秒,分,時減1調(diào)整鍵 11號按鍵:暫停時間顯示鍵 15號按鍵:倒計(jì)時的秒表 P3.6接蜂鳴器按鍵 P3.7病床復(fù)位鍵編 寫:邢志杰時 間:2015年07月8日最后修改時間:2015年07月10日*/#include#define uchar unsigned char#define uint unsigned intvoid display();/顯示時間子函數(shù)void display1();/顯示倒計(jì)時時間子函數(shù)void

11、disp(); /顯示呼叫病床總數(shù)及當(dāng)前呼叫病床子函數(shù)void Time0() ; /定時中斷子函數(shù),用于改變時間參數(shù)void Time1() ; void rest(); / 初始化子函數(shù),用于病床復(fù)位后uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0xc6,0xa1,0x86,0x8e,0x00; /共陰極數(shù)碼管顯示段碼sbit P36=P36; /接蜂鳴器sbit P37=P37; /病床復(fù)位按鍵void DelayMS(uint x) /延時子函數(shù)uchar y;while

12、(x-)for(y=0;y120;y+);uchar d8=0,0,0,0,0,0,0,0; /用于存放呼叫病床的顯示段碼uchar g=0,j=0,log=0,CEN=0; /下面有詳細(xì)說明void rest()/ 初始化子函數(shù),用于病床復(fù)位后g=0; /g計(jì)數(shù):要顯示的呼叫病床個數(shù)log=0; /病床呼叫標(biāo)志位,有人呼叫置1P36=0; /接蜂鳴器,高電平響CEN=0; /當(dāng)前顯示的病床號在數(shù)組d中的偏移量for(j=0;j=60)t=0; if(watch!=0) secon1=t; else secon=t; break; case 0xdb: KeyNo=9; if(watch!=0

13、) t=min1; else t=min; if(+t=60)t=0; if(watch!=0) min1=t; else min=t; break; case 0xbb: KeyNo=10; if(watch!=0) t=hour1; else t=hour; if(+t=60)t=0; if(watch!=0) hour1=t; else hour=t; break; case 0x7b: KeyNo=11;TR0=TR0;break; /暫停計(jì)時 P1=0xf7;temp=P1;if(temp!=0xf7&g=0) switch(temp) case 0xe7: KeyNo=12; if

14、(watch!=0) t=secon1; else t=secon; if(t-=0)t=59; if(watch!=0) secon1=t; else secon=t; break; case 0xd7: KeyNo=13; if(watch!=0) t=min1; else t=min; if(t-=0)t=59; if(watch!=0) min1=t; else min=t; break; case 0xb7: KeyNo=14; if(watch!=0) t=hour1; else t=hour; if(t-=0)t=59; if(watch!=0) hour1=t; else ho

15、ur=t; break; case 0x77: KeyNo=15;watch+;/倒計(jì)時watch=1設(shè)定倒計(jì)時時間, if(watch=2) TR1=1; /watch=2開始計(jì)時 if(watch=3) watch=0; TR1=0; break; /等待按鍵松開 P1=0X0f;temp=P1;while(temp!=0x0f) P1=0X0f;temp=P1;if(log=1)/當(dāng)前按鍵為病床按鍵disp(); /顯示病床號及呼叫總數(shù)else if(watch=0) /當(dāng)前按鍵為時間調(diào)整按鍵且無人呼叫display(); /顯示時間else display1(); /當(dāng)前按鍵為倒計(jì)時時

16、間調(diào)整按鍵且無人呼叫void display() /顯示時間函數(shù) P0=0xfe;P2=DSY_CODEhour/10;DelayMS(1);P0=0xfd;P2=DSY_CODEhour%10;DelayMS(1);P0=0xfb;P2=DSY_CODEmin/10;DelayMS(1);P0=0xf7;P2=DSY_CODEmin%10;DelayMS(1);P0=0xef;P2=DSY_CODEsecon/10;DelayMS(1);P0=0xdf;P2=DSY_CODEsecon%10;DelayMS(1); void display1() /倒計(jì)時顯示時間函數(shù)P0=0xfe;P2=D

17、SY_CODEhour1/10;DelayMS(1);P0=0xfd;P2=DSY_CODEhour1%10;DelayMS(1);P0=0xfb;P2=DSY_CODEmin1/10;DelayMS(1);P0=0xf7;P2=DSY_CODEmin1%10;DelayMS(1);P0=0xef;P2=DSY_CODEsecon1/10;DelayMS(1);P0=0xdf;P2=DSY_CODEsecon1%10;DelayMS(1); void disp() /顯示呼叫病床總數(shù)及當(dāng)前呼叫病床DelayMS(1);P0=0xfe;P2=DSY_CODEg; /顯示當(dāng)前呼叫病床總數(shù)Delay

18、MS(1);P0=0xfd;P2=dCEN;/顯示當(dāng)前床號,CEN的值在定時中斷中發(fā)生發(fā)生改變,實(shí)現(xiàn)一秒的閃爍顯示,精華之處DelayMS(1);void main() /主程序TMOD=0x00; /定時器T0方式0TH0=(8192-4000)/32; /計(jì)時250*4ms=1sTL0=(8192-4000)%32;TH1=(8192-5000)/32; /計(jì)時250*4ms=1sTL1=(8192-5000)%32;IE=0x8a; /開T0,T1中斷PX1=1;TR1=0;/關(guān)T1TR0=1; /初始化完畢while(1) /主程序在此處循環(huán)if(g!=0) /有人呼叫時,顯示病床號 disp();else if(watch=0)/無人呼叫時,顯示時、分、秒display();else /無人呼叫顯示倒計(jì)時display1(); /判斷是否有病床呼叫P1=0xf0;if(

溫馨提示

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

評論

0/150

提交評論