课设项目十:智能手电筒(使用金沙滩51单片机)

00 题目介绍

功能:

硬件设置: 使用51单片机连接光敏传感器、LED灯和手电筒开关按钮。

环境感知: 实时监测周围光照强度。

LED控制: 根据光照强度自动控制LED灯的开关。

手动控制: 提供手电筒开关按钮,允许用户手动控制LED灯。

节能模式: 在光照充足时,关闭LED以节省能源。

分析:

  • 光敏传感器接口:通过电阻、电容等外围组件将光敏传感器的模拟信号转换为数字信号。

  • LED控制:LED的亮灭状态由STC89C52单片机的P0口控制。

  • 开关按钮:开关按钮连接到KEY13、KEY14,通过检测按钮状态(高/低电平)来切换LED的开关。

  • 电源管理:使用5V给电路供电。

注意:

完整的演示部分和代码硬件部分,需要等我课设结束后再公开

 如果需要技术支持也可以加我QQ:

2796920378

01演示部分

智能手电筒(使用金沙滩51单片机)

02硬件部分

  • STC89C52单片机:负责处理所有控制逻辑和与传感器、LED、按钮的接口。
  • 光敏传感器:用于检测环境的光照强度,连接到STC89C52的P2.1引脚。可以选择一种常见的光敏电阻(LDR)与运算放大器组合来实现模拟信号的转换。

光敏模块

使用原理说明
1、光敏电阻模块对环境光线敏感,一般用来检测周围环境的光线的亮度,触
发单片机或继电器模块等;
2、模块在环境光线亮度达不到设定阈值时,D0端输出高电平,当外界环境光
线亮度超过设定阈值时,DO端输出低电平;
3、DO输出端可以与单片机直接相连,通过单片机来检测高低电平,出有由此
来检测环境的光线亮度改变;
4、面DO输出端可以直接驱动本店继电器模块,由此可以组成一个光控开关;
5、小板模拟量输出A0可以和AD模块相连,通过AD转换,可以获得环境光强
更准确的数值。
43d3ffdb2ce843d581f2c1d8c71de7f7.png

感光亮灯,且为低电平

故可以感光输入低电平,从而关闭手电筒

  • LED灯:用于显示手电筒的开关状态,连接到STC89C52的P0口
  • 开关按钮:用于手动控制LED灯的开关。

03 软件代码

1.初始化设备:

连接51单片机、光敏传感器、LED灯和手电筒开关按钮。设置传感器和执行器的驱动和接口。

 ENLED = 0;
    ADDR3 = 1;
    ADDR2 = 1;//以下110使能S6,从而使LED灯能够被打开
    ADDR1 = 1;
    ADDR0 = 0;
		KEYOUT = 0;
	  Series = 1;

2.环境感知和数据处理:

实时监测周围光照强度数据,通过光敏传感器获取。对传感器数据进行处理,确保准确感知环境光照情况。

  • 在主循环中,首先检测光照强度(读取光敏传感器数字量)。
  • 判断光照强度。如果光照强度低于设定阈值,开启LED;如果光照强度高于阈值,关闭LED。
  • 通过检测按钮状态,允许用户手动控制LED灯。如果按钮被按下,则切换LED的状态。
  • 节能模式下,如果光照强度充足,则关闭LED灯。
void Read_LDR(void)
{
	if( sign == 2)
		{
			if(	(ldr_value==0xff )&&(Series == 1) )
			{
				ldr_value=0x00;
			}
			else if(	(ldr_value==0x00 )&&(Series == 0) )
			{
				ldr_value=0xff;
			}
		}

}

感光亮灯,且为低电平

3.LED控制系统:

4f4e104cbf6e45c98b988f333480a50e.png

根据光照强度数据设计LED灯的自动控制算法。实现自动开关LED灯以适应环境光照。

按键输入的方式好像有点问题,不知为何,最后我采取了外部中断

void Control_LED( )
{
   if ( sign == 2)
			{
				P0 = ldr_value;
			}
			if ( sign == 1)
			{
				P0 = LED;
			}
			if ( sign == 0)
			{
				P0 = ~LED;
			}
}

4.手动控制系统:

提供手电筒开关按钮,允许用户手动控制LED灯的开关状态。在手动模式下,用户的操作优先级高于自动控制。

button_status=Key_GetNum( );
			if (button_status==1)
			{
				BUZZ_Play();
				sign++;
				if ( sign>=3 )
				{
					sign=0;
			
				}
			}
			else if (button_status==2)
			{
				BUZZ_Play();
				sign--;
				if ( sign<0 )
				{
					sign=2;
				}
			}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值