基于51单片机的智能调光台灯

2023-05-16

1.功能介绍
智能台灯可分成自动和手动两种模式。在自动模式下,台灯能根据环境光的亮暗与人是否被台灯所检测到(人是否在)来自动开启台灯。当人被微机检测到,环境光又达到某个程度的时候(可以设定与调节),台灯就会开启。如果环境光没有达到这个程度,台灯不会开启。当人没有被微机检测到,无论多暗,台灯也不会开。  手动模式是为了不习惯使用自动模式的人或是台灯中的微机出故障等紧急情况时用的。在手动模式下,智能台灯和普通台灯是一样使用的。
主要功能 :
(1)亮度不够且有人靠近时台灯自动亮;
(2)靠的太近会提醒坐姿不正(蜂鸣器)
(3)附近无人时台灯自动熄灭(30秒) 时间可调
(4)根据环境亮度调节等亮度
(5)可手动调节台灯亮度
(6)设定学习时间

2.硬件设计
(1)总体硬件设计
整体硬件电路是以AT89C52单片机为控制核心,主要由热释电红外传感器,光敏电阻信号处理电路,提醒电路,灯光控制电路,故障报警电路等组成。单片机可将热释电红外传感器检测到的人体辐射红外信号及光强信号的模拟量转换成数字量。
在这里插入图片描述

(1)LED驱动电路
在这里插入图片描述
LED驱动电路采用3路串联、每路4颗的LED灯,使用三极管S8050来控制LED灯的亮灭。在软件上采用PWM控制方式,以此达到控制LED灯的亮度。
(2)光敏感应电路
在这里插入图片描述
对于台灯亮度的感应采用了光敏电阻,利用光敏电阻的阻值随着亮度的改变而改变,电阻值的改变会改变光敏电阻上的电压值。这时,通过AD转换器采集电压,转换成相应的光强数据传输给单片机。
在这里插入图片描述
(3)人体感应电路
人体感应电路采用了HC-SR501基于红外线技术的数字传感器。当传感器感应到人体时,传感器IO引脚输出高电平;当无人体时,传感器输出低电平。
在这里插入图片描述
(4)红外接近传感器
红外接近传感器采用了E18- D80NK数字型传感器,检测到目标是低电平输出,正常状态是高电平输出;此传感器的功能为检测用户是否坐于台灯前。
在这里插入图片描述
3.软件设计
(1)数码管驱动程序

#define DUAN P0				  //数码管段位
sbit W0=P2^7;		//数码管位端
sbit W1=P2^6;
sbit W2=P2^5;
sbit W3=P2^4;

/**********************************************************************
* 名称 : display();
* 功能 : 数码管显示
* 输入 : 无
* 输出 : 无
***********************************************************************/	  
void display()
{
	if(flag_set==0)			   //正常模式下
	{
		DUAN=tab[min/10];	   //送入段码,秒数高位
		W0=0;				   //打开位地址
		delay(1);			   //小延时
		W0=1;				   //关闭位地址
		DUAN=tab_dian[min%10]; //送入段码,秒数低位
		W1=0;
		delay(1);
		W1=1;
		DUAN=tab[sec/10];	   //送入段码,分钟数高位
		W2=0;
		delay(1);
		W2=1;
		DUAN=tab[sec%10];	   //送入段码,分钟数高位
		W3=0;
		delay(1);
		W3=1;
	}
	else if(flag_set==1)	   //设置模式下闪烁相应位
	{
		if(ss==1)			   //闪烁标志  ss=1 正常显示
		{
			DUAN=~tab[min/10];
			W0=0;
			delay(1);
			W0=1;
			DUAN=~tab_dian[min%10];
			W1=0;
			delay(1);
			W1=1;
		}
		else				   //闪烁标志  ss=0 熄灭相应位 达到闪烁效果	 ss在定时器里500ms取反一次
		{
			DUAN=~tab[10];	   //
			W0=0;
			delay(1);
			W0=1;
			DUAN=~tab_dian[10];
			W1=0;
			delay(1);
			W1=1;
		}
		DUAN=~tab[sec/10];
		W2=0;
		delay(1);
		W2=1;
		DUAN=~tab[sec%10];
		W3=0;
		delay(1);
		W3=1;
	}
	else
	{
		
		DUAN=~tab[min/10];
		W0=0;
		delay(1);
		W0=1;
		DUAN=~tab_dian[min%10];
		W1=0;
		delay(1);
		W1=1;
		if(ss==1)
		{
			DUAN=~tab[sec/10];
			W2=0;
			delay(1);
			W2=1;
			DUAN=~tab[sec%10];
			W3=0;
			delay(1);
			W3=1;
		}
		else
		{
			DUAN=~tab[10];
			W2=0;
			delay(1);
			W2=1;
			DUAN=~tab[10];
			W3=0;
			delay(1);
			W3=1;
		}
	}
}

(2)按键驱动程序

sbit change= P2^3;	//自动模式切换按键
sbit set = P2^2;	//设置按键
sbit add = P2^1;	//加按键
sbit sub = P2^0;	//减按键

/**********************************************************************
* 名称 : KEY();
* 功能 : 按键控制
* 输入 : 无
* 输出 : 无
***********************************************************************/
void KEY()
{
	uint lum_mean,lum_all;
	uchar b,c;
	if(change==0)				  //自动切换按键按下
	{
		delay(10);				  //去抖
		if(change==0)			  //再次判断按键按下
		{
			buzz=0;				  //蜂鸣器鸣响
			flag_auto=!flag_auto; //自动模式标志位取反
			if(flag_auto==1)	  //当切换到手动模式时  首先将LED发光比例PWM设置在50%
			scale=20;
			
		}
		while(!change) display();buzz=1; //等待按键释放  松开按键后关闭蜂鸣器、刷新显示
	}
	if(jiejin==0&&flag_jiejin==1) //接近传感器检测到障碍时  开启报警
	{
		buzz=0;
		flag_jiejin=0;
	}
	if(jiejin!=flag_jiejin)	      //接近传感器检测不到障碍时  关闭报警
	{
		buzz=1;
		flag_jiejin=1;
	}
	if(set==0)				      //设置键按下时
	{
		delay(10);
		if(set==0)
		{
			buzz=0;
			flag_set++;			  //设置变量++
			if(flag_set==3)		  //加到3时回复回正常模式
			flag_set=0;
			flag_bs=0;			  //按下设置 关闭报警
			
		}
		while(!set) display(); buzz=1;//等待按键释放  松开按键后关闭蜂鸣器、刷新显示
	}
	if(flag_set==1)					  //加键按键只有在设置状态(flag_set!=0)时按下才有效	  调分
	{								 
		if(add==0)					  //加按键按下时
		{
			delay(10);				  //消抖
			if(add==0)
			{
				buzz=0;				  //蜂鸣器响
				min++;				  //分++
				if(min>=60)
				min=0;
				
			}
			while(!add) display(); buzz=1;	 //等待按键释放  松开按键后关闭蜂鸣器、刷新显示
		}
		if(sub==0)					  //减按键按下时
		{
			delay(10);				  //消抖
			if(sub==0)
			{
				buzz=0;				  //蜂鸣器响
				min--;				  //分--
				if(min>0)
				min=59;
				
			}
			while(!sub) display(); buzz=1;	 //等待按键释放  松开按键后关闭蜂鸣器、刷新显示
		}
	}
	if(flag_set==2)					//调秒
	{								
		if(add==0)					//加键按下
		{						
			delay(10);				//消抖
			if(add==0)
			{
				buzz=0;				//蜂鸣器响
				sec++;				//秒++
				if(sec>=60)
				sec=0;
				
			}
			while(!add) display(); buzz=1;	  //等待按键释放  松开按键后关闭蜂鸣器、刷新显示
		}
		if(sub==0)					 //减键按下
		{
			delay(10);
			if(sub==0)				 //消抖
			{
				buzz=0;				 //蜂鸣器响
				sec--;				 //秒--
				if(sec<0)
				sec=59;
				
			}
			while(!sub) display();	buzz=1;	  //等待按键释放  松开按键后关闭蜂鸣器、刷新显示
		}
		while(!sub);
	}
		
	if(flag_auto==0)					//自动模式
	{
		if(flag_rsd==1)					//且有人在范围内时	环境发光强度控制灯光变化
		{
			for(b=0;b<49;b++) 			//将空数组tt[]内数值整体左移一位
			{
				tt[b]=tt[b+1];			//将后一数值放到前一位置
			}
			tt[49]=ADC0809();			//将读出的ad0809数值放入tt[49]
			for(c=0;c<50;c++)			//将tt[]内数值相加
			{
				lum_all=lum_all+tt[c];
			}
			lum_mean=lum_all/50;		//将总数/50取出平均值
//			lum_all=0;					//将总数清零
				
			if(lum_mean<=30) scale=1;			   //判断取出平均值大小  小于30  发光强度0%
			else if(lum_mean>=150) scale=41;	   //大于150  发光强度100%
			else scale=((lum_mean-30)/3)+1;		   //其他值时将其计算得到发光强度 (计算目的是为了得到一个1-41之间的数值 控制灯光变化)
		}
		else
		scale=1;					 //没有人在范围内时 将灯光亮度调至0%
	}
	else						  	 //手动模式下
	{
		if(flag_set==0)				 //正常模式下
		{
			if(add==0)				 //加键按下
			{
				delay(10);
				if(add==0)
				{
				//	buzz=0;           //蜂鸣器响
					scale++;		  //灯光比例++
					if(scale>=41)
					scale=41;
					display();
				}
			//	while(!add) display();	buzz=1;
			}
			if(sub==0)				  //减键按下时
			{
				delay(10);
				if(sub==0)
				{
				//	buzz=0;			   //蜂鸣器响
					scale--;		   //灯光比例--
					if(scale>1)
					scale=1;
					display();
				}
		//		while(!sub) display(); buzz=1;
			}
		}
	}
}

(3)ADC控制程序

#define Data_ADC0809 P1
//ADC0809 控制引脚定义
sbit ST=P3^1;
sbit EOC=P3^2;
sbit OE=P3^3;

extern uchar ADC0809();	   //函数声明
/**********************************************************************
* 名称 : ADC0809();
* 功能 : ADC0809把模拟量转化为八位数字量
* 输入 : 无
* 输出 : 无
***********************************************************************/
uchar ADC0809()
{
	uchar temp_=0x00;	
	OE=0;		 //初始化高阻态	   转化初始化   低电平,禁止输出允许
	ST=0;
	ST=1;		 //上升沿 清零    
	ST=0;		 //下降沿 开始转换
	while(EOC==0);	    //外部中断 等待AD转换结束	EOC为1时AD转换结束跳出
	OE=1;			  	//高电平,输出允许
	temp_=Data_ADC0809;	//读取转换的AD值
	OE=0;				//低电平,禁止输出允许
	return temp_;		//返回ADC读取值
}

(4)LED亮度控制程序

//管脚声明
sbit LED = P3^4;	//PWM输出
sbit change= P2^3;	//自动模式切换按键
sbit rsd = P3^6;    //热释电
sbit jiejin=P3^5;   //接近开关
sbit buzz=P3^7;     //蜂鸣器报警电路
/**********************************************************************
* 名称 : init();
* 功能 : 初始化定时器
* 输入 : 无
* 输出 : 无
***********************************************************************/
void init()
{
	TMOD=0x11;	   //工作方式1
	TH1=0x3c;
	TL1=0xb0;	   //T1赋初值50ms
	TH0=0xff;
	TL0=0xe7;	   //T0赋初值25us	  
	ET0=1;
	ET1=1;		   //打开中断允许开关
	EA=1;		   //中断总开关
	TR0=1;		   //开定时器0 开关
	TR1=0;		   //关定时器0 开关
}

/**********************************************************************
* 名称 : void time0() interrupt 1
* 功能 : 定时器T0 中断服务函数:PWM脉冲发生函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void time0() interrupt 1
{
	uchar n;
	TH0=0xff;
	TL0=0xe7;		 //重新赋初值
	n++;			 //每25us  n++
	if(n>scale)		 //n<设置比例时,打开灯
	{
		LED=1;
	}
	else if(n<=scale)//n大于等于设置比例时 关闭灯
	{
		LED=0;
	}
	if(n==40)		 //n==40  :25us*40=1ms   1kHZ
	{
		n=0;		 //n=0
	}
	else ;	
}

/**********************************************************************
* 名称 : void time1() interrupt 3
* 功能 : 定时器T1 中断服务函数:计时和闪烁控制	  红外热释
* 输入 : 无
* 输出 : 无
***********************************************************************/
void time1() interrupt 3
{
	uchar m;
	TH1=0x3c;
	TL1=0xb0;		 //重新赋初值
	m++;			 //50ms  m++
	if((m==10||m==20)&&flag_set!=0)	  //每过500ms  并且 在设置状态时 
	{
		ss=!ss;						  //闪烁变量取反
	}
	if(m==20)						  //到达1s时
	{
		m=0;						  //m=0
		if(rsd==0)					  //热释电无信号时
		rsd_sec++;					  //热释电计时秒++
		if(rsd_sec<=30&&rsd==1)		  //热释电计时秒小于等于30 并且 热释电有信号时
		{
			rsd_sec=0;				  //将热释电秒清零
			flag_rsd=1;				  //标志位置1 控制AD0809采集数值 调节灯光亮度
		}
		else if(rsd_sec>30&&rsd==0)	  //热释电计时秒大于30 并且 热释电无信号时
		{
			flag_rsd=0;				  //标志位置0 停止ad0809转换 关闭灯光
			rsd_sec=0;				  //热释电计时秒清零
		}
		if(flag_set==0&&flag_bs==0&&((min+sec)!=0))		 //正常模式下&&未报警&&定时时间不为零时
		{
			sec--;
			if(sec<0)									 //定时秒--  小于0时
			{
				sec=59;									 //复位到59秒
				min--;									 //分--
			}
			if(min<=0&&sec==0)							 //分和秒都减到零时
			{
				min=0;
				flag_bs=1;
				buzz=0;									 //蜂鸣器报警提示时间到
			}
		}
//		else buzz=1;	
	}	
}

(5)主函数


/**********************************************************************
* 名称 : main();
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
	init();		  //调用初始化函数
	flag_auto=1;  //初始化手动模式
	rsd=0;		  //热释电引脚置低(有信号时时高电平)
	delay(500);	  //延时500ms后开机

	while(1)	  //大循环
	{
		KEY();		 //调用按键函数
		display();	 //调用显示函数
	}
}

源码+AD电路图 下载:关注公众号,首页回复“智能台灯”获取资料
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机的智能调光台灯 的相关文章

  • VNC启动报错A VNC server is already running as :10

    报错 xff1a A VNC server is already running as 2 解决 xff1a usr sbin lsof i tcp 5902 然后kill了 xff0c 再重启
  • XManager5基于gdm连接centos图形界面

    centos6 参考了很多资料 花了几个钟终于把XManager连接centos搞定 第一步 如果是新装的linux centos7 xff0c 需要先配置好yum xff0c 执行命令 xff1a cd etc yum repos d r
  • 初级算法学习步骤

    前言 零散整理一个多月终于整理完了 这是一篇初级算法学习的步骤总结 xff0c 或许可以帮助你怎么去接触算法 阅读本文需要一定java语法基础和api文档查看基础 xff0c 但算法其实看重的是思想而不是语言 xff0c 所以都可以借鉴 本
  • Hadoop学习笔记:(一)WordCount运行

    前言 xff1a 本文是在hadoop已经配置好的情况下 WordCount是hadoop下的HelloWorld程序 xff0c 是初学者必须要会的 下面是用eclipse进行开发 一 工程与MapReduce代码 新建工程 xff0c
  • 乌班图18.04搭建ssh服务器

    一 首先打开终端 xff0c 在终端输入以下命令安装 openssh server 如下图所示 xff1a sudo apt get install openssh server 二 安装完成以后 xff0c 启动ssh服务 xff0c 输
  • keil无法生成axf文件之解决方法

    参考 xff1a 参考 鱼鹰单片机 https blog csdn net weixin 42876465 article details 88356890 其实很简单 默认情况是生成 axf 文件的 xff0c 但有可能不能生成该文件 生
  • 用vnc实现windows远程连接linux桌面

    网络遥控技术是指由一部计算机 xff08 主控端 xff09 去控制另一部计算机 xff08 被控端 xff09 xff0c 而且当主控端在控制端时 xff0c 就如同用户亲自坐在被控端前操作一样 xff0c 可以执行被控端的应用程序 xf
  • linux find typelinux find用法(转)

    由于 find 具有健壮的功效 xff0c 所以它的选项也很多 xff0c 其中大局限选项都值得我们花时间来剖析一下 尽管体例中含有网络文件体例 NFS xff0c find 命令在该文件体例中异样有用 xff0c 只你具有相应的权限 在运
  • Find 命令之 exec 的诠释

    find是我们很常用的一个Linux命令 xff0c 但是我们一般查找出来的并不仅仅是看看而已 xff0c 还会有进一步的操作 xff0c 这个时候exec的作用就显现出来了 e xec解释 xff1a exec 参数后面跟的是 comma
  • AI深度学习模型被“骗”,研究者如何对抗攻击?

    作者 埼玉 编辑 3D视觉开发者社区 如果觉得文章内容不错 xff0c 别忘了三连支持下哦 x1f618 文章目录 我们的模型被 骗 了什么是对抗技术 xff1f 对抗攻击的方法1 FGSM Fast gradient sign metho
  • “Additional information: 您必须有许可证才能使用此 ActiveX 控件”的错误解决方法

    昨天把项目的ArcGIS从9 3升级为10 1 早上到公司 xff0c 准备提交工程代码 xff0c 编译 通过 xff0c 但运行报错 错误信息 xff1a 原本以为是自己清理中间文件导致的 xff0c 但是找来找去 xff0c 没有任何
  • ssh配合vscode免密码登陆

    整体流程 xff1a 1 在本机创建公钥和私钥 2 在本地 ssh config文件中 xff0c 设置IdentifyFile为私钥地址 3 将公钥上传到服务器 下面是每一步的详解 xff1a 1 在本机创建公钥和私钥 xff1a 在命令
  • Debian查看系统版本信息

    下一代 Debian 正式发行版的代号为 34 buster 34 发布时间尚未确定 Debian 9 xff08 34 stretch 34 xff09 当前的稳定版 Debian 8 xff08 34 jessie 34 xff09 被
  • Oracle 索引 index

    一 索引的概念 索引是数据库对象 xff0c 通过使用快速路径访问方法快速定位数据 xff0c 减少了磁盘的I O xff0c 用来加速对表的查询速度 相当于书本的目录 与表独立存放 xff0c 但需要依附于表 xff0c 是在表的基础上创
  • HX711使用教程-数字电子秤常用芯片

    1 简介 HX711是一款专为高精度称重传感器而设计的24位A D转换器芯片 与同类型其它芯片相比 xff0c 该芯片是专门为称重传感器设计的 xff0c 称重传感器只需要一个HX711芯片即可完成称重信号的处理及AD转换 xff1b 对于
  • 详解LCD1602液晶显示屏的使用

    1 简介 作为各类单片机实物设计的常用显示屏 xff0c LCD1602是一种专门用于显示字母 数字 符号等点阵式LCD xff0c 其1602是指LCD显示的内容为16X2 xff0c 即可以显示两行 xff0c 每行16个字符 xff0
  • AS608指纹模块开发教程

    一 xff0e 简介 AS608 指纹识别模块主要是指采用了杭州晟元芯片技术有限公司 Synochip 的 AS608 指纹识别芯片 而做成的指纹模块 xff0c 模块厂商只是基于该芯片设计外围电路 xff0c 集成一个可供2次开发的指纹模
  • 51单片机串口通讯详解

    串口 xff0c 作为单片机程序开发中最常用 最方便 xff0c 也是应用最广泛的程序调试方法 xff1b 无论是作为调试工具 xff0c 打印出调试信息 xff0c 还是对功能模块进行通信 xff0c 串口是每个单片机开发人员最常用的单片
  • 记录一次用VNC Server配置window电脑远程访问,并在另一台电脑上外网访问远程桌面

    记录一次用VNC Server配置window电脑远程访问 xff0c 并在另一台电脑上外网访问远程桌面 有一台window和macbook 平时带着macbook出门办公 xff08 轻便 xff0c 不用带充电线 xff09 xff0c
  • 数模转换器ADC0832使用原理及控制程序

    一 xff0e 简介 数模转换器一般分为两种 xff0c 一种为数字信号转模拟信号 xff0c xff0c 其控制器简称为DAC xff1b 另一种为模拟信号转数字信号 xff0c 其控制器简称为ADC 现在主要介绍一款很常用 入门级的AD

随机推荐

  • GY-30光强传感器模块的应用原理及控制程序

    1 模块介绍 GY 30模块是一款基于IIC通信的16bit的数字型传感器 模块主要是以BH1750数字型光强感应芯片为核心及一些外围驱动电路 模块整体电路如图 xff1a 其中C1 C2 为电源滤波电容 xff0c R1 R3 为 I2C
  • LED数码管结构与工作原理

    一 xff0e 什么是数码管 LED数码管 xff08 LED Segment Displays xff09 是由8个发光二极管构成 xff0c 并按照一定的图形及排列封转在一起的显示器件 其中7个LED构成7笔字形 xff0c 1个LED
  • AD在PCB设计中导入LOGO

    在设计电路板有时需要将个人或公司的LOGO印在电路板上 xff0c 所以Altium Designer软件也提供了一个导入LOGO图案的插件 LOGO CREATOR 1 制作LOGO 因为印在电路板只能印出单色图案 xff0c 所以先得将
  • 详解LCD12864显示屏的使用(并行控制)

    一 xff0e 概述 LCD12864显示屏是所说的点阵液晶显示模块 xff0c 就是由12864个液晶显示点组成的一个128列64行的阵列 xff0c 所以也就叫成了12864 每个显示点都对应着有一位二进制数 xff0c 0表示灭 xf
  • DS18B20温度传感器-51单片机控制程序

    一 xff0e 概述 DS18B20数字温度传感器提供9 Bit到12 Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能 DS18B20采用的1 Wire通信即仅采用一个数据线 xff08 以及地 xff
  • 详解数据存储芯片AT24C02的应用及编程

    一 xff0e 芯片简介 AT24C02是一个2K位串行CMOS E2PROM xff0c 内部含有256个8位字节 xff0c 采用先进CMOS技术实质上减少了器件的功耗 AT24C02有一个8字节页写缓冲器 xff0c 该器件通过IIC
  • 谈谈单片机的最小运行环境--最小系统

    单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分 xff0c 也可理解为单片机正常运行的最小环境 其主要构成为四部分 xff1a 1 单片机芯片 2 系统电源 3 时钟电路 4 复位电路 这四个部分不可缺少 xff0c
  • 详解温度传感器DS18B20编程与使用

    DS18B20是由DALLAS半导体公司推出的一种的 一线总线 接口的温度传感器 与传统的热敏电阻等测温元件相比 xff0c 它是一种新型的体积小 适用电压宽 与微处理器接口简单的数字化温度传感器 1 测量温度范围 55 43 125 2
  • AD10 如何将焊盘的实心改为十字型覆铜

    焊盘实心覆铜虽然有利于电流的传输 但由于焊盘周围都覆上铜皮 对焊锡有粘附作用 不利于元器件拆除 对往后板卡调试造成不便 所以焊盘在覆铜的时候建议采用十字型覆铜 xff0c 过孔采用实心覆铜 接下来就讲解一下AD10如何设置焊盘十字覆铜 xf
  • 相机参数标定(camera calibration)及标定结果如何使用

    重要更新 xff1a 本文的第二次更新已发布 为了不破坏现有内容的结构 xff0c 故重新开始新的一篇文章 同时本文的一些内容也会涵盖进去 欢迎关注 第二更 xff0c 相机参数标定基础 xff1a 从小孔成像开始到单双目标定 关于实践部分
  • 基于51单片机的LCD1602电子时钟

    摘要 xff1a 51系列单片机是各单片机中最为典型和最有代表性的一种 由RAM ROM CPU构成 xff0c 定时 xff0c 计数和多种接口于一体的微控制器 本次设计的数字电子时钟采用了STC89C52芯片进行控制 xff0c 使用D
  • 基于51单片机的简易密码锁

    一个基于51单片机的简易密码锁 xff0c 废话不多说 xff0c 直接贴图贴代码 1 电路图 电路组成 xff1a 5V电源 43 51单片机最小系统 43 LCD1602显示屏 43 4 4矩阵键盘 2 程序分析 xff08 1 xff
  • 浅谈Android与Linux系统的差异

    最近忙于查找Linux和android平台的资料 xff0c 今天将其整理整理 xff0c 根据本人拙见分享给大家 Android和Linux作为现行主流的操作系统 xff0c 无论在消费类产品还是在工控领域 xff0c 都有广泛的应用 都
  • 基于51单片机的超声波测距

    1 超声波测距原理 超声波是利用反射的原理测量距离的 xff0c 被测距离一端为超声波传感器 xff0c 另一端必须有能反射超声波的物体 测量距离时 xff0c 将超声波传感器对准反射物发射超声波 xff0c 并开始计时 xff0c 超声波
  • 超细!详解AD13:如何从零开始画出一个PCB(电路板)

    在学电子或者单片机的小伙伴们或许有过这种念头 xff0c 就是想把自己的设计的电路或者单片机系统做成一个电路板出来 xff1b 但却不知怎样做出来 今天我就给大家详细讲解如果通过AD13电路设计软件设计出一个电路板 1 首先打开AD13 x
  • 基于51单片机液晶万年历设计

    电子万年历是一种非常广泛日常计时工具 xff0c 给人们的带来了很大的方便 xff0c 在社会上越来越流行 它可以对年 月 日 时 分 秒进行计时 xff0c 采用直观的数字显示 xff0c 可以同时显示年月日时分秒和温度等信息 xff0c
  • 基于51单片机的简易计算器

    1 简介 本计算器是以MCS 51系列AT89C51单片机为核心构成的简易计算器系统 该系统通过单片机控制 xff0c 实现对4 4键盘扫描进行实时的按键检测 xff0c 并由LCD1602显示屏将过程与结果显示出来 2 硬件原理图 硬件主
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 xff0c 将红外传感器接收的信号解析出来 xff0c LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统LCD1602显示屏IR红外接收器
  • 基于51单片机的心率脉搏计检测系统

    1 功能原理 脉搏传感器采样脉搏信号 xff0c 采用STC89C51单片机作为控制器 xff0c 脉搏传感器输出方波传入单片机 xff0c 触发单片机进去外部中断函数 xff0c 每接收一个脉冲波形 xff0c 显示屏就计数一次 如果脉搏
  • 基于51单片机的智能调光台灯

    1 功能介绍 智能台灯可分成自动和手动两种模式 在自动模式下 xff0c 台灯能根据环境光的亮暗与人是否被台灯所检测到 xff08 人是否在 xff09 来自动开启台灯 当人被微机检测到 xff0c 环境光又达到某个程度的时候 xff08