找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 441|回复: 1
打印 上一主题 下一主题
收起左侧

单片机AVR单片机病房控制系统设计+源程序

[复制链接]
跳转到指定楼层
楼主
一、系统方案
设计一个可容8张床位的病房呼叫系统。要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮,此时护士值班室内的呼叫系统板上显示该患者的床位号,并蜂鸣器报警。当护士按下“响应”键时,结束当前呼叫。


二、硬件设计
原理图如下:

三、单片机软件设计
1、首先是系统初始化
//LCD端口初始化
void LCDPort_Init(void)
{   
     LCD_BUS = 0XFF;
         LCD_BUS_Direction_REG =0XFF;   //LCD数据端口设置为输出
        
         LCD_ControlPort_SET;          //RS RW EN脚均设置为输出        
          LCD_ControlPort_CLR;          //RW RW EN低电平
}
//LCD写指令
void Write_Com(unsigned char LCD_Com)
{
  
        
         RS_CLR; //RS=0,写指令
         RW_CLR; //RW=0,写命令
         EN_SET; //E=1,写操作        
         LCD_BUS=LCD_Com;    //数据送往数据端口?
         _delay_ms(1);    //这个延时非常重要,结合时序图来理解,可以跟送数据顺序调换
         EN_CLR;// E=0,下角
     _delay_ms(1);  
}
2、液晶显示程序
//LCD端口初始化
void LCDPort_Init(void)
{   
     LCD_BUS = 0XFF;
         LCD_BUS_Direction_REG =0XFF;   //LCD数据端口设置为输出
        
         LCD_ControlPort_SET;          //RS RW EN脚均设置为输出        
          LCD_ControlPort_CLR;          //RW RW EN低电平
}
//LCD写指令
void Write_Com(unsigned char LCD_Com)
{
  
        
         RS_CLR; //RS=0,写指令
         RW_CLR; //RW=0,写命令
         EN_SET; //E=1,写操作        
         LCD_BUS=LCD_Com;    //数据送往数据端口?
         _delay_ms(1);    //这个延时非常重要,结合时序图来理解,可以跟送数据顺序调换
         EN_CLR;// E=0,下角
     _delay_ms(1);  
}
3、按键程序
//按键处理函数
void key_with(void)
{
        uchar i;
        if(key_can <= 8)
        {
                if(key_can == 1)
                L1_0 ;          //1号病房灯亮
        if(key_can == 2)
                L2_0 ;          //2号病房灯亮
                if(key_can == 3)
                L3_0 ;          //3号病房灯亮
                if(key_can == 4)
                L4_0;          //4号病房灯亮
     if(key_can == 5)
        L5_0 ;          //5号病房灯亮
        if(key_can == 6)
        L6_0 ;          //6号病房灯亮
        if(key_can == 7)
        L7_0 ;          //7号病房灯亮
}
4、核心算法程序
void  main(void)
{
        unsigned char key =1;
        LCDPort_Init();
    LCD_Init();
         DDRB=0x7F;
    PORTB=0xff;
   DDRC=0xFF;
    PORTC=0xff;
    DDRD=0x00;
    PORTD=0xff;
    DDRA=0xFF;
    PORTA=0xff;
        write_string(1,0,Timer_buf);               
        write_string(2,0," wu bingrenhujiao");           
           
        while(1)
        {
            Timer_buf[13] = br_geshu%10+47;
                                   
         write_string(1,0,Timer_buf); //写显示
                if(br_geshu > 1)
                                BEEP_0 ;   //蜂鸣器报警
                else
                                        BEEP_1;       //取消报警
       key_with();
           if((PIND&0x01)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x01)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x01)!=0X01); // 判断手松开
                     key_can = 1;
                   }               
                }
                  if((PIND&0x02)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x02)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x02)!=0X02); // 判断手松开
                     key_can = 2;
                   }               
                }
                  if((PIND&0x04)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x04)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x04)!=0X04); // 判断手松开
                     key_can = 3;
                   }               
                }
      if((PIND&0x08)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x08)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x08)!=0X08); // 判断手松开
                     key_can = 4;
                   }               
                }
                  if((PIND&0x10)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x10)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x10)!=0X10); // 判断手松开
                     key_can = 5;
                   }               
                }
                  if((PIND&0x20)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x20)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x20)!=0X20); // 判断手松开
                     key_can = 6;
                   }               
                }
                  if((PIND&0x40)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x40)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x40)!=0X40); // 判断手松开
                     key_can = 7;
                   }               
                }
                  if((PIND&0x80)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PIND&0x80)==0x00)   // 确定按键依然1按下     
                   {
                     while((PIND&0x80)!=0X80); // 判断手松开
                     key_can = 8;
                   }               
                }  
                if((PINB&0x80)==0x00)    // 按键1按下         
           {
                  _delay_ms(10);  // 延时消抖
                   if((PINB&0x80)==0x00)   // 确定按键依然1按下     
                   {
                     while((PINB&0x80)!=0X80); // 判断手松开
                     key_can = 9;
                   }               
                }  
        }
}

四、  proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2023-12-10 19:26 | 只看该作者
你这个不实用,要采用二线制,所有呼叫器并联在双线
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表