《基于單片機的病床呼叫系統(tǒng)設計》由會員分享,可在線閱讀,更多相關《基于單片機的病床呼叫系統(tǒng)設計(38頁珍藏版)》請在裝配圖網(wǎng)上搜索。
基于單片機的病床呼叫系統(tǒng)設計
摘要
病房呼叫系統(tǒng)是傳送臨床信息的重要手段,可將病人的請求快速傳送給值班醫(yī)生或護士,它主要用于協(xié)助醫(yī)院病員在病床上方便地呼叫醫(yī)務人員,是提高醫(yī)院和病室護理水平的必備設備之一。讓患者需要服務時,只要按一下隨身攜帶的呼叫器,信息立馬就能傳至護工處.避免沒有看護人在時,病人急需服務卻無法通知醫(yī)生的情況.它要求及時、準確、可靠、簡便可行。
本設計的呼叫系統(tǒng)由按鍵檢測,數(shù)據(jù)處理,信息顯示三部分組成。由C51單片機作為主要控制器,利用液晶顯示器作為顯示部分,使用3X8矩陣開關分別模擬醫(yī)院病房與病床位數(shù)。病人按下按鍵時,C51立即獲取病人的病房號和病床號,同時采集此時的時間并一起顯示在液晶顯示器上,當護士看到顯示器上病人的信息,并按下清零鍵后,液晶顯示器恢復到初始狀態(tài)。本系統(tǒng)對鍵盤的檢測采用中斷的方式,能夠提高系統(tǒng)的立即性和高效性。當同時有數(shù)個病床呼叫時,本系統(tǒng)還可以循環(huán)呼叫記錄顯示。
關鍵詞:病房呼叫 單片機 中斷 液晶顯示
Design of hospital bed call system based on single chip microcomputer
Summary
Ward call system is an important means to transfer the clinical information, the patients request can be quickly transmitted to the doctor or nurse on duty, it is mainly used to assist the hospital easily call the medical staff in a hospital bed, is one of the necessary equipment to improve the level of nursing and hospital ward. Let the patient need service, just click the thecarry pager information can spread to the workers. Immediately without caregivers when patients needed services cannot tell the doctor. It requires timely, accurate and reliable, simple and feasible.
The design of the call system by the key detection, data processing, information display three parts. C51 microcontroller as the main controller, the use of liquid crystal display as the display part, the use of 3X8 matrix switch to simulate the hospital ward and hospital beds. When the press button is pressed, the C51 immediately gets the patients ward number and the bed number, while the time is collected and displayed on the LCD monitor, when the nurse sees the patients information and press the reset button, the LCD screen is returned to its initial state. This system can improve the immediate and efficiency of the system by using the interrupt mode. When there are a number of hospital beds call, the system can also be a circular call records show.
Key words: ward call, SCM, interrupt, liquid crystal display
16
目錄
前言 I
第1章 緒論 3
1.1課題概述 3
1.2智能病床呼叫系統(tǒng)發(fā)展概況 3
1.3課題研究的目的和意義 3
1.4 設計任務 4
1.5 任務要求分析 4
第2章 系統(tǒng)設計和方案選擇 5
2.1 設計思路 5
2.2 鍵盤采集方案選擇 5
2.3設計芯片的選擇 6
第3章系統(tǒng)硬件電路設計 7
3.1單片機控制系統(tǒng)硬件設計 7
3.2液晶顯示的硬件設計 7
3.3掃描鍵盤的硬件設計 8
3.4時鐘芯片的硬件設計 9
3.4中斷電路設計 9
第4章系統(tǒng)軟件設計 10
4.1主程序設計 10
4.2矩陣鍵盤的中斷程序的設計 11
4.3液晶LCD12864驅動程序的設計 13
4.4實時時鐘DS1302驅動程序的設計 14
第5章仿真結果及分析 15
5.1 無病人呼救時的仿真結果 15
5.2 有病人呼救時的仿真結果 15
5.3 有多個病人呼救時的仿真結果 16
結論 17
謝辭 18
參考文獻 1
附錄1系統(tǒng)原理圖 2
附錄2程序源代碼 3
第1章 緒論
1.1課題概述
在這個瞬息萬變,競爭激烈的時代,選擇一個優(yōu)越的工具往往能提升企業(yè)在這個市場上的競爭力。尤其醫(yī)院的競爭越來越激烈,商業(yè)醫(yī)院的生存是第一位,提升檔次和服務質量迫在眉睫,陪護問題一直是醫(yī)患矛盾的主體,也是長期困擾衛(wèi)生系統(tǒng)服務質量的大問題,使用病房呼叫系統(tǒng),方便病人更快找到醫(yī)生,以節(jié)約病人的寶貴時間。 病房呼叫系統(tǒng)是一種應用于醫(yī)院病房、養(yǎng)老院等地方,用來聯(lián)系溝通醫(yī)護人員和病員的專用呼叫系統(tǒng),是提高醫(yī)院護理水平的必備設備。以前當病人需要服務時就不得不親自到值班室去叫。安裝該呼叫系統(tǒng)后,在病人與護士之間架起一座及時溝通的橋梁,可在減少護理人員的同時,保證病人隨時能夠得到服務,讓每個病人及時得到最佳護理。 病房呼叫系統(tǒng)的優(yōu)劣直接關系到病員的安危,歷來受到各大醫(yī)院的普遍重視。它要求及時、準確可靠、簡便可行、利于推廣。利用單片機的通訊功能,設計出具有振鈴、顯示房號等功能的多功能病床呼叫系統(tǒng),滿足了醫(yī)院的病房管理和護理的要求。
1.2智能病床呼叫系統(tǒng)發(fā)展概況
呼叫系統(tǒng)發(fā)展到今天,從應用層面可以說已經(jīng)進入到商業(yè)化運營階段。國內許多的呼叫中心其服務模式,已經(jīng)從單純的客戶服務向服務與經(jīng)營的混合型模式轉變。這首先是呼叫市場需求的結果,也是呼叫技術及管理發(fā)展的必然結果。信息時代的醫(yī)院管理已經(jīng)從傳統(tǒng)的人管模式,向智能化,電子化,信息化,網(wǎng)絡化得高科技管理模式的方向迅速發(fā)展,“病房呼叫系統(tǒng)”可實現(xiàn)醫(yī)院病房的智能化管理,可實現(xiàn)呼叫,報警,信息儲存,顯示等功能。為醫(yī)院和患者都帶來方便。 在中國,約在30000個醫(yī)院中僅 30 %的醫(yī)院擁有自己的信息管理系統(tǒng);擁有前端電話接入系統(tǒng)的醫(yī)院就更少了。目前市場上存在著許多種型號不一功能各異的醫(yī)院病房呼叫系統(tǒng),主要為兩大類:有線式和無線式。傳統(tǒng)的有線式病房呼叫系統(tǒng)往往采用集中式結構,電源線、數(shù)據(jù)通信線、語音通信線分開傳輸,具有鋪設線路較多、成本高、安裝調試困難、實時性差、故障率較高等缺點。無線式病房呼叫系統(tǒng)可靠性差,而且無線電波會干擾其它醫(yī)療儀器設備,目前大多數(shù)醫(yī)院不采用無線呼叫系統(tǒng)。
1.3課題研究的目的和意義
智能病床呼叫是傳送病床信息的重要手段,病床呼叫系統(tǒng)可將病人的請求快遞傳送給值班醫(yī)生和護士。呼叫系統(tǒng)的優(yōu)劣直接關系到病人的安危,歷來受到各大醫(yī)院的普遍重視。它要求及時、準確、可靠、簡便可行、利于推廣。單片機多機通信和計算機監(jiān)控管理技術的具有呼叫、振鈴、顯示 等功能的病床呼叫系統(tǒng),基本滿足了醫(yī)院的病房護理要求。
1.4 設計任務
本病床呼叫系統(tǒng)中,使用3X8矩陣開關分別模擬醫(yī)院病房與病床位數(shù),當某開關按下時,系統(tǒng)顯示呼叫的病房與病床、呼叫的時間。處理完畢可清除該呼叫顯示記錄。當同時有數(shù)個病床呼叫時,本系統(tǒng)還可以循環(huán)呼叫記錄顯示。
1.5 任務要求分析
通過對上述設計任務的分析,可以將之細分為以下幾點,最后的調試也將以下面各點為依據(jù)。
①當有病人按下按鍵時,液晶顯示器上顯示病人的病房號,病床號,以及按鍵時的時間。
②在護士按下清零鍵后,液晶顯示器上內容恢復到初始狀態(tài)。
③若在護士按下清零鍵前有多個病人按鍵,則液晶顯示器上將循環(huán)顯示各個病人的信息,直到護士按下清零鍵后,液晶顯示器上內容恢復到初始狀態(tài)。
第2章 系統(tǒng)設計和方案選擇
2.1 設計思路
根據(jù)設計要求,該病床呼叫系統(tǒng)利用C51單片機作為核心,外接3X8矩陣鍵盤,每一個鍵對應著不同的床位。在沒有病人呼叫時,單片機循環(huán)等待按鍵按下;當病人按下床頭對應的按鍵,產生中斷信號。單片機收到中斷信號后調用中斷服務程序識別出呼叫病床的病房號碼和床位號碼,同時記錄當時系統(tǒng)的時間,將呼叫記錄通過LCD12864顯示出來,護士通過讀取屏幕上提示的呼叫信息即可快速的、正確的查出病人的床位,并做相應的準備以及時處理,處理完成后,按下清除按鈕,即可清除本次呼叫記錄,等待下次呼叫,同時液晶屏幕上再次顯示“一切正?!薄F浣Y構圖如下:
單
片
機
鍵盤
液晶顯示
實時時鐘芯片
圖2.1 病床呼叫系統(tǒng)結構圖
2.2 鍵盤采集方案選擇
鍵盤的工作方式應該根據(jù)實際應用系統(tǒng)中CPU的工作狀況而定其選取的原則是既要保
證CPU能及時響應按鍵操作又不要過多占用CPU的工作時間。通常鍵盤的工作方式有三種即編程掃描、定時掃描和中斷掃描。
1編程掃描方式
編程掃描方式是利用CPU完成其他工作的空余時間調用鍵盤掃描子程序來檢驗按鍵態(tài)響應鍵盤輸入。執(zhí)行鍵功能程序時CPU不再享有鍵輸入要求直到CPU重新掃描鍵盤為止。
2定時掃描方式
定時掃描方式就是每隔一段時間對鍵盤掃描一次她利用單片機內部的定時器產生一定時間如20ms的定時定時時間到產生定時器溢出中斷。CPU在中斷服務程序中鍵盤進行掃描并在有鍵按下時識別出該鍵并保存鍵號然后在中斷服務程序或主程序中執(zhí)行該鍵的功能程序。
3中斷掃描方式
中斷掃描方式就是當按鍵有按下時,產生中斷信號,CPU收到中斷信號后就執(zhí)行相應的中斷服務子程序響應該按鍵,處理完后CPU又開始循環(huán)等待下一次按鍵按下。
當采用前兩種鍵盤描方式時,無論是否有鍵按下CPU都要定時掃描鍵盤而單片機應用系統(tǒng)工作時并非經(jīng)常需要鍵盤輸入。因此CPU經(jīng)常處于空掃描狀態(tài),浪費CPU大量時間。CPU不掃描鍵盤而有鍵按下時通過相應電路產生中斷請求,CPU響應中斷,執(zhí)行鍵盤掃描子程序并識別鍵號。
所以本設計中采用中斷掃描方式采集鍵盤信息。
2.3設計芯片的選擇
C51單片機
單片機是一種集成電路芯片,是采用超大規(guī)模集成電路技術把具有數(shù)據(jù)處理能力的CPU、RAM、ROM、多路I/O口和中斷系統(tǒng)、定時器/計數(shù)器等功能集成到一塊芯片上的一個小系統(tǒng),通過編寫程序下載到單片機的程序存儲器以實現(xiàn)不同的功能。
液晶顯示器LCD12864
相對于數(shù)碼管、LED二極管點陣等,液晶顯示具有可以實現(xiàn)漢字的顯示,硬件電路連接比較簡單等優(yōu)點。
第3章系統(tǒng)硬件電路設計
3.1單片機控制系統(tǒng)硬件設計
單片機控制系統(tǒng)功能是:鍵盤數(shù)據(jù)采集并保留采集結果、控制液晶顯示設計要求的內容、讀取實時時間,并作適當?shù)臄?shù)據(jù)處理。
該控制系統(tǒng)中單片機AT89C51的P0,P1,P2及P3.0,P3.1接口作普通I/O使用,其中P0口作為LCD12864的數(shù)據(jù)傳輸口,P2.0~P2.5口的作為其控制端口,P2.6、P2.7、P3.0以及P1口為鍵盤的行列口,P3.0作為清除按鍵的數(shù)據(jù)輸入口。P3.2作為外部中斷信號輸入口。P3部分口與時鐘芯片DS1302相連實現(xiàn)時間的通信。具體電路圖顯示如圖3.1所示。
圖3.1 單片機控制系統(tǒng)電路圖
3.2液晶顯示的硬件設計
液晶顯示的功能包括:沒有病人呼叫時,顯示“一切正?!保划斢胁∪撕艚袝r,顯示病人的具體位置和呼叫的時間、日期。
通用型LCD12864共有18個引腳,其中DB7~DB0是連接控制器的數(shù)據(jù)總線,其他的引腳中6根控制線,另外還有電源線,具體連接見圖3.2。
其中上拉電阻是由于P0口作普通口時內部沒有上拉電阻。
圖3.2液晶LCD12864電路圖
3.3掃描鍵盤的硬件設計
鍵盤輸入的功能:每個按鍵對應著一張病床,由3X8矩陣鍵盤組成。
該矩陣鍵盤的總共需要11個接口,其中列分別與單片機P2.6、P2.7、P3.0口相接,行占用了整個P1口。具體連接如圖3.3所示。
圖3.3 3X8矩陣鍵盤
3.4時鐘芯片的硬件設計
時鐘芯片DS1302有兩個電源引腳,VCC1和VCC2,其中VCC1是主電源,VCC2是備份電源。當VCC2>VCC1+0.2V時,由VCC2向DS1302供電,當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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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,
/*-- 文字: 時 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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,
/*-- 文字: 號 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字: 3 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 4 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-- 文字: 5 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 6 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 7 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 9 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-- 文字: : --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
/*-- 時間號: : --*/
/*-- 宋體12;此符號下對應的點陣為: 寬x高=8x16 --*/
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
/*-- 文字: - --*/
/*-- 宋體12; 此字體下對應的點陣為:寬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); //返回十進制數(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); // 冒號
display1(2,0,0*16,num[aa][0]); //房號 數(shù)
display(2,0,1*16,7); //號
display(1,2,0*16,0); //病
display(1,2,1*16,1); //床
display1(1,2,2*16,11); //冒號
display1(2,2,0*16,num[aa][1]); //床號數(shù)
display(2,2,1*16,7); //號
display(1,4,0*16,3); //時
display(1,4,1*16,4); //間
display1(1,4,2*16,11); //冒號
display1(2,4,24,10);
display1(2,4,0,10); //時間符
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); //時分秒的顯示
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();
鏈接地址:http://appdesigncorp.com/p-9529725.html