基于stm32单片机按键计数器人数流量统计Proteus仿真和源程序全套资料

 一:功能介绍

1、采用stm32单片机+4位数码管+按键,制作一个基于stm32单片机按键计数器人数流量统计系统;

2、通过按键进行流量统计,比如图书馆人数进出,进入按键+1,出去按键-1,可以统计出当前场所的人数;适用于需要计数统计的任何场所;

3、按下清零按键,所有数值归零;

4、数码管显示当前按键的计数值;

二:仿真演示视频+程序简要讲解:(程序有中文注释,新手容易看懂)

126-基于stm32单片机按键计数器人数流量统计Proteus仿真+源程序

三:设计软件介绍

本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,仿真采用Proteus软件进行仿真演示视频使用的是Proteus8.9版本;资料包里有相关软件包,可自行下载安装。

四:程序打开方法

特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

dbd84953e6309910c77af80ea3d2aea6.png

06433ca967c9634a3359e9d71d07b4a9.png

程序部分展示,有中文注释,新手容易看懂
#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=0;//计数
//初始化引脚
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);//延时
}


//获取独立按键数据
u8 Get_key_num()
{
  u8 temp_key=0;
  static u8 flag=0;
  if((flag==0)&&((K1==0)||(K2==0)||(K3==0)))
  {
    flag=1;//按键只获取一次按键数值
    SysTick_Delay_Ms(10);//消除抖动
    //如果有对应的按键按下就返回对应按键数值
    if(K1==0)
    {temp_key=1;}
    else if(K2==0)
    {temp_key=2;}
    else if(K3==0)
    {temp_key=3;}


  }
  else if((K1==1)&&(K2==1)&&(K3==1))
  {
    flag=0;//所有按键都弹起就清除标志
  }
  return temp_key;
}

:仿真文件(采用Proteus打开)

634743b21ed9e520c995da841c96c4a7.png

22b025e508c726376d1411327260707c.png

250c379ccd26011d37f11fddc2776c27.png

六:资料清单展示(文件中包含的相关资料)

0af8f3114fb8f500cc9633288bd521ca.png

资料下载链接(可点击)

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值