找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4984|回復: 3
收起左側(cè)

51單片機智能車庫(停車場車位管理)系統(tǒng)Proteus仿真程序

[復制鏈接]
ID:634529 發(fā)表于 2021-4-28 17:24 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png 51hei.png 51hei.png

單片機源程序如下:
  1. #include <reg52.h>                 //調(diào)用單片機頭文件
  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電機驅(qū)動控制引腳


  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延時函數(shù)*****************************/
  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. /****步進電機驅(qū)動模塊****/
  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. /***********************手動修改小區(qū)內(nèi)停車位*************************************/
  162.         if(!K3)               //                    人工調(diào)節(jié)
  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)               //          //                    人工調(diào)節(jié)
  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設(shè)計單片機的停車場車位管理系統(tǒng).7z (3.09 MB, 下載次數(shù): 219)

回復

使用道具 舉報

ID:911601 發(fā)表于 2021-6-4 13:52 | 顯示全部樓層
你好,請問一下那個步進電機如何運行?
回復

使用道具 舉報

ID:328014 發(fā)表于 2021-6-4 20:41 | 顯示全部樓層
小坤總 發(fā)表于 2021-6-4 13:52
你好,請問一下那個步進電機如何運行?

按鍵就動了,看我圖
51hei.gif
回復

使用道具 舉報

ID:344646 發(fā)表于 2025-5-14 23:51 | 顯示全部樓層
挺好的,加了個步進電機
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表