基于51单片机的蓝牙智能台灯设计

基于51单片机的蓝牙智能台灯设计

(程序+原理图+设计报告)

功能介绍

具体功能:

1、当人靠近时,灯亮起,如果人靠得太近,蜂鸣器会发出警报,一段时间后如果没有人,灯会自动熄灭;

2、当人离开时,灯会熄灭;

3、通过手机蓝牙可以控制灯的开关和亮度。发送“1”、“2”命令可以使灯在“较亮”、“很亮”之间切换,发送“C”命令可以让灯灭掉。

#include "sysdefine.h"
//#include <string.h>

#define LOW 	1
#define HIGH	3
#define PWM_XZ  HIGH
unsigned long times_20ms=0;	
unsigned char pwm_val=HIGH;
unsigned long times_pwm=0;
unsigned int HotW_numC=0;
unsigned int HotW_numO=0;
unsigned char Led_crl=FALSE;
unsigned int Juli_num=0;
unsigned char JuLi1_crl=FALSE;

extern bit ack;

void main (void)
{
	unsigned char num=0;
	Init_Timer0();        //定时器0初始化
	UART_Init();

	DelayMs(50);          //延时有助于稳定
	SendStr_U("system start!\r\n",15);
	Deng_led=1;
	while(1)         //主循环
	{
		if(HotW_key==1)
		{
			DelayMs(20);
			if(HotW_key==1)
			{
				HotW_numC=0;
				HotW_numO++;
				if(HotW_numO>=80)//2S时间 有人
				{
					num=ReadADC(0);				//读取AD检测到的 光敏地值
					if(num>=210)
					{}
					else
					{
					 	Led_crl=FALSE;	
					}
					HotW_numO=0;
				}
			}
		}
		else if(HotW_key==0)
		{
			HotW_numO=0;
			HotW_numC++;
			DelayMs(2);
			if(HotW_numC>=800)//2S
			{
				HotW_numC=0;
				Led_crl=FALSE;
			}
		}
		if(JuLi1_key==0)
		{
			DelayMs(20);
			if(JuLi1_key==0)
			{
				Juli_num++;
				if(Juli_num>=50)	//1s
				{
				 	buzzer=0;
					if(Juli_num>=450) //10S
					{
					  	JuLi1_crl=TRUE;
					}
				}	
			}
		}
		else
		{
			JuLi1_crl=FALSE;
			buzzer=1;
			Juli_num=0;
		}
	}
}

void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-10000)/256;		  //重新赋值 20ms
	TL0=(65536-10000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}
void UART_Init(void)
{
    SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
	TL1 = TH1;  
    TR1   = 1;                  // TR1:  timer 1 打开                         
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

void SendByte_U(unsigned char dat)
{
	unsigned char time_out;
	time_out=0x00;
	SBUF = dat;
	while((!TI)&&(time_out<10))
	{time_out++;DelayMs(1);}
	TI = 0;
}

void SendStr_U(unsigned char *s,unsigned char length)
{
	unsigned char NUM;
	NUM=0x00;
	while(NUM<length)
	{
		SendByte_U(*s);
		s++;
		NUM++;
  	 }
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-5000)/256;		  //重新赋值 10ms
	TL0=(65536-5000)%256;
	times_20ms++;
	if(times_20ms>=0xfffffffe)
	{
		times_20ms=0;
	} 
	times_pwm++;

	if((Led_crl==TRUE)&&(JuLi1_crl==FALSE))
	{
		if(times_pwm<=pwm_val)
		{
			Deng_led=0;
			if(times_pwm==PWM_XZ)
			{
				times_pwm=0;
			}
		}
		else if((times_pwm>pwm_val)&&(times_pwm<=PWM_XZ))
		{
			Deng_led=1;
			if(times_pwm==PWM_XZ)
			{
				times_pwm=0;
			}
		}
		else
		{
			Deng_led=1;
			times_pwm=0;
		}	
	}
	else
	{
		Deng_led=1;
		times_pwm=0;
	}
}

void UART_SER (void) interrupt 4 	//串行中断服务程序
{
	unsigned char R_buf;
	if(RI)                        //判断是接收中断产生
	{
		RI=0;                      //标志位清零
		R_buf=SBUF;
		if(SBUF=='1')
		{
			pwm_val=LOW;
		}
		else if(SBUF=='2')
		{
			pwm_val=HIGH;
		}
		else if(SBUF=='C')
		{
			pwm_val=0;
		}
	}
	if(TI)  //如果是发送标志位,清零
	TI=0;
} 

/*------------------------------------------------
             读AD转值程序
输入参数 Chl 表示需要转换的通道,范围从0-3
返回值范围0-255
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
 {
   unsigned char Val;
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40|Chl);            //发送器件子地址
     if(ack==0)return(0);
   Start_I2c();
   SendByte(AddWr+1);
      if(ack==0)return(0);
   Val=RcvByte();
   NoAck_I2c();                 //发送非应位
   Stop_I2c();                  //结束总线
  return(Val);
 }


硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

硬件设计模块

1、传感器及信号处理部分,它用于检测人体辐射红外信号和光强信号,然后将它们处理成数字信号,以便后续处理。

2、51单片机组成的中央处理单元,它可以处理传感器传来的数字信号,并根据这些信号发出控制命令。

3、输出提醒电路及电源控制电路,它可以发出提醒信号并根据89C51发出的命令来控制灯光等设备的开关。

工作过程

系统使用光敏电阻检测光强度并将其转换为数字信号,通过单片机89C51处理信号并发出控制命令。当环境光强度较强时,光敏电阻阻值较小,信号处理电路检测到低电平信号,禁止热释电红外传感器工作。当光强度较弱时,光敏电阻阻值变大,信号处理电路接收到高电平,启动热释电红外传感器工作。传感器1可以探测到较远的距离,当人体进入传感器1的控测范围内且光强度较弱时,信号检测电路处理信号并向单片机发送中断信号,触发灯光控制电路,使灯慢慢变亮。当人体过于靠近桌面且在热释电红外传感器2的控测范围内时,热释电红外传感器2检测到信号,同时在传感器1的控测范围内,信号处理电路向89C51发送信号,触发警报以使人离开,若在设定的时间内未离开桌面,则灯光逐渐熄灭。当人体离开热释电红外传感器2的控测范围且在热释电红外传感器1的控测范围内时,灯光又慢慢变亮。

结构图:

设计资料

01 原理图

本系统原理图采用Altium Designer19设计,具体如图!

02 程序

本设计使用软件keil5版本编程设计,资料中有软件安装教程,无需担心!具体如图!

03 设计报告

七千字设计报告,具体如下!

04 设计资料

全部资料包括程序(含注释)、AD原理图、开题报告、参考论文、结构图、任务书等。具体内容如下,全网最全! !

下面是开源51单片机设计资料

​大家共同学习进步:

链接:https://pan.baidu.com/s/1ESkJFbVrVe7ku82wM92XGQ?pwd=8gjm

提取码:8gjm

点赞分享,一起学习进步!一起成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值