基于51单片机的智能路灯照明控制系统proteus仿真原理图程序设计

硬件设计

链接:https://pan.baidu.com/s/1Sl6u_BGjrjMKFC8JS90O-A
提取码:67xo

仿真文件1: 功能如下图所示
在这里插入图片描述
原理图
在这里插入图片描述

仿真文件2:
在这里插入图片描述

在这里插入图片描述

程序设计

				   /******定义头文件**************/
#include<reg52.h> 
#include <INTRINS.H> 
#include"lcd.h"
#include "ds1302.h"
/******类型重定义*************/
typedef unsigned char uchar;
typedef unsigned int  uint;
/******引脚定义***************/
sbit key_1 = P1^0;			//定义4个按键
sbit key_2 = P1^1;
sbit key_3 = P1^2;
sbit key_4 = P1^3;
sbit key_5=P3^0;//手动/自动模式切换
sbit key_6=P3^1;//手动模式路灯开关

sbit led_1 = P1^4;
sbit Beep = P2^3;					//定义声光报警
sbit AD_clk = P3^4;					//定义ADC0832 		
sbit AD_do = P3^5; 
sbit AD_di = P3^5;
sbit AD_cs = P3^6; 
sbit red_sr = P3^7;					//红外检测

/******定义变量***************/
char hour,min,sec;						//定义小时、分钟、秒变量
char time;
char work_time_Start = 16,work_time_End = 5;		//设定起始、结束时间
bit light_flag; 
uchar light;							//定义光照强度
uchar light_limit;						//定义光照阈值
uchar Data;
/******声明函数***************/
void delayms(unsigned int x);			//延时函数
void display();	 						//显示
void Read_time();
void set_work_time();					//设定工作时间
void set_limit_light();					//设定光照阈值
void work();							//工作状态
void set_time();						//设定时间
void delay10ms(int d);
void InitTimer0(void);					//T0定时器初始化程序
uchar AD(bit Channel);					//ADC0832程序

void kongzhi()
{
	if(key_6==0)
{
	led_1=1;
}
else
	{
		led_1=0;
	}
}

 void qiehaun()
 {
 	if(key_5==0)
{
	kongzhi();
}
else
	{
	work();
//		if(red_sr==1)
//	{
//	led_1=1;
//	}
//	if(red_sr==0)
//	{
//	led_1=0;
//	}
}
}
void main()
{
	Beep = led_1 = 0;					//声光报警,LED关闭
	InitTimer0();						//T0定时器初始化程序
	LcdInit();							//lcd1602初始化
	while(1)
	{
		Ds1302ReadTime();				//读取时间
		set_work_time();				//设定工作时间
		set_limit_light();				//设定光照阈值
		set_time();
		light = AD(0);					//读取ADC0832数值 					
		display();					 	//显示
		qiehaun();
//		work();							//工作状态
	}
}
void Timer0Interrupt(void) interrupt 1
{
	static uchar count;
    TH0 = 0x0D8;
    TL0 = 0x0F0;
	count ++;
	if(count>=100)
	{
		time ++;
		count = 0;
    }
	//add your code here
}
/*******************************************************************************
* 函数名         : InitTimer0()
* 函数功能		 : T0定时器初始化程序
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0D8;
    TL0 = 0x0F0;
    EA = 0;
    ET0 = 1;
    TR0 = 1;
}
/*******************************************************************************
* 函数名         : work()
* 函数功能		 : 工作状态
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void work()
{
	Read_time();					//转换时间
	if(work_time_End!=0 && work_time_Start!=0)			//工作时间已设置
	{
		if(hour >= work_time_Start)						//当前时间大于起始时间,如起始时间为19:00,当前时间为21:00。
		{
			Data = AD(1);
			led_1 = 1;									//点亮LED
			if(Data < 50)								//未检测到LED点亮
				Beep = 1;								//声光报警
			else										//检测到Led点亮
				Beep = 0;								//停止报警
		}
		else if(hour < work_time_End) 	//当前时间小于结束时间,如结束时间为06:00,当前时间为04:00。
		{
			if(red_sr)					//检测到人或车
			{
				time = 0;
				light_flag = 1;			//LED标志置1,开始T0定时器计时,点亮LED,10s后LED标志清零,LED熄灭
			}
			if(light_flag)					//LED标志置1,检测到人或车
			{
				led_1 = 1;					//点亮LED
				EA = 1;						//开启中断
				if(time > 10)				//10s后
				{
					light_flag = 0;			//LED标志清零
					EA = 0;				   	//关中断
					time = 0;			 	//计时清零
				}
				Data = AD(1);
				if(Data < 50)				//未检测到LED点亮
					Beep = 1;				//声光报警
				else						//检测到Led点亮
					Beep = 0;				//停止报警		
   			}
			else
				led_1 = 0;
		}
		else
		{
			if(light < light_limit)
			{
				led_1 = 1;
				Data = AD(1);
				if(Data < 50)								//未检测到LED点亮
					Beep = 1;								//声光报警
				else										//检测到Led点亮
					Beep = 0;								//停止报警
			}
			else
				led_1 = Beep = 0;
		}
	}		
}
/*******************************************************************************
* 函数名         : set_work_time()
* 函数功能		 : 设定工作时间
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

.

文件仅供参考

.

  • 47
    点赞
  • 338
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值