基于51单片机智能路灯控制—人数、光强

2024-06-14 14:04

本文主要是介绍基于51单片机智能路灯控制—人数、光强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于51单片机智能路灯控制

(仿真+程序)

功能介绍

具体功能:

1.光敏电阻与电阻组成分压电路,环境光强度越强,光敏电阻越小,ADC检测的电压越强;

2.红外计数传感器(按键模拟)通过计数现场人数,并结合光强度来控制LED开启的数量;环境光强度较弱时,LED灯开启。

3.人数为0时,无论环境光强弱,LED灯均不开启;

当人数在1~9时(不包含0),开启2个LED灯;

当人数在10~29时,开启5个LED灯;

当人数在30及以上时,开启全部LED灯。

​演示视频:

基于51单片机智能路灯控制—人数、光强 

添加图片注释,不超过 140 字(可选)

程序

#include <reg51.h>
#include <intrins.h> 
/***公众号:木子单片机****
************************************/
#define uchar  unsigned char
#define uint  unsigned int
//共阳极/*0,1,2,3,4,5,6,7,8,9,A,b,C,*/
uchar code SEG7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6};
//显示缓冲
uchar num[]={0,0,0,0,0,0};
//位码定义
sbit      q2=P2^1;
sbit      q1=P2^0;
//按键
sbit key1=P2^3;
//灯
sbit  led0=P3^6;
sbit  led1=P3^7;
sbit  led2=P1^0;
sbit  led3=P1^1;
sbit  led4=P1^2;
sbit  led5=P1^3;
sbit  led6=P1^4;
sbit  led7=P1^5;
sbit  led8=P1^6;
sbit  led9=P1^7;uchar pep=0;
sbit  Clk= P2^4;
sbit  DATI=P2^6;
sbit  DATO= P2^6;
sbit  CS= P2^5;
uint  dat = 0x00;      //AD值//AD转换子程序
uint adc0832(unsigned char CH)
{uchar i,test,adval;adval = 0x00;test = 0x00;//初始化Clk = 0;      DATI = 1;_nop_();   _nop_();CS = 0;_nop_();Clk = 1;_nop_();  _nop_();//通道选择if(CH == 0x00)     {Clk = 0;DATI = 1;      //通道0的第一位_nop_();Clk = 1;_nop_();  _nop_();Clk = 0;DATI = 0;      //通道0的第二位_nop_();  _nop_();Clk = 1;_nop_();} else{Clk = 0;DATI = 1;      //通道1的第一位_nop_();  _nop_();Clk = 1;_nop_();  _nop_();Clk = 0;DATI = 1;      //通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;   _nop_();DATI = 1;for( i = 0;i < 8;i++ )      //读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();  _nop_();Clk = 0;	   _nop_();if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++)      //读取后8位的值{test >>= 1;if (DATO)test |= 0x80;else test |= 0x00;_nop_();Clk = 1;_nop_();  _nop_();Clk = 0;   _nop_();}//比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉if (adval == test)     dat = test;_nop_();  _nop_();CS = 1;        //释放ADC0832DATO = 1;Clk = 1;return dat;}//延时函数ms
void _delay_ms(uint t)
{uint i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);
}
//显示子函数
void dispaly()
{ num[0]=SEG7[pep%100/10];num[1]=SEG7[pep%10];  //显示第1位P0=num[0];q1=1;_delay_ms(2);q1=0;//显示第2位P0=num[1];q2=1;_delay_ms(2);q2=0;
}
uchar light=200;
//-按键
//1-9人2盏灯  10-30人5盏灯 30人以上10盏灯
void key()
{if(key1==0){pep=pep+1;while(key1==0);}//--------------dat=adc0832(0);if(dat>light){if((pep>0)&&(pep<10)){led0=1;led1=1;led2=0;led3=1;led4=1;led5=1;led6=1;led7=0;led8=1;led9=1;}if((pep>=10)&&(pep<30)){led0=0;led1=1;led2=0;led3=1;led4=1;led5=0;led6=1;led7=0;led8=1;led9=0;}if((pep>=30)&&(pep<60)){led0=0;led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;led9=0;}}if(dat<light){led0=1;led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;led9=1;}}

硬件设计

使用元器件:

单片机:AT89C51;

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

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)等。具体内容如下,全网最全! !

 

可以关注下方公众号!

点赞分享一起学习成长。

这篇关于基于51单片机智能路灯控制—人数、光强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060611

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav