Multisim仿真:单片机实现病房呼叫系统

1.设计任务与要求

  1. 使用两套优先级:同一个病人有两个按钮“急救”和“呼叫”。“急救”的优先级大于“呼叫”。同一种按钮下,病人的优先级排序为“病人0,病人1,病人2,病人3”。
  2. 病房内拥有4个病人。
  3. 输入信号可以声光显示。当按下任何一种按钮时,相应病人的灯光亮起。当该病人的“急救”按钮按下时,蜂鸣器报警响起。
  4. 输入信号拥有防误触功能。当同时按下两个自锁按钮时,将不会有任何输入。
  5. 拥有输出:按照优先级进行静态数码管的显示。

 原理图

 其中:U22、U24、U26、U28为七位显示译码芯片CD4511;U4为51单片机      

3单片机U4内的程序:

#include<8051.h>
#define u32 unsigned int

void delay()
{
	int i=0;
	for(i=0;i<20;i++);
}

u32 get_num()
{
	u32 sum = 0, carry = 1;
	if (P17 == 0)
	{
		sum = sum + 4 * carry;
		carry *= 10;
	}
	if (P15 == 0)
	{
		sum = sum + 3 * carry;
		carry *= 10;
	}
	if (P13 == 0)
	{
		sum = sum + 2 * carry;
		carry *= 10;
	}
	if (P11 == 0)
	{
		sum = sum + 1 * carry;
		carry *= 10;
	}
	if (P16 == 0)
	{
		sum = sum + 4 * carry;
		carry *= 10;
	}
	if (P14 == 0)
	{
		sum = sum + 3 * carry;
		carry *= 10;
	}
	if (P12 == 0)
	{
		sum = sum + 2 * carry;
		carry *= 10;
	}
	if (P10 == 0)
	{
		sum = sum + 1 * carry;
		carry *= 10;
	}
	return sum;
}

void show_seg(u32 a)
{
	u32 fir=a/1000;
	u32 sec=(a%1000)/100;
	u32 thi=(a%100)/10;
	u32 fou=a%10;
	//first bit show
	if(fir==0)
	{
		P00=0;
	}
	else
	{
		P00=1;
		P20=(fir-1)%2;
		P21=(fir-1)/2;
	}
	//second bit show
	if(sec==0)
	{
		P01=0;
	}
	else
	{
		P01=1;
		P22=(sec-1)%2;
		P23=(sec-1)/2;
	}
	//third bit show
	if(thi==0)
	{
		P02=0;
	}
	else
	{
		P02=1;
		P24=(thi-1)%2;
		P25=(thi-1)/2;
	}
	//fourth bit show
	if(fou==0)
	{
		P03=0;
	}
	else
	{
		P03=1;
		P26=(fou-1)%2;
		P27=(fou-1)/2;
	}
}

void main()
{
	int a=0;
	while(1)
	{
		a=get_num();
		show_seg(a);
	}

}

4仿真结果

图中,2号病人叫了急救,0、1号病人叫了呼叫。最终显示“2、0、1”。达到预期功能。

图中,病人0同时按下了两个按钮,触发防误触功能。此时不显示0号病人的呼救,达到预期功能。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值