资料编号:133
一:功能介绍
1、采用stm32单片机+4位数码管+独立按键,制作一个基于stm32单片机停车场车位管理系统Proteus仿真;
2、通过按键进行模拟车辆进出,并且通过程序计算出当前的剩余车位数量;
3、将剩余的车位数量显示到4位数码管上;
4、可以通过按键一键复位车位数量;
二:仿真演示视频+程序简要讲解:(程序有中文注释,新手容易看懂)
133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序
三:设计软件介绍
本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,仿真采用Proteus软件进行仿真
,
演示视频使用的是Proteus8.9版本;资料包里有相关软件包,可自行下载安装。
四:程序打开方法
特别注意:下载资料包以后一定要先解压
!
!
!(
建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。
程序部分展示,有中文注释,新手容易看懂
//定义数码管的引脚
#define SEG_A PC(12)
#define SEG_B PC(11)
#define SEG_C PC(10)
#define SEG_D PC(9)
#define SEG_E PC(8)
#define SEG_F PC(7)
#define SEG_G PC(6)
#define SEG_DP PC(5)
#define SEG1 PC(4)
#define SEG2 PC(3)
#define SEG3 PC(2)
#define SEG4 PC(1)
//定义数按键的引脚
#define K1 PBIN(15)
#define K2 PBIN(14)
#define K3 PBIN(13)
//共阳数码管段码表0-F
const char CAseg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阴数码管段码表0-F
const char CCseg_table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 Time_count=0;
int buf=1000;//计数
//初始化引脚
void GPIO_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_All);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_All);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
//把数值输出到具体的单片机引脚
void Drv_SEG(u8 num)
{
SEG_A=GETVALBIT(num,0);
SEG_B=GETVALBIT(num,1);
SEG_C=GETVALBIT(num,2);
SEG_D=GETVALBIT(num,3);
SEG_E=GETVALBIT(num,4);
SEG_F=GETVALBIT(num,5);
SEG_G=GETVALBIT(num,6);
SEG_DP=GETVALBIT(num,7);
}
//驱动数码管的函数
//mode =0表示共阳,mode=1表示共阴,可以通过这个修改
//m是要显示的数字,比如1.0就是m=10,放大10倍
void Show_num(u16 m)
{
u8 num=0,n=0;
static u8 temp_flag=0;
//数码管消隐
SEG1=0;SEG2=0;SEG3=0;SEG4=0;
switch(temp_flag)
{
case 0://左侧第1位数码管
n=m/1000;//取数据
num=CAseg_table[n];//查询数码管的断码表
Drv_SEG(num);
SEG1=1;//打开数码管显示
temp_flag++;
break;
case 1://左侧第2位数码管
n=m%1000/100;//取数据
num=CAseg_table[n];//查询数码管的断码表
Drv_SEG(num);
SEG2=1;//打开数码管显示
temp_flag++;
break;
case 2://左侧第3位数码管
n=m%100/10;//取数据
num=CAseg_table[n];//查询数码管的断码表
Drv_SEG(num);
SEG3=1;//打开数码管显示
temp_flag++;
break;
case 3://左侧第4位数码管
n=m%10;//取数据
num=CAseg_table[n];//查询数码管的断码表
Drv_SEG(num);
SEG4=1;//打开数码管显示
temp_flag=0;
break;
}
Delay_ms(10);//延时
}
五
:仿真文件(采用Prot
e
us打开)
六:资料清单展示(文件中包含的相关资料)
资料分享链接(可点击)