基于stm32的教室照明智能控制系统proteus仿真

该程序涉及STM32微控制器的硬件设计,通过GPIO配置实现LED灯的不同状态控制,包括全亮、单个LED亮、两个LED亮和全灭。同时,使用ADC读取模拟信号,结合按键输入,调整LED显示的人数计数。程序中还包括了LCD1602显示器的初始化和数据显示,用于显示人数。通过按键扫描,实现了人数的增减,并根据人数更新LED状态。
摘要由CSDN通过智能技术生成

硬件设计

链接:https://pan.baidu.com/s/1z9P0gHR_0Mf5efc2g3zLrA
提取码:01p1

仿真图如下所示:

在这里插入图片描述

程序设计

#include "stm32f10x.h"
#include "bsp-lcd1602.h"
#include "delay.h"
#include "sys.h"
#include "adc.h"

char people_ADD = 0;

void led( void )
{
	GPIO_InitTypeDef GPIO_InitStructure; 	
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);	
	
}

void led_one( void )
{
	GPIO_SetBits(GPIOC,GPIO_Pin_0);
	GPIO_ResetBits(GPIOC,GPIO_Pin_1);
	GPIO_SetBits(GPIOC,GPIO_Pin_2);
	GPIO_SetBits(GPIOC,GPIO_Pin_3);
	GPIO_ResetBits(GPIOC,GPIO_Pin_4);
	GPIO_SetBits(GPIOC,GPIO_Pin_5);
	GPIO_SetBits(GPIOC,GPIO_Pin_6);
	GPIO_ResetBits(GPIOC,GPIO_Pin_7);
	GPIO_SetBits(GPIOC,GPIO_Pin_8);
	GPIO_SetBits(GPIOC,GPIO_Pin_9);
	GPIO_SetBits(GPIOC,GPIO_Pin_10);
	GPIO_SetBits(GPIOC,GPIO_Pin_11);

}

void led_two(void)
{
	GPIO_SetBits(GPIOC,GPIO_Pin_0);
	GPIO_ResetBits(GPIOC,GPIO_Pin_1);
	GPIO_ResetBits(GPIOC,GPIO_Pin_2);
	GPIO_SetBits(GPIOC,GPIO_Pin_3);
	GPIO_ResetBits(GPIOC,GPIO_Pin_4);
	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	GPIO_SetBits(GPIOC,GPIO_Pin_6);
	GPIO_ResetBits(GPIOC,GPIO_Pin_7);
	GPIO_ResetBits(GPIOC,GPIO_Pin_8);
	GPIO_SetBits(GPIOC,GPIO_Pin_9);
	GPIO_SetBits(GPIOC,GPIO_Pin_10);
	GPIO_SetBits(GPIOC,GPIO_Pin_11);
}

void led_three(void)
{
	GPIO_ResetBits(GPIOC,GPIO_Pin_0);
	GPIO_ResetBits(GPIOC,GPIO_Pin_1);
	GPIO_ResetBits(GPIOC,GPIO_Pin_2);
	GPIO_ResetBits(GPIOC,GPIO_Pin_3);
	GPIO_ResetBits(GPIOC,GPIO_Pin_4);
	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	GPIO_ResetBits(GPIOC,GPIO_Pin_6);
	GPIO_ResetBits(GPIOC,GPIO_Pin_7);
	GPIO_ResetBits(GPIOC,GPIO_Pin_8);
	GPIO_ResetBits(GPIOC,GPIO_Pin_9);
	GPIO_ResetBits(GPIOC,GPIO_Pin_10);
	GPIO_ResetBits(GPIOC,GPIO_Pin_11);
}

void led_Down(void)
{
	GPIO_SetBits(GPIOC,GPIO_Pin_0);
	GPIO_SetBits(GPIOC,GPIO_Pin_1);
	GPIO_SetBits(GPIOC,GPIO_Pin_2);
	GPIO_SetBits(GPIOC,GPIO_Pin_3);
	GPIO_SetBits(GPIOC,GPIO_Pin_4);
	GPIO_SetBits(GPIOC,GPIO_Pin_5);
	GPIO_SetBits(GPIOC,GPIO_Pin_6);
	GPIO_SetBits(GPIOC,GPIO_Pin_7);
	GPIO_SetBits(GPIOC,GPIO_Pin_8);
	GPIO_SetBits(GPIOC,GPIO_Pin_9);
	GPIO_SetBits(GPIOC,GPIO_Pin_10);
	GPIO_SetBits(GPIOC,GPIO_Pin_11);
	
}



void Key_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*开启按键端口(PA)的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; 
	
	// IO 口做输入口时,不用设置输出频率
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}


void KEY_Scan( void )
{
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1 )  
	{	 
		/*等待按键释放 */
		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1); 
		people_ADD++;
		if( people_ADD > 50 )
		{
			people_ADD = 50;
		}
	}
	
	if( ADC_GetConversionValue(ADC1) > 1000 )
	{
		while( (ADC_GetConversionValue(ADC1) > 1000 ));
		people_ADD--;
		if( people_ADD <= 0 )
		{
			people_ADD = 0;
		}
	}
}



int main(void)
{
	Key_GPIO_Config();
	ADC1_GPIO_Config();
	ADC_Config();
	LCD1602_Init();
	led();
	LCD1602_ShowStr(0,0,"     Light     ",15);
	LCD1602_ShowStr(0,1,"People:",7);
	led_Down();
	
	while(1)
	{
		LCD1602_WriteCmd( 0x80+0x40+8);
		LCD1602_WriteDat( people_ADD/10+'0' );
		LCD1602_WriteDat( people_ADD%10+'0' );
		KEY_Scan();
		
		
		if(( people_ADD > 0 )&&( people_ADD <= 3 ))
		{
			led_one();
		}
		else
		{
			if(( people_ADD > 3 )&&( people_ADD <= 6 ))
			{
				led_two();
			}
			else
			{
				if( people_ADD > 6 )
				{
					led_three();
				}
				else
				{
					led_Down();
				}
			}
		}
	}
}



.

.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值