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

一、系统方案
设计一个可容8张床位的病房呼叫系统。要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮,此时护士值班室内的呼叫系统板上显示该患者的床位号,并蜂鸣器报警。当护士按下“响应”键时,结束当前呼叫。
操作视频BIBIBI:https://www.bilibili.com/video/BV1kN4y127f8/
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbxyliyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值