加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的台灯【亮度,手自动,人体检测,定时】(仿真)

2024/12/11
1796
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

有需要资料的可了解一下.docx

共1个文件

智能台灯:

1、系统具有自动模式和手动模式。

2、自动模式:传感器检测到有人时,根据环境亮度控制台灯的亮度(PWM控制)。

3、手动模式:可手动控制启停。

4、具有定时关闭功能,定时时间可调。

sbit smg3=P2^2;

//--定义使用的IO口--// P1数据口
sbit adc0808_start=P2^6;
sbit adc0808_eoc  =P2^5;
sbit adc0808_oe	  =P2^4;

sbit led=P3^6;//led
sbit ir_in=P3^7;

sbit k1=P3^0;//按钮
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit k5=P3^4;
sbit k6=P3^5;

sbit beep=P2^3;//蜂鸣器
sbit out=P2^7;//台灯

//数码管编码
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar time=0,mode=0;//系统变量
uchar miao=0,fen=1,set=1;//时间
uchar light=0;//光照
uchar start=0;//启停
uchar pwm=0;//亮度
uchar beep_time=0;//蜂鸣器计时
//延时
void delay(uint i)
{
	while(i--);
}

uchar adc0808_read()//读取
{
	uchar i;
		_nop_();
		adc0808_start=1;//启动转换
		_nop_();
		adc0808_start=0;
		while(!adc0808_eoc)//等待转换结束
		{
		}
		adc0808_oe=1;//读取
		_nop_();
		i=P1;
		adc0808_oe=0;
		return i;
}

//主函数
void main()
{
	uchar k=0,i=0;
	uint j=0;
	adc0808_start=0;
	adc0808_oe=0;

	TMOD|=0X01;//初始化定时器
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		//显示时间
		if(start==1)//启动模式
		{
		P0=0XFF;
		smg3=0;smg2=0;smg1=0;
		P0=smgduan[fen/10];
		delay(100);

		P0=0XFF;
		smg3=0;smg2=0;smg1=1;
		P0=smgduan[fen%10]+0x80;
		delay(100);
		
		P0=0XFF;
		smg3=0;smg2=1;smg1=0;
		P0=smgduan[miao/10];
		delay(100);
		
		P0=0XFF;
		smg3=0;smg2=1;smg1=1;
		P0=smgduan[miao%10];
		delay(100);
		}
		else //停止模式
		{
		P0=0XFF;
		smg3=0;smg2=0;smg1=0;
		P0=smgduan[set/10];
		delay(100);

		P0=0XFF;
		smg3=0;smg2=0;smg1=1;
		P0=smgduan[set%10]+0x80;
		delay(100);
		
		P0=0XFF;
		smg3=0;smg2=1;smg1=0;
		P0=smgduan[0];
		delay(100);
		
		P0=0XFF;
		smg3=0;smg2=1;smg1=1;
		P0=smgduan[0];
		delay(100);
		}		

		//显示光照
		P0=0XFF;
		smg3=1;smg2=0;smg1=0;
		P0=smgduan[light/10];
		delay(100);

		P0=0XFF;
		smg3=1;smg2=0;smg1=1;
		P0=smgduan[light%10];
		delay(100);
		//启停指示
		if(start)
		{
		P0=0XFF;
		smg3=1;smg2=1;smg1=0;
		P0=0xbf;
		delay(100);
		}
		//显示亮度
		P0=0XFF;
		smg3=1;smg2=1;smg1=1;
		P0=smgduan[pwm];
		delay(100);

		if(!k1 &&(k!=1) &&(start==0))//启动
		{
			k=1;
			start=1;
			fen=set;
			miao=0;
		}
		if(!k2 &&(k!=2))//停止
		{
			k=2;
			start=0;
		}
		if(!k3 &&(k!=3))//手动,自动
		{
			k=3;
			mode=!mode;
		}
		if(start==0)
		{
		if(!k4 &&(k!=4))//时间加
		{
			k=4;
			if(set<99)
				set++;
		}
		if(!k5 &&(k!=5))//时间减
		{
			k=5;
			if(set>1)
				set--;
		}
		}
		if(mode==1)
		{
		if(!k6 &&(k!=6))//亮度切换
		{
			k=6;
			if(pwm<9)
				pwm++;
			else
				pwm=1;
		}
		}
		if(k1 && k2 && k3 && k4 && k5 && k6)
			k=0;

资料借鉴于此纷传

  • 有需要资料的可了解一下.docx
    下载

相关推荐