基于51单片机的医院病房紧急呼叫系统(无线+语音)(8)

2018-12-27 16:33

LCD_EN = 0 ; _nop_() ; _nop_() ; P0 = cmd ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; }

/*******************************************************************/ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */

/*******************************************************************/ void lcd_wdat(uchar dat)

{ while(lcd_busy()) ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ; P0 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; }

/* LCD初始化设定 */ /*******************************************************************/ void lcd_init() {

delay1(15) ;

lcd_wcmd(0x01) ; //清除LCD的显示内容 lcd_wcmd(0x38) ; //16*2显示,5*7点阵,8位数据 delay1(5) ;

lcd_wcmd(0x38) ; delay1(5) ;

lcd_wcmd(0x38) ; delay1(5) ;

36

lcd_wcmd(0x0c) ; //显示开,关光标 delay1(5) ;

lcd_wcmd(0x06) ; //移动光标 delay1(5) ;

lcd_wcmd(0x01) ; //清除LCD的显示内容 delay1(5) ; }

/* 设定显示位置 */

/*******************************************************************/ void lcd_pos(uchar pos)

{

lcd_wcmd(pos | 0x80) ; //数据指针=80+地址变量 }

///数据位分离

void sbitseparate(uchar a,uchar b,uchar c,uchar d) {

shuju_sbit[0]=a;

shuju_sbit[1]=b/10; //房号 shuju_sbit[2]=b; shuju_sbit[3]=c/10; //次数 shuju_sbit[4]=c; shuju_sbit[5]=d; }

///显示数据

void display(flag) { sbitseparate(shuju[flag][0],shuju[flag][1],shuju[flag][2],shuju[flag][3]);

lcd_pos(0x03) ;

lcd_wdat(shuju_sbit[0]+'0') ; //组号 lcd_pos(0x05) ;

lcd_wdat(shuju_sbit[1]+0x30) ; // 房号 lcd_pos(0x06) ;

lcd_wdat(shuju_sbit[2]+0x30) ; // lcd_pos(0x08) ;

lcd_wdat(shuju_sbit[3]+0x30) ; //呼叫次数 lcd_pos(0x09) ;

lcd_wdat(shuju_sbit[4]+0x30) ; // lcd_pos(0x0B) ;

37

lcd_wdat(shuju_sbit[5]+0x30) ; // 是否应答 }

void fasong() {

Led=0; P2=0x00; EA=0; //保证数据发送完

P2=shuju[flag-1][1]&0x0f; //要是这样就把sendd变为0了,没有电源就不能发送了

sendd=1;

delay10ms(10);//延时100ms sendd=0; EA=1; Led=1; }

//数据初使化 void data_init() {

TCON = 0x00;

IT0=1; //负边沿触发 IE = 0x00; EA=1; EX0=1; flag=1; Led=1; sendd=0;

Ok_Menu (); }

void jieshou_dat() {

uchar a,b,c,d; Led=0; temp=P1&0x0f; delay10ms(50); Led=1;

a=(temp<<3)&0x08; //数据位的第四位和第一位反了,第二位和第三位反了

38

b=(temp<<1)&0x04; c=(temp>>1)&0x02; d=(temp>>3)&0x01; temp=a|b|c|d; }

//************************************** // INT0中断

//************************************** void int00(void) interrupt 0 { EX0=0; jieshou_dat(); data_chuli(); //有信号则进行对信号的处理 // display(flag-1); EX0=1; }

/********************************************** 对于有呼叫的时候对信号的处理

**************************************************/ void data_chuli() {

uchar i,j;

if((0x00==temp)||(0x0f==temp)) //防干扰 goto abc; jieshou=1; if(0==shuju[0][0]) { for(i=1;i<9;i++) shuju[i-1][0]=shuju[i-1][0]+1; } for(i=1;i<8;i++) //i从1到7变化 temp为收到的数据 对了 { if(shuju[i-1][1]==temp) //判断呼叫的地址是否与已有的地址相同 即房号 ////////////////////////////////

39

{ flag=i; //保存地址相同的数组的标号 flag2=1; } } if(flag2==1) //有地址相同就呼叫加一 { shuju[flag-1][2]=shuju[flag-1][2]+1; //呼叫次数加1 shuju[flag-1][3]=0; //对应答进行清零 flag2=0; //标志清零 } else //如果房号没有,数据往后移 { for(i=8;i>1;i--) //数据转移 for(j=1;j<4;j++) shuju[i-1][j]=shuju[i-2][j]; // for(i=1;i<4;i++) //测试用的移入数据,实际用时是传过来的数据(房号) // shuju[1][1]=temp; // 存入房号 flag=1; //当前显示呼叫的病房的信息 shuju[0][1]=temp; //存入房号 ///////////////////////////////////////////////// shuju[0][2]=0x01; //呼叫次数存入1 不用对应答清零,初始化时就是0x00了 } abc: ; }

/*************************************************** // 语音部分的程序 //

**************************************************/

//============================================================ //函数名称:void delay25ms() //函数功能:延迟25ms //日期:2007.03.31

//============================================================ void delay25ms()

40


基于51单片机的医院病房紧急呼叫系统(无线+语音)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011年山西省高中阶段教育学校招生统一考试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: