找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4247|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机智能车库(停车场车位管理)系统Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
ID:634529 发表于 2021-4-28 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>                 //调用单片机头文件
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535
  4. #include <intrins.h>
  5.   
  6. sbit K1=P1^0;
  7. sbit K2=P1^1;

  8. sbit K3=P1^2;
  9. sbit K4=P1^3;

  10. sbit beep = P1^7;   //蜂鸣器IO口定义
  11. sbit LED=P3^4;
  12. sbit SH = P3^5;
  13. sbit ST = P3^6;
  14. sbit DS = P3^7;

  15. sbit DCMOTOR=P3^3;  //L298电机驱动控制引脚


  16. uchar num_jin;
  17. uchar num_chu;
  18. uchar num_car;

  19.         uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};   //??
  20.         uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};    //??
  21.          
  22.         void DCmotorOpen();
  23.         void DCmotorClose();
  24.         void motor_ting(uint n);
  25. #include "lcd1602.h"

  26. /***********************1ms延时函数*****************************/
  27. void delay_1ms(uint q)
  28. {
  29.         uint i,j;
  30.         for(i=0;i<q;i++)
  31.                 for(j=0;j<120;j++);
  32. }
  33. /****步进电机驱动模块****/
  34. void delay(uint ms)
  35. {  
  36.           uint t;  
  37.     while(ms--)   
  38.    for(t=0;t<120;t++);
  39. }  
  40.    void motor_zz(uint n)
  41. {
  42.          uint i,j;  
  43.    for(i=0;i<5*n;i++)
  44. {
  45.          for(j=0;j<8;j++)  
  46. {      
  47.    P2=zz[j];
  48.    LED=1;   
  49.    delay(20);   
  50.    }   
  51.   }
  52. }   
  53. void motor_fz(uint n)
  54. {  
  55.         uint i,j;  
  56.   for(i=0;i<5*n;i++)  
  57. {
  58.   for(j=0;j<8;j++)
  59. {
  60.   P2=fz[j];
  61.         LED=0;
  62.   delay(20);

  63.   }
  64. }
  65. }
  66. void motor_ting(uint n)
  67. {  
  68.   P2=0x00;
  69.   delay(2000);
  70. }

  71. void write_74hc595(unsigned int num)
  72. {
  73.         int i;       
  74.         ST = 0;
  75.         for(i=0; i<16; i++)
  76.         {
  77.                 SH = 0;
  78.                 if (num & 0x0001)
  79.                 {
  80.                         DS = 1;
  81.                 }
  82.                 else
  83.                 {
  84.                         DS = 0;
  85.                 }
  86.                 SH = 1;
  87.                 num >>= 1;
  88.         }
  89.         ST = 1;
  90. }

  91. unsigned int num_2_led(unsigned int num)
  92. {
  93.         int i;
  94.         unsigned int ret=0;
  95.         if (num >= 16)
  96.             return 0xFFFF;
  97.         for(i=0;i<num;i++)
  98.         {
  99.                 ret |= 1<<i;
  100.         }
  101.         return ret;
  102. }

  103. void key()         //独立按键程序
  104. {
  105.         if(!K1)               //           汽车进入
  106.           {
  107.                 delay_1ms(20);
  108.                 if(!K1)
  109.                   {
  110.             while(!K1);
  111.                                 motor_zz(1);//步进电机启动开闸门
  112.                                 motor_ting(2);
  113.                         if(num_car==16)       
  114.      {
  115.        beep=0;         delay_1ms(200);  beep=1;
  116.      }
  117.      if(num_car<16)         
  118.      {
  119.       num_car++;
  120.       motor_fz(1);//步进电机启动开闸门                         
  121.                          if(num_car>=6)
  122.                          {
  123.                                  DCmotorOpen();
  124.                          }
  125.      if(num_jin<=255)
  126.      {
  127.       num_jin++;
  128.      }  
  129.      }
  130.                         write_sfm2(1,4,num_jin);
  131.                         write_sfm2(1,12,num_chu);  
  132.                         write_sfm2(2,4,num_car);
  133.                     write_sfm2(2,12,16-num_car);  
  134.                         write_74hc595(num_2_led(num_car));
  135.                   }
  136.         }       
  137.         if(!K2)               //          //           汽车驶出
  138. {
  139.                 delay_1ms(20);
  140.                 if(!K2)
  141.                   {
  142.             while(!K2);
  143.                                 motor_zz(1);
  144.                                 motor_ting(2);
  145.            if(num_car>=1)
  146.       {       
  147.          num_car--;  
  148.                                 motor_fz(1);
  149.         if(num_chu<=255)
  150.       {   
  151.         num_chu++;
  152.       }  
  153. }       
  154.                     write_sfm2(1,4,num_jin);
  155.                         write_sfm2(1,12,num_chu);  
  156.                         write_sfm2(2,4,num_car);
  157.                     write_sfm2(2,12,16-num_car);  
  158.                         write_74hc595(num_2_led(num_car));
  159.                   }
  160.         }               

  161. /***********************手动修改小区内停车位*************************************/
  162.         if(!K3)               //                    人工调节
  163.           {
  164.                 delay_1ms(20);
  165.                 if(!K3)
  166.                   {
  167.             while(!K3);
  168.                    if(num_car<16)       
  169.       {  
  170.        num_car++;
  171.       }
  172.                         write_sfm2(1,4,num_jin);
  173.                         write_sfm2(1,12,num_chu);  
  174.                         write_sfm2(2,4,num_car);
  175.                     write_sfm2(2,12,16-num_car);  
  176.                   }
  177.         }       
  178.         if(!K4)               //          //                    人工调节
  179.           {
  180.                 delay_1ms(20);
  181.                 if(!K4)
  182.                   {
  183.             while(!K4);
  184.            if(num_car>=1)
  185.       {         
  186.            num_car--;  
  187.       }       
  188.                     write_sfm2(1,4,num_jin);
  189.                         write_sfm2(1,12,num_chu);  
  190.                         write_sfm2(2,4,num_car);
  191.                     write_sfm2(2,12,16-num_car);  
  192.                   }
  193.         }                               
  194. }                       
  195. void DCmotorOpen()
  196. {
  197. ……………………

  198. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
满分51hei设计单片机的停车场车位管理系统.7z (3.09 MB, 下载次数: 216)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:911601 发表于 2021-6-4 13:52 | 只看该作者
你好,请问一下那个步进电机如何运行?
回复

使用道具 举报

板凳
ID:328014 发表于 2021-6-4 20:41 | 只看该作者
小坤总 发表于 2021-6-4 13:52
你好,请问一下那个步进电机如何运行?

按键就动了,看我图

51hei.gif (319.15 KB, 下载次数: 124)

51hei.gif
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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