基于51单片机的无线病床呼叫系统装置 proteus仿真原理图程序设计

附:http://www.jh-tec.cn/archives/7547

硬件设计

方案框图
在这里插入图片描述
原理图:
在这里插入图片描述
仿真图:
在这里插入图片描述

程序设计

流程图
在这里插入图片描述

/*
基于单片机的无线病床呼叫系统

*/
#include <reg52.h>		//头文件
#define uc unsigned char
#define ui unsigned int	  //宏定义

sbit RS=P1^4;	
sbit RW=P1^5;
sbit E=P1^6;			//这3个是1602引脚定义
sbit D0=P1^3;	//上升按键
sbit D1=P1^2;	//下降按键
sbit D2=P1^1;	//模式切换
sbit D3=P1^0;			//光敏识别引脚
sbit bg_1602=P2^6;		//1602背光
sbit key=P3^3;			//应答按键
sbit Beep=P3^4;			//蜂鸣器

uc code tab0[]=" 123456789#";  //显示几号的码表
uc code tab1[]="Calling!!!";   //显示呼叫的码表
uc code tab2[]="I Know!";	   //显示相应的码表
uc code tab3[]="Happy Every Day!"; //显示开心快乐每一天的码表

uc			num_D0=0,num_D1=0,num_D2=0,num_D3=0;	//床号
bit bdata	fu_D0=0, fu_D1=0, fu_D2=0, fu_D3=0,flag;//初始床号

void delay(ui x)		//延时函数
{
	ui i,j;
	for(i=0;i<x;i++)
	for(j=0;j<121;j++);	 //为1ms的延时函数
}

void init()				//初始化函数
{
	bg_1602=0;			//开启背光
	TMOD=0x01;			//定时器0工作方式1
 	TH0=0x4b;
 	TL0=0xff;		  //赋初值
 	EA=1;			   //开总中断
 	ET0=1;			   //定时器中断开
 	TR0=1;			   //定时器0中断开

	D0=0;
	D1=0;
	D2=0;
	D3=0;				//清零床号引脚
}
/******LCD1602******/
void com_1602(uc com)	//写命令
{
	RS=0;
	P0=com;
	delay(1);
	E=1;
	delay(1);
	E=0;
	RS=1;
}

void data_1602(uc date)	//写数据
{
	RS=1;
	P0=date;
	delay(1);
	E=1;
	delay(1);
	E=0;
	RS=0;
}

void dis_1602(uc word_num,uc hang,uc lie,uc tab_num,uc num)
/**word_num:显示字符个数,hang,lie:显示坐标,****
***tab_num:显示数组号,num:从第几字符开始显示****/
{
	uc n;
	for(n=0;n<word_num;n++)
	{
		com_1602(0x80+hang*0x40+lie);
		if(tab_num==0)
			data_1602(tab0[num+n]);
		else if(tab_num==1)
			data_1602(tab1[num+n]);
		else if(tab_num==2)
			data_1602(tab2[num+n]);
		else if(tab_num==3)
			data_1602(tab3[num+n]);
		delay(5);
		lie++;
	}
}
void init_1602()	//初始化1602
{
	RW=0;			//写命令
	com_1602(0x38);//设置1602
	com_1602(0x0c);//设置显示,光标不闪烁
	com_1602(0x06);//不移动,指针加1
	com_1602(0x01);//清屏
}

void know()			//应答函数
{
	if(D0!=fu_D0)
	num_D0=1;
	if(D1!=fu_D1)
	num_D1=2;
	if(D2!=fu_D2)
	num_D2=3;
	if(D3!=fu_D3)
	num_D3=4; 		//数据脚状态改变,将床号赋给变量

	if(key==0)		//检测按键
	{
		delay(5);
		if(key==0)
		{
			if((num_D0!=0)||(num_D1!=0)||(num_D2!=0)||(num_D3!=0))//如果有呼叫时
			{
				bg_1602=0;							//打开背光
				Beep=1;								//关闭蜂鸣器
				flag=0;								//标志位清零
				num_D0=0;num_D1=0;num_D2=0;num_D3=0;
				fu_D0=D0;fu_D1=D1;fu_D2=D2;fu_D3=D3;//将床位清零,并记录当前引脚状态
				com_1602(0x01);						//清屏
				dis_1602(7,1,4,2,0);				//显示I Know 
			}
			else		//如果没有呼叫时
			bg_1602=0;	//只点亮背光
		}
		while(!key);	//按键释放
		delay(2000);
		com_1602(0x01);//清屏
	}
}

void display()		//显示函数
{
	if((num_D0==0)&&(num_D1==0)&&(num_D2==0)&&(num_D3==0))	//当没有床位呼叫时
	dis_1602(16,0,0,3,0);									//显示Happy 
	else							//有床位呼叫时
	{
		if(flag==0)
		{
			flag=1;
			com_1602(0x01);//清屏
		}
		if(num_D0==1)
		{
			dis_1602(1,0,2,0,num_D0);
			dis_1602(1,0,3,0,10);
		}
		if(num_D1==2)
		{
			dis_1602(1,0,5,0,num_D1);
			dis_1602(1,0,6,0,10);
		}
		if(num_D2==3)
		{
			dis_1602(1,0,8,0,num_D2);
			dis_1602(1,0,9,0,10);
		}
		if(num_D3==4)
		{
			dis_1602(1,0,11,0,num_D3);
			dis_1602(1,0,12,0,10);
		}
		dis_1602(10,1,3,1,0);		//在对应床位显示床位号
	}
}

void LED()		//背光函数
{
	if((D0!=fu_D0)||(D1!=fu_D1)||(D2!=fu_D2)||(D3!=fu_D3))	//如果有呼叫
	bg_1602=0;				//打开背光
}	

  • 11
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于51单片机的直流电机测速系统是一种用于测量直流电机转速的系统Proteus是一种虚拟仿真软件,可以用来模拟这个系统的电路和程序。以下是该系统的基本原理和实现步骤: 1. 原理: 通过测量电机转子两个定点之间的时间间隔,可以计算出电机的转速。基于51单片机的直流电机测速系统通过使用光电传感器来检测转子定点,并通过单片机采集和处理传感器信号来计算转速。 2. 硬件设计: 搭建一个电机驱动电路,将电机连接到单片机的引脚上。选择合适的光电传感器连接到单片机的另外一个引脚上,以便检测转子定点。确保电路中有适当的电流限制电阻和电压稳定器,以保护单片机和其他元件。 3. 程序设计: 使用C语言编写单片机程序,用于采集和处理光电传感器的信号。程序的主要任务是计算两个定点之间的时间间隔,并将结果转换为转速值。程序还可以根据需要进行其他功能的扩展,例如显示转速值或进行电机控制。 4. Proteus仿真: 在Proteus中创建一个新的电路设计并添加所需的电子元件和引脚连接。在51单片机引脚上连接电机和光电传感器,并将单片机引脚与相关电路连接。使用Proteus提供的仿真工具验证电路的正确性和性能。 通过上述步骤,基于51单片机的直流电机测速系统仿真和验证就可以完成。在仿真过程中,可以通过改变电机转速和光电传感器的位置来检查系统的功能和稳定性,以确保系统在实际应用中的可靠性。 ### 回答2: 基于51单片机的直流电机测速系统是一种通过使用51单片机控制直流电机并测量其转速的系统。通过Proteus仿真软件可以进行系统的模拟和测试。 首先,需要设计并搭建电路。电路中需要包括直流电机、51单片机、光电传感器等元件。光电传感器可以用来检测直流电机旋转的动作,并将信号传递给51单片机进行处理。 其次,需要编写程序实现对直流电机的控制和测速。在程序中,首先需要初始化51单片机的IO口和定时器,然后使用IO口来控制直流电机的运行,调整电机的转速。在定时器中断函数中,可以采集光电传感器的信号,并根据信号的变化来计算直流电机的转速。可以根据光电传感器每个脉冲所代表的角度来计算电机的转速。 最后,使用Proteus进行仿真和测试。可以在Proteus软件中创建一个仿真环境,并将电路和编写好的程序加载到仿真环境中进行测试。可以通过仿真结果来验证程序的正确性和电路的功能,并进行必要的调整和优化。 基于51单片机的直流电机测速系统可以用于工业自动化、机器人、电动车等领域。通过通过Proteus仿真软件进行模拟测试,可以快速验证系统的功能和性能,并进行必要的优化和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值