基于单片机超声波视力保护器

一、系统方案

本设计采用51单片机作为主控器,超声波检测距离,当光照小于设置阀值的台灯打开,测量距离小于设置值,蜂鸣器报警,液晶1602显示。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化:
beep = 0; //开机叫一声
delay_1ms(150);
P0 = P1 = P2 = P3 = 0xff; //初始化单片机IO口为高电平
init_1602();
time_init(); //定时器初始化程序
init_eeprom(); //开始初始化保存的数据
write_string(1,0," JL: m gx: “);
write_string(2,0,” : : ");
2、液晶显示程序
/********************************************************************

  • 名称 : write_com(uchar com)
  • 功能 : 1602命令函数
  • 输入 : 输入的命令值
  • 输出 : 无
    ***********************************************************************/
    void write_com(uchar com)
    {
    e=0;
    rs=0;
    rw=0;
    P0=com;
    delay_uint(3);
    e=1;
    delay_uint(25);
    e=0;
    }

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

  • 名称 : write_data(uchar dat)
  • 功能 : 1602写数据函数
  • 输入 : 需要写入1602的数据
  • 输出 : 无
    ***********************************************************************/
    void write_data(uchar dat)
    {
    e=0;
    rs=1;
    rw=0;
    P0=dat;
    delay_uint(3);
    e=1;
    delay_uint(25);
    e=0;
    }

3、按键检测程序
uchar key_can;
/***独立按键程序/
void key()
{

key_can = 20;

if(s1==0)				//减按键按下	  
{
	delay_1ms(5);//延时消除按键抖动
	if(s1==0)	//减按键按下		 
	{
		while(!s1);//  等待按键释放
		key_can = 1; 
	}
 }

 
 if(s2==0)		// 加按键按下	,后面都同上,就不注释了		 
{
	delay_1ms(5);
	if(s2==0)			 
	{
			while(!s2);
			key_can = 2; 
							
	}
 }
if(s3==0)			//选择按键按下		  
{
	delay_1ms(5);
	if(s3==0)			
	{
			while(!s3);
			key_can = 3; 
	}
 }

}

4、核心算法程序

/报警函数******/
void clock_beep()
{
static uchar value1,value2,value3;

if((guangxian >= qiang_gx) || (guangxian <= ruo_gx))  //光线报警
{																																	   
	value2++;
	if(value2>= 2)		  //循环2次都是报警  增强抗干扰
	{
		flag_gx = 1;      //光线报警  
	}		
}
else 
{
	value2 = 0;	
	flag_gx = 0;
}

/******************************************************************************/
if(xuexi_start == 1) //已经开始学习了
{
if(distance <= set_d) //距离报警
{
value1 ++;
if(value1 >= 2) //循环2次都是报警 增强抗干扰
{
flag_juli = 1;
}
}else
{
value1 = 0;
flag_juli = 0;
}
if((shi == s_shi) && (fen == s_fen) && (miao == 0)) //时间报警
{
flag_time = 1;
}
}
if(flag_time == 1) //时间提示报警
{
value3 ++;
if(value3 % 4 == 0)
{
for(i=0;i<6;i++)
{
beep = ~beep; //蜂鸣器报警
delay_1ms(100);
}
beep = 1;
}
if(value3 >= 4000 )
{
value3 = 0 ;
flag_time = 0;
}
}
else
{
if(xuexi_start == 1) //已经开始学习了
{
if((flag_gx == 1) || (flag_juli == 1))
{
beep = ~beep; //报警
}
}
}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bbxyliyang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值