找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2994|回复: 3
收起左侧

基于stm32的景区人流检测系统(含Proteus仿真源代码)

  [复制链接]
ID:933572 发表于 2021-6-20 00:07 | 显示全部楼层 |阅读模式
本系统基于stm32f10x为核心,数码管显示计数值和目标数量,在软件中设置目标数量可设置的最大值。通过矩阵按键设置目标数量。按键计数设置传送带计数值,按键按下计数值数量加一,计数值与目标数量比较数量相等。计数值数量重置蜂鸣器报警,计数值和目标值不相等继续计数。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
_OXE2IJ}6WC~{S)_Q0V68@6.png 51hei.png

单片机源程序如下:
  1. #include "stm32f10x.h"

  2. void GPIO_Config(void);

  3. void delay(uint32_t d){
  4.         uint32_t i=0;
  5.         uint32_t n=0;
  6.   for(i=0;i<d;i++)
  7.      for(n=0;n<800;n++);
  8. }

  9. uint8_t conveyor_scan(){
  10.   if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9)==0){
  11.           return 1;
  12.   }
  13.   return 0;
  14. }

  15. void keymat_line_set(uint8_t c){
  16.    uint8_t bb[]={Bit_SET,Bit_SET,Bit_SET,Bit_SET};
  17.    bb[c]=Bit_RESET;
  18.    GPIO_WriteBit(GPIOC,GPIO_Pin_4, bb[0]);
  19.    GPIO_WriteBit(GPIOC,GPIO_Pin_5, bb[1]);
  20.    GPIO_WriteBit(GPIOC,GPIO_Pin_6, bb[2]);
  21.    GPIO_WriteBit(GPIOC,GPIO_Pin_7, bb[3]);


  22. }
  23. uint8_t keymat_scan(){

  24. keymat_line_set(0);
  25.   if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0)==0){
  26.           return 1;
  27.   }
  28.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1)==0){
  29.           return 4;
  30.   }
  31.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2)==0){
  32.           return 7;
  33.   }
  34.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3)==0){
  35.           return 0;
  36.   }

  37. keymat_line_set(1);
  38.   if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0)==0){
  39.           return 2;
  40.   }
  41.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1)==0){
  42.           return 5;
  43.   }
  44.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2)==0){
  45.           return 8;
  46.   }

  47. keymat_line_set(2);
  48.   if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0)==0){
  49.           return 3;
  50.   }
  51.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1)==0){
  52.           return 6;
  53.   }
  54.   else if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2)==0){
  55.           return 9;
  56.   }

  57.   return 10;

  58. }

  59. uint8_t xtube[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  60. void tube_show_one(uint8_t ti){

  61.          //a
  62.      if((ti&0x01)==0x01) GPIO_SetBits(GPIOA, GPIO_Pin_0);
  63.          else GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  64.          //b
  65.      if((ti&0x02)==0x02) GPIO_SetBits(GPIOA, GPIO_Pin_1);
  66.          else GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  67.          //c
  68.      if((ti&0x04)==0x04) GPIO_SetBits(GPIOA, GPIO_Pin_2);
  69.          else GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  70.          //d
  71.          if((ti&0x08)==0x08) GPIO_SetBits(GPIOA, GPIO_Pin_3);
  72.          else GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  73.          //e
  74.      if((ti&0x10)==0x10) GPIO_SetBits(GPIOA, GPIO_Pin_4);
  75.          else GPIO_ResetBits(GPIOA, GPIO_Pin_4);
  76.          //f
  77.      if((ti&0x20)==0x20) GPIO_SetBits(GPIOA, GPIO_Pin_5);
  78.          else GPIO_ResetBits(GPIOA, GPIO_Pin_5);
  79.           //g
  80.      if((ti&0x40)==0x40) GPIO_SetBits(GPIOA, GPIO_Pin_6);
  81.          else GPIO_ResetBits(GPIOA, GPIO_Pin_6);
  82.          //dp
  83.      if((ti&0x80)==0x80) GPIO_SetBits(GPIOA, GPIO_Pin_7);
  84.          else GPIO_ResetBits(GPIOA, GPIO_Pin_7);
  85.          
  86. }


  87. void tube_open_place(uint8_t c){
  88.    uint8_t bb[]={0,Bit_SET,Bit_SET,Bit_SET,Bit_SET};
  89.    
  90.    bb[c]=Bit_RESET;

  91.    GPIO_WriteBit(GPIOA,GPIO_Pin_8, bb[1]);
  92.    GPIO_WriteBit(GPIOA,GPIO_Pin_9, bb[2]);
  93.    GPIO_WriteBit(GPIOA,GPIO_Pin_10, bb[3]);
  94.    GPIO_WriteBit(GPIOA,GPIO_Pin_11, bb[4]);


  95. }


  96. void tube_show_data(uint8_t num,uint8_t max){
  97.    uint8_t nmu_s=num/10;
  98.          uint8_t num_g=num%10;
  99.         
  100.    uint8_t max_s=max/10;
  101.          uint8_t max_g=max%10;
  102.         
  103.          tube_open_place(0);
  104.    tube_show_one(xtube[nmu_s]);
  105.          tube_open_place(1);
  106.          delay(10);

  107.          tube_open_place(0);
  108.          tube_show_one(xtube[num_g]);
  109.          tube_open_place(2);
  110.          delay(10);

  111.          tube_open_place(0);
  112.          tube_show_one(xtube[max_s]);
  113.          tube_open_place(3);
  114.          delay(10);
  115.          
  116.          tube_open_place(0);
  117.          tube_show_one(xtube[max_g]);
  118.          tube_open_place(4);
  119.          delay(10);
  120. }

  121. void beep_on(){
  122.   GPIO_ResetBits(GPIOB, GPIO_Pin_6);
  123. }

  124. void beep_off(){
  125.   GPIO_SetBits(GPIOB, GPIO_Pin_6);
  126. }

  127. uint8_t SYS_NUM=0;
  128. uint8_t SYS_MAX=99;
  129. uint8_t warn_num=0;
  130. uint8_t keymtv=0;
  131. uint8_t keymtv_last=10;
  132. uint8_t keyv=0;
  133. uint8_t keyv_last=0;
  134. uint8_t w_s_g_flg=0;
  135. int main(void)
  136. {        

  137.         uint8_t flag=0;
  138.         GPIO_Config();
  139. ……………………

  140. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
51hei.png
所有资料51hei提供下载:
传送带.7z (103.36 KB, 下载次数: 101)

评分

参与人数 1黑币 +70 收起 理由
admin + 70 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:404913 发表于 2021-6-26 21:23 | 显示全部楼层
运行时缺少定义文件吧,而且好多文件都的自己添加,要安装哪个版本的库?
回复

使用道具 举报

ID:387687 发表于 2022-3-14 17:27 | 显示全部楼层
迷一样谦谦公子 发表于 2021-6-26 21:23
运行时缺少定义文件吧,而且好多文件都的自己添加,要安装哪个版本的库?


运行时缺少定义文件!!!
回复

使用道具 举报

ID:190577 发表于 2022-8-10 08:59 | 显示全部楼层

运行时缺少定义文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表