当前位置:文档之家› 8 床位的病人无线呼叫器

8 床位的病人无线呼叫器

医院住院病人呼叫器的设计(1)设计一个8 床位的无线呼叫器,供医院住院病人(或静脉点滴病人)呼叫医护人员时使用;(2)病人可通过按动自己床边的按钮,向医护人员发出呼叫信号;(3)当有病人呼叫信号时,医护人员值班室设置的显示器可显示出该病人的床位编号,同时扬声器发出声音信号,提示值班的医护人员。

程序:#include<reg52.h> //大力学习倡导规范的模块化程序设计#define uint unsigned int#define uchar unsigned char#defineN 100#defineb 1sbit SCE=P0^0;sbit RST=P0^1;sbit DC=P0^2;sbit DIN=P0^3;sbit SCLK=P0^4;sbit ALARM=P0^7;bitsituation=0,wa1=0,wa2=0,wa3=0,wa4=0,wa5=0,wa6=0,wa7=0,wa8=0; uchar key1=0;uint second=0;uint i;char code Letter[26][6]={{0x00,0x24,0x54,0x54,0x78,0x40},//a 0{0x00,0x01,0x7F,0x44,0x44,0x38},//b 1{0x00,0x38,0x44,0x44,0x4C,0x00},//c 2{0x00,0x38,0x44,0x45,0x7F,0x40},//d 3{0x00,0x38,0x54,0x54,0x58,0x00},//e 4{0x00,0x48,0x7E,0x49,0x09,0x00},//f 5{0x00,0x74,0xAA,0xAA,0xA6,0x40},//g 6{0x41,0x7F,0x48,0x08,0x70,0x40},//h 7{0x00,0x48,0x7A,0x40,0x00,0x00},//i 8{0x00,0x40,0x88,0x7A,0x00,0x00},//j 9{0x42,0x7E,0x50,0x28,0x44,0x00},//k 10{0x00,0x00,0x42,0x7E,0x40,0x00},//l 11{0x04,0x7C,0x04,0x7C,0x04,0x78},//m 12{0x44,0x7C,0x44,0x04,0x78,0x40},//n 13{0x00,0x38,0x44,0x44,0x38,0x00},//o 14{0x00,0x84,0xFC,0xA4,0x24,0x18},//p 15{0x00,0x18,0x24,0xA4,0xFC,0x80},//q 16{0x00,0x44,0x7C,0x48,0x04,0x04},//r 17{0x00,0x48,0x54,0x54,0x24,0x00},//s 18{0x00,0x04,0x3E,0x44,0x20,0x00},//t 19{0x04,0x3C,0x40,0x44,0x7C,0x40},//u 20{0x04,0x1C,0x60,0x30,0x0C,0x04},//v 21{0x00,0x0C,0x70,0x1C,0x70,0x0C},//w 22{0x00,0x44,0x6C,0x10,0x6C,0x44},//x 23{0x84,0x9C,0x60,0x10,0x0C,0x04},//y 24{0x00,0x64,0x54,0x4C,0x44,0x00},//z 25};char code Number[10][6]={{0x00,0x7C,0x82,0x82,0x7C,0x00}, //0 小二字6*7{0x00,0x00,0x84,0xFE,0x80,0x00}, //1{0x00,0xC4,0xA2,0x92,0x8C,0x00}, //2{0x00,0x44,0x92,0x92,0x6C,0x00}, //3{0x00,0x30,0x28,0x24,0xFE,0x20}, //4{0x00,0x4E,0x8A,0x8A,0x72,0x00}, //5{0x00,0x7C,0x92,0x92,0x64,0x00}, //6{0x00,0x02,0xF2,0x0A,0x06,0x00}, //7{0x00,0x6C,0x92,0x92,0x6C,0x00}, //8{0x00,0x4C,0x92,0x92,0x7C,0x00} //9};static void delay(uint z){uint x, y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void lcd5110_write_byte(uchar dat,uchar model) //向5110写入一个字节model=1写数据model=0写命令{uchar i;SCE=0;DC=model;for(i=0;i<8;i++){if(dat&0x80) DIN=1;else DIN=0;dat=dat<<1;SCLK=0;SCLK=1;}DC=1;SCE=1;DIN=1;}void lcd5110_write_point(uchar *dat,uint n) //向5110写入指定一维数组的n个字节{uchar i;SCE=0;DC=1;for(i=0;i<n;i++){delay(2);lcd5110_write_byte(*(dat+i),1);}}void lcd5110_write_point2(uchar *dat,uint n) //向5110写入指定的二维数组,这个二维数组的每个元素都是一个n个数字的一维数组{uchar i;DC=1;for(i=0;i<n;i++){delay(2);lcd5110_write_byte(*(dat+i),1);}}void lcd5110_write_address(uchar x,uchar y) //设置5110写数据的指针x指列《1-->84》y指行《1-->6》{uchar add_y=0x40,add_x=0x80;lcd5110_write_byte(0x20,0);x-=1;y-=1;add_x+=x;add_y+=y;lcd5110_write_byte(add_y,0);lcd5110_write_byte(add_x,0);}void lcd5110_init(void){RST=1; //复位可有可无/*===============================使用扩展指令==================================================== ============*/lcd5110_write_byte(0x21,0); /*功能设置“0010 0pdVH”pd=0 芯片工作V=0 DDRAM水平寻址H=0 使用基本指令pd=1 芯片处于掉电模式V=1 DDRAM垂直寻址H=1 使用扩展指令*/lcd5110_write_byte(0x04,0);//-->《0x04-->0x07》温度控制(类似与亮度度反比)“0000 01T1T2”对应着相应的温度系数lcd5110_write_byte(0x10,0);//-->《0x10-->0x17》设置偏置系统(类似与对比度反比)“0001 0 BS2 BS1 BS0”lcd5110_write_byte(0xC0,0);//-->《0x80-->0xff》写V op 到寄存器“1 V op6 V op5 V op4 V op3 V op2 V op1 V op0”/*===============================使用基本指令==================================================== ============*/lcd5110_write_byte(0x20,0);lcd5110_write_byte(0x0c,0); //《0x08》00显示空白设置显示配置“0000 1D0E”//《0x0c》10普通模式//《0x09》01开所有显示段//《0x0d》11反转印象模式lcd5110_write_byte(0x40,0); //《0x40-->0x45》6 设置RAM Y的地址“0100 0 Y2 Y1 Y0”第几行开始写lcd5110_write_byte(0x80,0); //《0x00-->0x53》84 设置RAM X的地址“1X6X5X4 X3X2X1X0”第几列开始写}void timer_init(){TMOD=0X01;TL1=0XFf;TH1=0Xdf;TR1=1;ET1=1;EA=1;}key_scan(){ uchar temp,num;/********************************************************** **************/P2=0xfe; //扫描第一行temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xfe){temp=P2;switch(temp){case 0xee:num=1; break;case 0xde:num=2; break;case 0xbe:num=3; break;}} temp=0xf0;}P2=0xfd; //扫描第二行temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P2;temp=temp&0xf0;if(temp!=0xfd){temp=P2;switch(temp){case 0xed:num=4; break;case 0xdd:num=5; break;case 0xbd:num=6; break;}} temp=0xf0;}P2=0xfb; //扫描第三行temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P2;temp=temp&0xf0;if(temp!=0xfb){temp=P2;switch(temp){case 0xeb:num=7; break;case 0xdb:num=8; break;case 0xbb:num=9; break;}} temp=0xf0;}return num;}void blank_space(){lcd5110_write_byte(0x00,1); //空格lcd5110_write_byte(0x00,1);lcd5110_write_byte(0x00,1);lcd5110_write_byte(0x00,1);}void emergency(){blank_space();blank_space();blank_space();blank_space();blank_space();blank_space();blank_space();blank_space();}void write_ward(){lcd5110_write_point2(Letter[22],6); //ward lcd5110_write_point2(Letter[0],6);lcd5110_write_point2(Letter[17],6);lcd5110_write_point2(Letter[3],6);}void title(){if(situation==0){lcd5110_write_address(4,1);blank_space();lcd5110_write_point2(Letter[0],6); //alllcd5110_write_point2(Letter[11],6);lcd5110_write_point2(Letter[11],6);blank_space();lcd5110_write_point2(Letter[13],6); //normallcd5110_write_point2(Letter[14],6);lcd5110_write_point2(Letter[17],6);lcd5110_write_point2(Letter[12],6);lcd5110_write_point2(Letter[0],6);lcd5110_write_point2(Letter[11],6);blank_space(); blank_space(); blank_space();}else{ lcd5110_write_address(1,6);lcd5110_write_point2(Letter[18],6); //soslcd5110_write_point2(Letter[14],6);lcd5110_write_point2(Letter[18],6);lcd5110_write_byte(0xa0,1);lcd5110_write_address(4,1);blank_space();write_ward();blank_space();lcd5110_write_point2(Letter[2],6); //callinglcd5110_write_point2(Letter[0],6);lcd5110_write_point2(Letter[11],6);lcd5110_write_point2(Letter[11],6);lcd5110_write_point2(Letter[8],6);lcd5110_write_point2(Letter[13],6);lcd5110_write_point2(Letter[6],6);if(wa1==1){lcd5110_write_address(22,6);lcd5110_write_point2(Number[1],6);}if(wa2==1){lcd5110_write_address(28,6);lcd5110_write_point2(Number[2],6);}if(wa3==1){lcd5110_write_address(34,6);lcd5110_write_point2(Number[3],6);}if(wa4==1){lcd5110_write_address(40,6);lcd5110_write_point2(Number[4],6);}if(wa5==1){lcd5110_write_address(46,6);lcd5110_write_point2(Number[5],6);}if(wa6==1){lcd5110_write_address(52,6);lcd5110_write_point2(Number[6],6);}if(wa7==1){lcd5110_write_address(58,6);lcd5110_write_point2(Number[7],6);}if(wa8==1){lcd5110_write_address(64,6);lcd5110_write_point2(Number[8],6);}}}void ward1(){lcd5110_write_address(4,2);if(situation==1&wa1==1&second>0&second<200)emergency();else{write_ward();lcd5110_write_point2(Number[1],6); //显示ward1}}void ward2(){lcd5110_write_address(4,3);if(situation==1&wa2==1&second>200&second<400)emergency();else{write_ward();lcd5110_write_point2(Number[2],6); //显示ward2}}void ward3(){lcd5110_write_address(4,4);if(situation==1&wa3==1&second>0&second<200)emergency();else{write_ward();lcd5110_write_point2(Number[3],6); //显示ward3 }void ward4(){lcd5110_write_address(4,5);if(situation==1&wa4==1&second>200&second<400) emergency();else{write_ward();lcd5110_write_point2(Number[4],6); //显示ward4}}void ward5(){lcd5110_write_address(44,2);if(situation==1&wa5==1&second>200&second<400) emergency();else{write_ward();lcd5110_write_point2(Number[5],6); //显示ward5 }void ward6(){lcd5110_write_address(44,3);if(situation==1&wa6==1&second>0&second<200) emergency();else{write_ward();lcd5110_write_point2(Number[6],6); //显示ward6}}void ward7(){lcd5110_write_address(44,4);if(situation==1&wa7==1&second>200&second<400) emergency();else{write_ward();lcd5110_write_point2(Number[7],6); //显示ward7}}void ward8()lcd5110_write_address(44,5);if(situation==1&wa8==1&second>0&second<200) emergency();else{write_ward(); lcd5110_write_point2(Number[8],6); //显示ward8}}void state()//病情{if(key1==1) wa1=1;else if(key1==2)wa2=1;else if(key1==3)wa3=1;else if(key1==4)wa4=1;else if(key1==5)wa5=1;else if(key1==6)wa6=1;else if(key1==7)wa7=1;else if(key1==8)wa8=1;}void genxin(){ uint i;lcd5110_write_address(1,6);for(i=40;i--;i>1)blank_space();}void main(){timer_init(); //定时器初始化lcd5110_init();genxin();ALARM=1;while(1){if(key1!=0){ if(second>200) ALARM=0;if(second<200) ALARM=1;situation=1;state();}else situation=0;title();ward1();ward2();ward3();ward4();ward5();ward6();ward7();ward8();}}void timer1_int() interrupt 3 { second++;if(second==400)second=0;TL1=0XFf;TH1=0Xdf;key1=key_scan();}// all normal 病房一切正常// Ward1 Ward5// Ward2 Ward6// Ward3 Ward7// Ward4 Ward8//Ward calling 病房呼叫。

相关主题