STM32开发实例_基于STM32单片机的智能灯光控制系统(电路图+程序+流程图)24-32-113

一.系统概述

1. 系统内通过STM32单片机进行系统主控,完成数据采集以及逻辑控制。
2.使用光敏电阻模块检测环境中的光强,根据采集到的光强数据来作为是否开灯的条件。
2. 使用声音传感器检测周围的声音,来判断是否有人,当检测到声音超过阈值且光强低于阈值则控制绿灯亮。
3.通过红外人体检测模块检测是否有人,检测到人且光强低于阈值则控制红灯亮。
4.通过蓝牙模块可以实现手机控制灯的亮灭。

二.电路设计 

电路图采用Altium Designer进行设计:
1. 通过STM32F103C8T6单片机作为系统主控,最小系统电路是整个电路的核心;
2. 使用光敏电阻模块进行光强检测,传感器的模拟端与单片机的模拟输入端相接;
3. 使用KY-037声音传感器进行声音检测,模块的模拟输出脚与单片机的模拟输入脚进行连接;
4. 通过光电开关进行人体检测,模块的数据输出脚与单片机的GPIO口直接连接;
5. 使用JDY-31蓝牙模块进行无线通信,通过UART串口与单片机进行通信。

三.程序设计

#include <REGX52.H>
#include "delay.h"
#include "key.h"
#include "Timer0.h"
#include "LCD1602.h"
#include <INTRINS.H>
#include "illumination.h"

sbit LED_Light = P3^6;
sbit LED_Voice = P3^7;
sbit ADC_CS = P2^0;
sbit ADC_CLK = P2^1;
sbit ADC_DIO = P2^2;                                                                           
sbit Trailing = P3^2;

unsigned char bdata Sdat;                                                                                                                                                       
sbit SD7 = Sdat^7;
sbit SD0 = Sdat^0;
unsigned char voltage[4]="0.00";
unsigned char rec_dat[6];
unsigned char uart_receive_buffer[30];  //从串口接收的数据
unsigned char uart_receive_number=0;    //指示串口接收个数
unsigned char N_ADC,VCC,flag;
unsigned int time1;
unsigned int VMax;  
float LMax;

void Com_Init(void);
void Delay_1ms(unsigned int i);
void ADC0832(bit Chx);
void Tran(unsigned char digit);
void VCCjisuan();

void main()
{
		unsigned char i;
		float ttemp;
		delay_nms(100);	    //延时100ms	
		Init_BH1750();
		VMax = 1000;
		LMax = 10;
		Com_Init();
		while(1)
		{		
				disdata();
				ttemp = return1();
				if(Trailing == 0)
				{
						flag = 1;
						
				}
				else
				{
						flag = 0;
				}
				ADC0832(1);
				VCCjisuan();
				time1=VCC*3.3*10;	
				if(flag == 1)
				{
						i = 0;
						if(time1 <	VMax)
						{
								LED_Voice = 1;
						}
						else
						{
								LED_Voice = 0;
						}
						if(ttemp < LMax)
						{
								LED_Light = 0;
						}
						else
						{
								LED_Light = 1;
						}
				}
				else
				{
						i++;
						if(i == 1)
						{
								LED_Voice = 1;
								LED_Light = 1;
						}						
				}
				if(uart_receive_number == 1)
				{
							uart_receive_number = 0;
							if(uart_receive_buffer[0] == 1)
							{
									LED_Voice = 1;
							}
							if(uart_receive_buffer[0] == 2)
							{
									LED_Voice = 0;
							}	
							if(uart_receive_buffer[0] == 3)
							{
									LED_Light = 1;
							}
							if(uart_receive_buffer[0] == 4)
							{
									LED_Light = 0;
							}
				}
				
		}
}

 四.资料内容

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
程序设计完成后写到存储器中,在单片机运行时程序只需从存储器中读取出来运行。用来存放程序的存储器,我们称之为程序存储器(只读存储器),简称ROM。而在单片机运行时,数据将随着程序的运行发生变化,我们将存放数据的存储器称为数据存储器(随机存储器),简称RAM。   单片机的存储器又可分为片内和片外存储器。片内存储器是在单片机内部的存储器,通常容量有限。当单片机程序很大,同时单片机运行时的数据较大,片内存储器容量不够,就需要对单片机扩展外部存储器,这就是片外存储器。   综上所述,51单片机有两种存储器:程序存储器和数据存储器。51单片机同时拥有4个存储空间(物理结构上):片内ROM、片外ROM、片内RAM和片外RAM。图2-1所示为51单片机存储器地址空间,其中使用最频繁的是片内数据存储器,应重点掌握。   程序存储器 程序存储器用于存放用户程序、数据和表格等信息,其存储单元只能读不能写。51单片机程序存储器有16位地址,可寻址的范围为64KB,因此片外程序存储器最大容量为64KB,而片内程序存储器容量为4KB。程序存储器在物理结构上分为片内程序存储器和片外程序存储器两个部分,在逻辑结构上(即用户使用角度)为一个部分,采用同一指令(MOVC指令)进行数据读取,用外部引脚进行区分低4KB空间使用的是片内程序存储器还是片外程序存储器。   对于8031单片机来说,它的内部没有ROM,因此,在实际使用时,必须对它扩展外部程序存储器,最大可扩展空间地址为64KB,此时8031单片机的端必须接地,强制CPU从外部程序存储器读取程序。对于内部有ROM的8051,8751,89C51,89S51等单片机,正常运行时,则需接高电平,使CPU先读内部程序存储器中的程序,当PC值超过内部ROM的容量时,才会转而读外部程序存储器中的程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小常硬件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值