148 基于单片机光控智能窗帘控制自动开关系统设计【毕设课设】

本设计由STC89C52单片机电路+按键电路+DS1302时钟电路+DS18B20温度检测电路+光敏电阻检测电路+LCD1602液晶显示电路+蜂鸣器报警电路+ULN2003步进电机驱动电路+电源电路组成。

1、通过按键可以设置窗帘自动模式和手动模式,LCD1602实时显示当前模式。

2、LCD1602实时显示当前时间、当前温度值和温度阈值。如果当前温度超过温度阈值,则蜂鸣器报警。否则,蜂鸣器不报警。

3、LCD1602实时显示当前光照值和光照阈值。光照检测采用滤波算法,即采集五个光照值,对比去掉最大值和最小值,将中间三个值取平均值。

4、在手动模式下,可以通过按键控制步进电机的正反转(正转和反转均为1圈)。

5、在自动模式下,如果当前光照值超过设置的光照阈值(光照阈值设定由可购买者自行设定),则步进电机正转1圈,否则,步进电机反转1圈。

  资料下载地址

https://pan.baidu.com/s/1PZK2iF-4zrzx2yaBV5qWEQ?pwd=8888

void Init_Timer0(void);		 //函数声明
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);
void TIM2Inital(void);

void main(void)
{	
	

	Ds1302_Init();


	Ds1302_Read_Time();//读取时间参数

	sprintf(dis0,"%02d:%02d:%02d %4.1f C ",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6],temperature);//时分秒 温度		
	LCD_Write_String(0,0,dis0);//显示时间及温度
	LCD_Write_Char(13,0,0xdf);//温度符号
		
	uartSendStr("ready ok !",10);
// 	Ds1302_Write_Time();         

	while(1)
	{
		if((key1==0)||(key2==0)||(key3==0)) //检测到按键按下
		{
		 	if(rekey == 0)//防止重复按下
			{
				DelayMs(10); 
				
				
										
			}
		}
		else
		{rekey =0 ;}	//防止重复按下

		if(ReadTempFlag==1)	 //读取温度标志
		{
		    temp1=ReadTemperature();
			temperature=(float)temp1*0.0625;   //温度转换
			if((temperature>1)&&(temperature<84))
			{
			 	disTemp = temperature;	//温度值赋值
			}
		}			 
		if(SetFlag==1)     //如果接收到串口信息则更新时钟
		{
			
			Ds1302_Write_Time();//接收更新的时间然后写入ds1302
			SetFlag=0;          //时钟信息更新后标志位清零
		}
		if(ReadTimeFlag==1) //定时读取ds1302 定时时间到 则标志位置1,处理过时间参数标志位清零
		{
			ReadTimeFlag=0;  //标志位清零
			Ds1302_Read_Time();//读取时间参数	

			
			
			
			if(lighCount >= 5)
			{
				lighCount =0;
				minligh = midLigh[0];  //赋值
				maxligh = midLigh[0];  //赋值
				
			   ligh = ((int)midLigh[0]+(int)midLigh[1]+(int)midLigh[2]+(int)midLigh[3]+(int)midLigh[4]-(int)minligh -(int)maxligh)/3;			
			}
				
			sprintf(dis0,"%02d:%02d:%02d T%4.1f C",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6],disTemp);//时分秒		
			LCD_Write_String(0,0,dis0);//显示时间
			LCD_Write_Char(14,0,0xdf);//温度符号
			if(modeFlag == 0)
			{
				sprintf(dis1,"L%02d  l70-t35-m:Z ",(int)ligh);//显示			
			}
									
			LCD_Write_String(0,1,dis1);//显示时间
			if(disTemp > 35)
			{buzzer = 0;}//打开蜂鸣器
			else
			{buzzer = 1;}//关闭蜂鸣器
			if(modeFlag == 0)
			{
						
			}
		}
	}
}

   资料下载地址

https://pan.baidu.com/s/1PZK2iF-4zrzx2yaBV5qWEQ?pwd=8888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值