基于STM32的电梯楼层控制系统proteus仿真

硬件设计

仿真图如下所示:
在这里插入图片描述

程序设计


#include "main.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "timer.h"


 char flag1;		//定时时间到标志
 u8 counter;		//计数器

u8 state;		//当前电梯状态
u8 statepre;	//之前电梯状态
u8 flag;		//电梯上下标志,0下,1上

u8  i;

char in1=0, in2=0, in3=0, in4=0, up1=0, up2=0, up3=0, down2=0, down3=0, down4=0;	//KEY
u8 table[]={0xf9, 0xa4,0xb0,0x99,  0xa1, 0xc1, 0xff};        //楼层显示码表,一共是四层

void keyscan(void);
void elvator(void);

void display()
	{
	GPIOB->ODR &=0xFFFFFFF0 ;
	set_DigitalNum(state);  //楼乘标号	
	GPIOB->ODR |=0x00000002 ;
  Delay_ms(2);
		
	GPIOB->ODR &=0xFFFFFFF0 ;	
  set_DigitalNum(flag);
  GPIOB->ODR |=0x00000008 ;
  Delay_ms(2);
}

void iniclock()      //start clock
{
TIM3->CR1|=0x01; 
	
}	

void run()
{
	for(i=0;i<50;i++)//100ms
	{
			keyscan();
			display();
	}
}



int main()
{

//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2	
	Delay_Init(); // 延时程序初始化
	Led_Init();   // LED灯初始化
	MultDigitalNum_Init(); // 数码管初始化
	KEY_Init();            // 按键初始化
//TIM3_Int_Init(499,7199);//50ms进入一次中断
	
   	state=1;
		statepre=1;
		flag=1;//上
		flag1=0;


	
	while(1)
	 {
 
		 elvator();
		
		 
	}
		
}



void keyscan(void)
{
//内一按下动作	
	if(!(GPIOC->IDR & (1 << 0)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 0)))
		{
			in1=1;			//被按下后标记,亮灯,下同
			while(!(GPIOC->IDR & (1 << 0)));

		}
	}
//内二按下动作		
	if(!(GPIOC->IDR & (1 << 1)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 1)))
		{
			in2=1;			//被按下后标记,亮灯,下同
			while(!(GPIOC->IDR & (1 << 1)));

		}
	}	
//内三按下动作		
	if(!(GPIOC->IDR & (1 << 2)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 2)))
		{
			in3=1;			//被按下后标记,亮灯,下同
			while(!(GPIOC->IDR & (1 << 2)));

		}
	}	
//内四按下动作	
	if(!(GPIOC->IDR & (1 << 3)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 3)))
		{
			in4=1;			//被按下后标记,亮灯,下同
			while(!(GPIOC->IDR & (1 << 3)));

		}
	}	
	
//1上按下动作	
	if(!(GPIOC->IDR & (1 << 4)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 4)))
		{
				
			   up1=1;
				lup1(1);
			
			while(!(GPIOC->IDR & (1 << 4)));

		}
	}	
	
//2上按下动作	
	if(!(GPIOC->IDR & (1 << 5)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 5)))
		{
				
			up2=1;
			lup2(1);
			
			while(!(GPIOC->IDR & (1 << 5)));

		}
	}		
//3上按下动作	
	if(!(GPIOC->IDR & (1 << 6)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 6)))
		{
				
			up3=1;
			lup3(1);
			
			while(!(GPIOC->IDR & (1 << 6)));

		}
	}	

//2下按下动作	
	if(!(GPIOC->IDR & (1 << 7)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 7)))
		{
				
		     down2=1;
				ldown2(1);
			
			while(!(GPIOC->IDR & (1 << 7)));

		}
	}		
//3下按下动作	
	if(!(GPIOC->IDR & (1 << 8)))
	{
		Delay_ms(1); //消抖
		if(!(GPIOC->IDR & (1 << 8)))
		{
				
		     down3=1;
				ldown3(1);
			
			while(!(GPIOC->IDR & (1 << 8)));

		}
	}		

附:http://www.jh-tec.cn/archives/7205

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于STM32烟雾报警系统Proteus仿真通常包括以下步骤: 1. 硬件设计:在Proteus中创建STM32微控制器的电路图,包括传感器模块、蜂鸣器、LED灯等外部元件的连接。确保将STM32正确连接到PC并与仿真软件进行通信。 2. 程序编写:使用Keil等编程软件编写烟雾报警系统的嵌入式C代码。这些代码包括与传感器通信、数据处理、报警控制等功能。编写完毕后,将代码烧录到STM32微控制器中。 3. 仿真设置:在Proteus中设置仿真环境,请确保选择正确的STM32微控制器型号并加载先前烧录的代码。连接传感器模块到微控制器的引脚,并设置相应的仿真参数(如时钟频率、仿真时间等)。 4. 仿真运行:运行仿真,在仿真界面中可以观察到STM32微控制器与外部硬件的交互。当传感器检测到烟雾时,系统会触发报警器并亮起LED灯。通过监控仿真结果,可以检查系统是否正常运行。 5. 仿真结果分析:在仿真运行结束后,可以分析仿真结果以确保系统的准确性和稳定性。查看传感器的输出、报警器和LED的状态,以及整个系统的响应。 基于STM32烟雾报警系统Proteus仿真能够更好地理解系统的工作原理、优化系统设计以及发现潜在的问题和缺陷。通过这种仿真,可以实现系统功能的验证和调试,帮助开发人员更高效、更准确地开发出可靠的烟雾报警系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值