单片机项目分享:基于51单片机智能台灯智能照明PWM调光视力保护

目录

一、项目成品展示

二、项目介绍

1、功能介绍

2、硬件组成

三、原理图、PCB设计

四、程序设计

五、项目实物

六、资料内容

项目分享


一、项目成品展示

项目成品图片展示:

哔哩哔哩视频链接:

基于51单片机智能台灯智能照明PWM调光视力保护

基于51单片机智能台灯智能照明PWM调光视力保护

(项目分享在哔哩哔哩主页)

二、项目介绍

1、功能介绍

2、硬件组成

三、原理图、PCB设计

原理图 PCB展示:

四、程序设计

void main()
{
	uchar ret=0;
	P0 = P1 = P2 = P3 = 0xff;	//
	ret=Get_AD_Result();		// 获取AD采集结果(环境光照强度)
	AutoControl(ret);			// 上电先进行一次自动亮度控制	
	AutoControl(ret+7);
	DS1302_Init();
//	DS1302_SetTime();
	Init_ultrasonic_wave();// 超声波引脚初始化
	StartModule();//启动超声波 (上电控制一次)
	while(!RX)	  //当RX为零时等待
	TR1=1;		  //开启计数
	while(RX);	  //当RX为1计数并等待
	TR1=0;		  //关闭计数
	Conut(); //计算距离
	LCD_Init();//lcd1602
	TimerInit(); 					// 定时器初始化
	while(1)
	{  
		key_can=Key();	 //按键扫描
		key_with();
		if(model)  //手动操作
		{
			switch (Selected)
			{
				case 0:
						LCD_ShowString(1,13,"Manu");
					break;
				case 1:
					//距离阈值调节
						LCD_ShowString(1,5,"distance");
						LCD_ShowString(2,10,"cm");
						LCD_ShowNum(2, 7, distance_L,3);
					break;
				case 2:
					//当前时间
						Set_Time(NowTime,DS1302_Time);
					break;
				case 3:
					//闹钟时间
						Set_Time(Clock_Time,ClockTime);
					break;
				case 4:
					//手动控制灯光
						ManualControl();	
					break;
				case 5:
					//灯灭时间设置
						LCD_ShowString(1,4,"Light_Time");
						LCD_ShowNum(2,7,count/1000,3);
				    LCD_ShowString(2,10,"s");
					break;
			}
		}
		else
		{
			LCD_ShowString(1,13,"Auto");
		 if(flag_500ms)
		 {
			 flag_500ms=0;
			if(gTime<count) //有人在的情况才控制光照
			{
				ret= Get_AD_Result();//获取AD采集结果(环境光照强度)
				AutoControl(ret);			//自动亮度控制	
			}
		}
			/*检测是否有人*/
			if(Module==0)
			{
				 gTime=0;								// 检测到有人,则把60秒计时清零
				 LCD_ShowString(1,9,"R:Y");
			}
			else
			{
				LCD_ShowString(1,9,"R:N"); 
			}				                    
					
			if(gTime>count)								// 如果gTime的值超过了设定时间(60s时间可设置)
			{
				gTime=count;							// 则把gTime的值重新赋值为60s,避免过大溢出
				gIndex=0;								// 如果1分钟检测不到有人,则把台灯熄灭
			}
			LCD_ShowString(1,1,"G:");
			LCD_ShowString(1,6,"Lx");
			LCD_ShowString(2,15,"D");
			LCD_ShowNum(1, 3, ret,3);
			LCD_ShowNum(2, 16, gIndex,1);

			DS1302_ReadTime();//读取时间; 
			ds1302_display();   //显示时钟
			if(DS1302_Time[3]==ClockTime[3] && DS1302_Time[4]==ClockTime[4] && DS1302_Time[5]==ClockTime[5]) //定时时间到提醒
				 Clock_alarm=1; 
			if(Clock_alarm)
				 Buzzer_Time(500);//报警标志1分钟,按键4可取消
			
			StartModule();//启动超声波
			while(!RX)	  //当RX为零时等待
			TR1=1;		  //开启计数
			while(RX);	  //当RX为1计数并等待
			TR1=0;		  //关闭计数
			Conut(); //计算距离
			Delay(50);
			if(L_ < distance_L) //测量距离小于阈值							 
				Buzzer_Time(100);	
			
			LCD_ShowNum(2, 10, L_,3);
		}
	}
}

五、项目实物

六、资料内容

项目分享

项目分享在哔哩哔哩主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值