一.硬件方案
本设计硬件部分,中央处理器采用了STC89C52RC单片机,另外使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进行转化成数字信号,还有显示部分采用了LCD1602液晶,还增加按键部分电路,可以选择手自动切换远近光灯,最后还是用了超声模块进行检测距离;电路主要由51单片机+LCD1602液晶+光敏电阻+超声波+ADC0832+LED灯而成;
二.设计功能
(1)按键说明:从左边第一个起,减键、加键、设置键。单独一个控制为复位按键。
(2)LCD1602液晶第一行显示超声波的距离,第二行显示光线的强弱。
(3)可以设定超声波和光敏的下限值,并具有掉电保存功能,数据保存在STC单片机的内部。
(4)用光敏传感器测光线亮度,低于设置值时自动开启灯光。
(5)用超声波测距离,低于设置值时自动将远光灯变成近光灯,大于设置值时又会自动变换成远光
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
四.软件设计
主程序源码
void main()
{
interrupt_int(); //调用定时器初始化函数
LCD1602_cls(); //调用1602初始化函数
read_memory(); //调用读存储
init_measuring(); //调用超声波相应端口初始化
while(1)
{
display(); //显示函数
if(ir_ok)
{
ir_ok=0;
trigger(); //触发超声波启动
while(echo==0) //等待回声&&TH0<200
{
;
}
measuring(); //进行距离测量
init_measuring(); //超声波相应端口初始化
}
if(memory_flag) //如果存储标志位是1
{
memory_flag=0; //清0,
memory(); //执行一次存储函数
}
if(A_M) //如果是自动状态
{
led1=0; //自动模式指示灯点亮
led2=1;
police(); //执行自动处理函数
}
else //否则
{
led2=0; //手动指示灯点亮
led1=1;
}
AD_dispose(); //调用AD处理函数
switch(beam) //根据beam的值,切换远近光灯状态
{
case 0:LED_1=1;LED_2=1;break; //关闭
case 1:LED_1=1;LED_2=0;break; //近光
case 2:LED_1=0;LED_2=1;break; //远光
}
}
}
资料链接:https://pan.baidu.com/s/166xg2gqZ_BO0MFfXqFvpDQ?pwd=o5fv