病床呼叫系統(tǒng)設(shè)計(jì),病床,呼叫,呼喚,系統(tǒng),設(shè)計(jì)
武漢理工大學(xué)《能力強(qiáng)化訓(xùn)練》課程設(shè)計(jì)說明書
能力拓展訓(xùn)練任務(wù)書
學(xué)生姓名: 梅浪奇 專業(yè)班級(jí): 自動(dòng)化1002班
指導(dǎo)教師: 孫曉明 工作單位: 自動(dòng)化學(xué)院
題 目: 病床呼叫系統(tǒng)設(shè)計(jì)
初始條件:計(jì)算機(jī)、Max+plusⅡ、EDA實(shí)驗(yàn)箱。
要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)
設(shè)計(jì)病床呼叫系統(tǒng),使用3X8矩陣開關(guān)分別模擬醫(yī)院病房與病床位數(shù),當(dāng)某開關(guān)按下時(shí),系統(tǒng)顯示呼叫的病房與病床、呼叫的時(shí)間。處理完畢可清除該呼叫顯示記錄。
提高部分:
同時(shí)有數(shù)個(gè)病床呼叫時(shí),可以循環(huán)呼叫記錄顯示。
任務(wù)安排:
(1) 設(shè)計(jì)任務(wù)及要求分析
(2) 方案比較及認(rèn)證說明
(3) 系統(tǒng)原理闡述,寫出設(shè)計(jì)方案結(jié)構(gòu)圖。
(4) 軟件設(shè)計(jì)課題需要說明:軟件思想,流程圖,源程序及程序注釋
(5) 調(diào)試記錄及結(jié)果分析、
(6) 總結(jié)
(7) 參考資料5篇以上
(8) 附錄:程序清單
時(shí)間安排:
6月24日:安排設(shè)計(jì)任務(wù);收集資料;方案選擇
6月25日:程序設(shè)計(jì)
6月26——27日:實(shí)驗(yàn)室內(nèi)調(diào)試程序并演示
6月28日:撰寫報(bào)告
7月1日:交能力拓展訓(xùn)練報(bào)告
指導(dǎo)教師簽名:
孫曉明 2013 年 6 月 24 日
系主任(或責(zé)任教師)簽名: 年 月 日
I
摘要
病房呼叫系統(tǒng)是傳送臨床信息的重要手段,可將病人的請(qǐng)求快速傳送給值班醫(yī)生或護(hù)士,它主要用于協(xié)助醫(yī)院病員在病床上方便地呼叫醫(yī)務(wù)人員,是提高醫(yī)院和病室護(hù)理水平的必備設(shè)備之一。讓患者需要服務(wù)時(shí),只要按一下隨身攜帶的呼叫器,信息立馬就能傳至護(hù)工處.避免沒有看護(hù)人在時(shí),病人急需服務(wù)卻無法通知醫(yī)生的情況.它要求及時(shí)、準(zhǔn)確、可靠、簡(jiǎn)便可行。
本設(shè)計(jì)的呼叫系統(tǒng)由按鍵檢測(cè),數(shù)據(jù)處理,信息顯示三部分組成。由C51單片機(jī)作為主要控制器,利用液晶顯示器作為顯示部分,使用3X8矩陣開關(guān)分別模擬醫(yī)院病房與病床位數(shù)。病人按下按鍵時(shí),C51立即獲取病人的病房號(hào)和病床號(hào),同時(shí)采集此時(shí)的時(shí)間并一起顯示在液晶顯示器上,當(dāng)護(hù)士看到顯示器上病人的信息,并按下清零鍵后,液晶顯示器恢復(fù)到初始狀態(tài)。本系統(tǒng)對(duì)鍵盤的檢測(cè)采用中斷的方式,能夠提高系統(tǒng)的立即性和高效性。當(dāng)同時(shí)有數(shù)個(gè)病床呼叫時(shí),本系統(tǒng)還可以循環(huán)呼叫記錄顯示。
關(guān)鍵詞:病房呼叫 單片機(jī) 中斷 液晶顯示
34
目錄
1設(shè)計(jì)任務(wù)及要求分析 1
1.1 設(shè)計(jì)任務(wù) 1
1.2 任務(wù)要求分析 1
2 系統(tǒng)設(shè)計(jì)和方案選擇 2
2.1 設(shè)計(jì)思路 2
2.2 鍵盤采集方案選擇 2
2.3設(shè)計(jì)芯片的選擇 3
3病床呼叫系統(tǒng)硬件電路設(shè)計(jì) 4
3.1單片機(jī)控制系統(tǒng)硬件設(shè)計(jì) 4
3.2液晶顯示的硬件設(shè)計(jì) 4
3.3掃描鍵盤的硬件設(shè)計(jì) 5
3.4時(shí)鐘芯片的硬件設(shè)計(jì) 6
3.4中斷電路設(shè)計(jì) 6
4病房呼叫系統(tǒng)軟件設(shè)計(jì) 7
4.1主程序設(shè)計(jì) 7
4.2矩陣鍵盤的中斷程序的設(shè)計(jì) 8
4.3液晶LCD12864驅(qū)動(dòng)程序的設(shè)計(jì) 10
4.4實(shí)時(shí)時(shí)鐘DS1302驅(qū)動(dòng)程序的設(shè)計(jì) 11
5仿真結(jié)果及分析 12
5.1 無病人呼救時(shí)的仿真結(jié)果 12
5.2 有病人呼救時(shí)的仿真結(jié)果 12
5.3 有多個(gè)病人呼救時(shí)的仿真結(jié)果 12
6心得體會(huì) 14
參考文獻(xiàn) 15
附錄1系統(tǒng)原理圖 16
附錄2程序源代碼 17
1設(shè)計(jì)任務(wù)及要求分析
近年來,隨著人們生活水平的不斷提高,人們對(duì)醫(yī)療水平的要求也不斷提高,特別是突發(fā)情況下病人請(qǐng)求值班醫(yī)生或護(hù)士進(jìn)行及時(shí)診斷或護(hù)理,這一環(huán)節(jié)對(duì)提高醫(yī)院的管理服務(wù)質(zhì)量顯得尤其重要,這同時(shí)也大大提高了醫(yī)院醫(yī)護(hù)人員應(yīng)對(duì)突發(fā)事件的能力。因此,一種新型臨床呼叫儀器的研制成為近些年來的研究熱點(diǎn)之一。呼叫系統(tǒng)的優(yōu)劣直接關(guān)系到病員的安危,歷來受到各大醫(yī)院的普遍重視。它要求及時(shí)、準(zhǔn)確、可靠、簡(jiǎn)便可行、利于推廣。利用電力線載波通信技術(shù)、單片機(jī)多機(jī)通信和計(jì)算機(jī)監(jiān)控管理技術(shù)設(shè)計(jì)的具有呼叫、振鈴、顯示排隊(duì)、優(yōu)先權(quán)設(shè)定、存儲(chǔ)記錄等功能的病床呼叫系統(tǒng),滿足了醫(yī)院的病房管理和護(hù)理要求。
1.1 設(shè)計(jì)任務(wù)
本病床呼叫系統(tǒng)中,使用3X8矩陣開關(guān)分別模擬醫(yī)院病房與病床位數(shù),當(dāng)某開關(guān)按下時(shí),系統(tǒng)顯示呼叫的病房與病床、呼叫的時(shí)間。處理完畢可清除該呼叫顯示記錄。當(dāng)同時(shí)有數(shù)個(gè)病床呼叫時(shí),本系統(tǒng)還可以循環(huán)呼叫記錄顯示。
1.2 任務(wù)要求分析
通過對(duì)上述設(shè)計(jì)任務(wù)的分析,可以將之細(xì)分為以下幾點(diǎn),最后的調(diào)試也將以下面各點(diǎn)為依據(jù)。
①當(dāng)有病人按下按鍵時(shí),液晶顯示器上顯示病人的病房號(hào),病床號(hào),以及按鍵時(shí)的時(shí)間。
②在護(hù)士按下清零鍵后,液晶顯示器上內(nèi)容恢復(fù)到初始狀態(tài)。
③若在護(hù)士按下清零鍵前有多個(gè)病人按鍵,則液晶顯示器上將循環(huán)顯示各個(gè)病人的信息,直到護(hù)士按下清零鍵后,液晶顯示器上內(nèi)容恢復(fù)到初始狀態(tài)。
2 系統(tǒng)設(shè)計(jì)和方案選擇
2.1 設(shè)計(jì)思路
根據(jù)設(shè)計(jì)要求,該病床呼叫系統(tǒng)利用C51單片機(jī)作為核心,外接3X8矩陣鍵盤,每一個(gè)鍵對(duì)應(yīng)著不同的床位。在沒有病人呼叫時(shí),單片機(jī)循環(huán)等待按鍵按下;當(dāng)病人按下床頭對(duì)應(yīng)的按鍵,產(chǎn)生中斷信號(hào)。單片機(jī)收到中斷信號(hào)后調(diào)用中斷服務(wù)程序識(shí)別出呼叫病床的病房號(hào)碼和床位號(hào)碼,同時(shí)記錄當(dāng)時(shí)系統(tǒng)的時(shí)間,將呼叫記錄通過LCD12864顯示出來,護(hù)士通過讀取屏幕上提示的呼叫信息即可快速的、正確的查出病人的床位,并做相應(yīng)的準(zhǔn)備以及時(shí)處理,處理完成后,按下清除按鈕,即可清除本次呼叫記錄,等待下次呼叫,同時(shí)液晶屏幕上再次顯示“一切正常”。其結(jié)構(gòu)圖如下:
單
片
機(jī)
鍵盤
液晶顯示
實(shí)時(shí)時(shí)鐘芯片
圖2.1 病床呼叫系統(tǒng)結(jié)構(gòu)圖
2.2 鍵盤采集方案選擇
鍵盤的工作方式應(yīng)該根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU的工作狀況而定其選取的原則是既要保
證CPU能及時(shí)響應(yīng)按鍵操作又不要過多占用CPU的工作時(shí)間。通常鍵盤的工作方式有三種即編程掃描、定時(shí)掃描和中斷掃描。
1編程掃描方式
編程掃描方式是利用CPU完成其他工作的空余時(shí)間調(diào)用鍵盤掃描子程序來檢驗(yàn)按鍵態(tài)響應(yīng)鍵盤輸入。執(zhí)行鍵功能程序時(shí)CPU不再享有鍵輸入要求直到CPU重新掃描鍵盤為止。
2定時(shí)掃描方式
定時(shí)掃描方式就是每隔一段時(shí)間對(duì)鍵盤掃描一次她利用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生一定時(shí)間如20ms的定時(shí)定時(shí)時(shí)間到產(chǎn)生定時(shí)器溢出中斷。CPU在中斷服務(wù)程序中鍵盤進(jìn)行掃描并在有鍵按下時(shí)識(shí)別出該鍵并保存鍵號(hào)然后在中斷服務(wù)程序或主程序中執(zhí)行該鍵的功能程序。
3中斷掃描方式
中斷掃描方式就是當(dāng)按鍵有按下時(shí),產(chǎn)生中斷信號(hào),CPU收到中斷信號(hào)后就執(zhí)行相應(yīng)的中斷服務(wù)子程序響應(yīng)該按鍵,處理完后CPU又開始循環(huán)等待下一次按鍵按下。
當(dāng)采用前兩種鍵盤描方式時(shí),無論是否有鍵按下CPU都要定時(shí)掃描鍵盤而單片機(jī)應(yīng)用系統(tǒng)工作時(shí)并非經(jīng)常需要鍵盤輸入。因此CPU經(jīng)常處于空掃描狀態(tài),浪費(fèi)CPU大量時(shí)間。CPU不掃描鍵盤而有鍵按下時(shí)通過相應(yīng)電路產(chǎn)生中斷請(qǐng)求,CPU響應(yīng)中斷,執(zhí)行鍵盤掃描子程序并識(shí)別鍵號(hào)。
所以本設(shè)計(jì)中采用中斷掃描方式采集鍵盤信息。
2.3設(shè)計(jì)芯片的選擇
C51單片機(jī):
單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的CPU、RAM、ROM、多路I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器等功能集成到一塊芯片上的一個(gè)小系統(tǒng),通過編寫程序下載到單片機(jī)的程序存儲(chǔ)器以實(shí)現(xiàn)不同的功能。
液晶顯示器LCD12864:
相對(duì)于數(shù)碼管、LED二極管點(diǎn)陣等,液晶顯示具有可以實(shí)現(xiàn)漢字的顯示,硬件電路連接比較簡(jiǎn)單等優(yōu)點(diǎn)。
3病床呼叫系統(tǒng)硬件電路設(shè)計(jì)
3.1單片機(jī)控制系統(tǒng)硬件設(shè)計(jì)
單片機(jī)控制系統(tǒng)功能是:鍵盤數(shù)據(jù)采集并保留采集結(jié)果、控制液晶顯示設(shè)計(jì)要求的內(nèi)容、讀取實(shí)時(shí)時(shí)間,并作適當(dāng)?shù)臄?shù)據(jù)處理。
該控制系統(tǒng)中單片機(jī)AT89C51的P0,P1,P2及P3.0,P3.1接口作普通I/O使用,其中P0口作為L(zhǎng)CD12864的數(shù)據(jù)傳輸口,P2.0~P2.5口的作為其控制端口,P2.6、P2.7、P3.0以及P1口為鍵盤的行列口,P3.0作為清除按鍵的數(shù)據(jù)輸入口。P3.2作為外部中斷信號(hào)輸入口。P3部分口與時(shí)鐘芯片DS1302相連實(shí)現(xiàn)時(shí)間的通信。具體電路圖顯示如圖3.1所示。
圖3.1 單片機(jī)控制系統(tǒng)電路圖
3.2液晶顯示的硬件設(shè)計(jì)
液晶顯示的功能包括:沒有病人呼叫時(shí),顯示“一切正?!?;當(dāng)有病人呼叫時(shí),顯示病人的具體位置和呼叫的時(shí)間、日期。
通用型LCD12864共有18個(gè)引腳,其中DB7~DB0是連接控制器的數(shù)據(jù)總線,其他的引腳中6根控制線,另外還有電源線,具體連接見圖3.2。
其中上拉電阻是由于P0口作普通口時(shí)內(nèi)部沒有上拉電阻。
圖3.2液晶LCD12864電路圖
3.3掃描鍵盤的硬件設(shè)計(jì)
鍵盤輸入的功能:每個(gè)按鍵對(duì)應(yīng)著一張病床,由3X8矩陣鍵盤組成。
該矩陣鍵盤的總共需要11個(gè)接口,其中列分別與單片機(jī)P2.6、P2.7、P3.0口相接,行占用了整個(gè)P1口。具體連接如圖3.3所示。
圖3.3 3X8矩陣鍵盤
3.4時(shí)鐘芯片的硬件設(shè)計(jì)
時(shí)鐘芯片DS1302有兩個(gè)電源引腳,VCC1和VCC2,其中VCC1是主電源,VCC2是備份電源。當(dāng)VCC2>VCC1+0.2V時(shí),由VCC2向DS1302供電,當(dāng)VCC2
#include
#define uint unsigned int
#define uchar unsigned char
#define LCD_databus P0
uchar room_num,bed_num,n,y,r,s,f,m,t=0;
uchar num[10][2],time[10][6];
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar keyscan();
sbit RS=P2^4; //RS為0命令,為1數(shù)據(jù)
sbit RW=P2^5; //RW為1寫,為0讀
sbit EN=P2^2; //使能端
sbit CS1=P2^0; //片選1低電平有效,控制左半屏
sbit CS2=P2^1; //片選2低電平有效,控制右半屏
sbit L1=P2^6;
sbit L2=P2^7;
sbit L3=P3^0;
sbit IO=P3^7;
sbit SCLK=P3^6;
sbit RST=P3^5;
sbit CLEAR=P3^1;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
uchar code ZK[]={
/*-- 文字: 病 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x10,0x60,0x00,0xFC,0x04,0x24,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x04,0x00,
0x84,0x42,0x31,0x0F,0x00,0xFF,0x11,0x09,0x05,0x03,0x05,0x59,0x81,0x7F,0x00,0x00,
/*-- 文字: 床 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0x00,0xFC,0x04,0x44,0x44,0x44,0x45,0xF6,0x44,0x44,0x44,0x44,0x44,0x04,0x00,
0x40,0x30,0x0F,0x20,0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x08,0x10,0x20,0x20,0x00,
/*-- 文字: 房 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0x25,0x66,0xA4,0x24,0x24,0x24,0x24,0x3C,0x00,0x00,
0x40,0x30,0x0F,0x81,0x41,0x31,0x0F,0x09,0x09,0x09,0x49,0x89,0x79,0x01,0x00,0x00,
/*-- 文字: 時(shí) --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,
0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,
/*-- 文字: 間 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0xF8,0x01,0x06,0x00,0xF0,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x1F,0x11,0x11,0x11,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 日 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,
/*-- 文字: 期 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00,
/*-- 文字: 號(hào) --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x80,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x44,0x84,0x44,0x3C,0x00,0x00,0x00,0x00,
/*-- 文字: 一 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 切 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x40,0x40,0x40,0xFF,0x20,0x20,0x20,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x00,0x00,0x00,0x1F,0x08,0x84,0x42,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,
/*-- 文字: 正 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
/*-- 文字: 常 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x20,0x18,0x08,0xEA,0xAC,0xA8,0xA8,0xAF,0xA8,0xA8,0xAC,0xEA,0x08,0x28,0x18,0x00,
0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00,
};
uchar code SK[]={
/*-- 文字: 0 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字: 3 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 4 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-- 文字: 5 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 6 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 7 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 9 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-- 文字: : --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
/*-- 時(shí)間號(hào): : --*/
/*-- 宋體12;此符號(hào)下對(duì)應(yīng)的點(diǎn)陣為: 寬x高=8x16 --*/
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
/*-- 文字: - --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
void read_busy() //讀忙函數(shù),數(shù)據(jù)線最高位為DB7為1則busy
{
P0=0x00;RS=0;RW=1;EN=1;
while(P0&0x80);EN=0;
}
void write_LCD_command(uchar value)
{
read_busy();
RS=0;RW=0;
LCD_databus=value;
EN=1;
_nop_();
_nop_();
EN=0;
}
void write_LCD_data(uchar value)
{
read_busy();
RS=1;RW=0;
LCD_databus=value;
EN=1;
_nop_();
_nop_();
EN=0;
}
void set_page(uchar page)
{
page=page|0xb8;
write_LCD_command(page);
}
void set_line(uchar startline)
{
startline=0xc0|startline;
write_LCD_command(startline);
}
void set_column(uchar column)
{
column=column&0x3f;
column=0x40|column;
write_LCD_command(column);
}
void setonoff(uchar onoff)
{
onoff=0x3e|onoff;
write_LCD_command(onoff);
}
void selectscreen(uchar screen)
{
switch(screen)
{
case 0: CS1=0;CS2=0;break;
case 1:CS1=0;CS2=1; break;
case 2:CS1=1;CS2=0;break;
default:break;
}
}
void clearscreen(uchar screen)
{
uchar i,j;
selectscreen(screen);
for(i=0;i<8;i++)
{
set_page(i);
set_column(0);
for(j=0;j<64;j++)
{
write_LCD_data(0x00);
}
}
}
void init_LCD()
{
read_busy();
selectscreen(0);
setonoff(0);
selectscreen(0);
setonoff(1);
selectscreen(0);
clearscreen(0);
set_line(0);
}
void display(uchar ss,uchar page,uchar column,uchar p)
{
uint i;
selectscreen(ss);
set_page(page);
set_column(column);
for(i=0;i<16;i++)
{
write_LCD_data(ZK[i+p*32]);
}
set_page(page+1);
set_column(column);
for(i=0;i<16;i++)
{
write_LCD_data(ZK[i+16+p*32]);
}
}
void display1(uchar ss,uchar page,uchar column,uchar p)
{
uint i;
selectscreen(ss);
set_page(page);
set_column(column);
for(i=0;i<8;i++)
{
write_LCD_data(SK[i+p*16]);
}
set_page(page+1);
set_column(column);
for(i=0;i<8;i++)
{
write_LCD_data(SK[i+8+p*16]);
}
}
void write_byte1302(uchar dat)
{
uchar kk;
ACC=dat;
RST=1;
for(kk=8;kk>0;kk--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar read_byte1302()
{
uchar kk;
RST=1;
for(kk=8;kk>0;kk--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
return ACC;
}
void write_1302(uchar add,uchar dat)
{
RST=0;SCLK=0;RST=1;
write_byte1302(add);
write_byte1302(dat);
SCLK=1;RST=0;
}
uchar read_1302(uchar add)
{
uchar temp;
RST=0;SCLK=0;RST=1;
write_byte1302(add);
temp=read_byte1302();
SCLK=1;RST=0;
return(temp/16*10+temp%16); //返回十進(jìn)制數(shù)據(jù)顯示
}
void init1302()
{
RST=0;
SCLK=0;
write_1302(0x80,0x00);
}
void key_display(uchar aa)
{
m=time[aa][0];
f=time[aa][1];
s=time[aa][2];
r=time[aa][3];
y=time[aa][4];
n=time[aa][5];
RST=0;
clearscreen(0);
display(1,0,0*16,0); //病
display(1,0,1*16,2); //房
display1(1,0,2*16,11); // 冒號(hào)
display1(2,0,0*16,num[aa][0]); //房號(hào) 數(shù)
display(2,0,1*16,7); //號(hào)
display(1,2,0*16,0); //病
display(1,2,1*16,1); //床
display1(1,2,2*16,11); //冒號(hào)
display1(2,2,0*16,num[aa][1]); //床號(hào)數(shù)
display(2,2,1*16,7); //號(hào)
display(1,4,0*16,3); //時(shí)
display(1,4,1*16,4); //間
display1(1,4,2*16,11); //冒號(hào)
display1(2,4,24,10);
display1(2,4,0,10); //時(shí)間符
display1(2,4,32,m/10);
display1(2,4,40,m%10);
display1(2,4,16,f%10);
display1(2,4,8,f/10);
display1(1,4,48,s/10);
display1(1,4,56,s%10); //時(shí)分秒的顯示
display(1,6,0*16,5);
display(1,6,1*16,6);
display1(1,6,2*16,11);
display1(1,6,40,2);
display1(1,6,48,0);
display1(1,6,56,n/10);
display1(2,6,0,n%10);
display1(2,6,16,y/10);
display1(2,6,24,y%10);
display1(2,6,40,r/10);
display1(2,6,48,r%10);
display1(2,6,32,12);
display1(2,6,8,12);
}
void clear_display()
{
t=0;
clearscreen(0);
display(1,2,2*16,8);
display(1,2,3*16,9);
display(2,2,0*16,10);
display(2,2,1*16,11);
}
void main()
{
uchar i;
init_LCD();
init1302();
set_line(0);
clear_display();
EA=1;
EX0=1;
INT0=1;
P1=0x00;
L1=L2=L3=1;
while(1)
for(i=0;i
收藏