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转换,可以获得环境光强
更准确的数值。
感光亮灯,且为低电平
故可以感光输入低电平,从而关闭手电筒
- 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控制系统:
根据光照强度数据设计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;
}
}