久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12918|回復: 6
打印 上一主題 下一主題
收起左側

單片機停車位管理系統proteus仿真及源程序

[復制鏈接]
跳轉到指定樓層
樓主
一個51單片機做的停車位管理系統,是用紅外來實現探測的,下面是仿真原理圖:


停車位管理系統的所有資料下載(包含proteus仿真和單片機源代碼):
停車位管理系統.rar (234.44 KB, 下載次數: 263)


源程序:

  1. /********************************************************************************
  2. *         描述:                                                                 *
  3. *         lcd1602顯示 P0口                                                      *
  4. *         按鍵                  個位P32     十位P33                                                                                *
  5. *         紅外光對管  int1.....int4   接  P10...P13                             *
  6. *         有空位      LED-B           接  P14                                                                         *
  7. *         無空位      LED-R           接  P15                                   *
  8. *                                                                               *
  9. ********************************************************************************/

  10. #include <reg51.h>
  11. #include <intrins.h>
  12. #include <stdio.h>
  13. #define uchar unsigned char
  14. #define uint  unsigned int
  15. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

  16. sbit int1 = P2^4;
  17. sbit int2 = P2^5;
  18. sbit int3 = P2^6;
  19. sbit int4 = P2^7;
  20. sbit LEDB = P1^4;
  21. sbit LEDR = P1^5;
  22. sbit KEYG = P3^2;
  23. sbit KEYS = P3^3;
  24. sbit KEYB = P3^5;
  25. sbit CLC  = P3^4;
  26. sbit HY  =  P3^6;

  27. sbit LCD_RS = P2^0;            
  28. sbit LCD_RW = P2^1;
  29. sbit LCD_EN = P2^2;

  30. uchar code  cdis1[ ] = {"    Welcome    "};
  31. uchar code  cdis2[ ] = {"Place vacant:---"};

  32. /*********************************************************/
  33. void delay1(int ms)
  34. {
  35. unsigned char y;
  36.   while(ms--)
  37. {
  38.   for(y = 0; y<250; y++)
  39.   {
  40.    _nop_();
  41.    _nop_();
  42.    _nop_();
  43.    _nop_();
  44.   }
  45. }
  46. }
  47. /*******************************************************************/
  48. /*                                                                 */
  49. /*檢查LCD忙狀態                                                    */
  50. /*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。      */
  51. /*                                                                 */
  52. /*******************************************************************/

  53. bit lcd_busy()
  54. {                          
  55.     bit result;
  56.     LCD_RS = 0;
  57.     LCD_RW = 1;
  58.     LCD_EN = 1;
  59.     delayNOP();
  60.     result = (bit)(P0&0x80);
  61.     LCD_EN = 0;
  62.     return(result);
  63. }

  64. /*******************************************************************/
  65. /*                                                                 */
  66. /*寫指令數據到LCD                                                  */
  67. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  68. /*                                                                 */
  69. /*******************************************************************/

  70. void lcd_wcmd(uchar cmd)

  71. {                          
  72.    while(lcd_busy());
  73.     LCD_RS = 0;
  74.     LCD_RW = 0;
  75.     LCD_EN = 0;
  76.     _nop_();
  77.     _nop_();
  78.     P0 = cmd;
  79.     delayNOP();
  80.     LCD_EN = 1;
  81.     delayNOP();
  82.     LCD_EN = 0;  
  83. }

  84. /*******************************************************************/
  85. /*                                                                 */
  86. /*寫顯示數據到LCD                                                  */
  87. /*RS=H,RW=L,E=高脈沖,D0-D7=數據。                               */
  88. /*                                                                 */
  89. /*******************************************************************/

  90. void lcd_wdat(uchar dat)
  91. {                          
  92.    while(lcd_busy());
  93.     LCD_RS = 1;
  94.     LCD_RW = 0;
  95.     LCD_EN = 0;
  96.     P0 = dat;
  97.     delayNOP();
  98.     LCD_EN = 1;
  99.     delayNOP();
  100.     LCD_EN = 0;
  101. }

  102. /*******************************************************************/
  103. /*                                                                 */
  104. /*  LCD初始化設定                                                  */
  105. /*                                                                 */
  106. /*******************************************************************/

  107. void lcd_init()
  108. {
  109.     delay1(10);                  
  110.     lcd_wcmd(0x38);      //16*2顯示,5*7點陣,8位數據
  111.     delay1(5);
  112.     lcd_wcmd(0x38);         
  113.     delay1(5);
  114.     lcd_wcmd(0x38);         
  115.     delay1(5);

  116.     lcd_wcmd(0x0c);      //顯示開,關光標
  117.     delay1(5);
  118.     lcd_wcmd(0x06);      //移動光標
  119.     delay1(5);
  120.     lcd_wcmd(0x01);      //清除LCD的顯示內容
  121.     delay1(5);
  122. }

  123. /*******************************************************************/
  124. /*                                                                 */
  125. /*  設定顯示位置                                                   */
  126. /*                                                                 */
  127. /*******************************************************************/

  128. void lcd_pos(uchar pos)
  129. {                          
  130.   lcd_wcmd(pos | 0x80);  //數據指針=80+地址變量
  131. }

  132. /****************************加減運算******************************/
  133. uint j=0,i=0,k=0;
  134. uchar DATA1[11] = {'0','1','2','3','4','5','6','7','8','9','0'};


  135. /*******************************************************************/
  136. void LCD_X()
  137. {
  138.    uchar m;
  139.    lcd_pos(0);                //設置顯示位置為第一行的第1個字符
  140.          m = 0;
  141.         while(cdis1[m] != '\0')
  142.          {                         //顯示字符
  143.            lcd_wdat(cdis1[m]);
  144.            m++;
  145.          }
  146.         lcd_pos(0x40);             //設置顯示位置為第二行第1個字符
  147.          m = 0;
  148.         while(cdis2[m] != '\0')
  149.          {
  150.            lcd_wdat(cdis2[m]);      //顯示字符
  151.            m++;
  152.          }

  153. }

  154. /*******************************************************************/


  155. /*******************************************************************/

  156. void main()
  157. {
  158.      CLC  =1;
  159.      KEYG =1;
  160.      KEYS =1;
  161.          KEYB =1;
  162.            int1=1,int2=1,int3=1,int4=1;
  163.    while(1)
  164.         {   
  165.              lcd_init();                //初始化LCD            
  166.              LCD_X();
  167.          if(CLC==0)
  168.                      delay1(10);        
  169.                             if(CLC==0)
  170.                                 {     
  171.                                      lcd_pos(0x4d);   lcd_wdat(DATA1[4]); lcd_pos(0x4e);   lcd_wdat(DATA1[0]);    lcd_pos(0x4f); lcd_wdat(DATA1[0]);LEDR=0;LEDB=1;
  172.                             }
  173.                                 else
  174.                                 {
  175.                                   if()
  176.                                   if(KEYB==0)
  177.                      delay1(10);
  178.                            if(KEYB==0) {k++;}
  179.                              if(k==5) {k=0;}

  180.                   if(KEYS==0)
  181.                      delay1(10);
  182.                            if(KEYS==0) {i++;}
  183.                              if(i==10) {i=0;}

  184.                    if(KEYG==0)
  185.                      delay1(10);
  186.                        if(KEYG==0) {j++;}
  187.                              if(j==7) {j=0;}
  188.                    if(int1==1&int2==1&int3==1&int4==1)             {lcd_pos(0x4d);   lcd_wdat(DATA1[4-k]); lcd_pos(0x4e);   lcd_wdat(DATA1[0+i]);  lcd_pos(0x4f); lcd_wdat(DATA1[4+j]);LEDR=0;LEDB=1;}

  189.                   if(int1==0&int2==1&int3==1&int4==1|int1==1&int2==0&int3==1&int4==1|int1==1&int2==1&int3==0&int4==1|int1==1&int2==1&int3==1&int4==0)

  190.                                                                    {lcd_pos(0x4d);   lcd_wdat(DATA1[4-k]); lcd_pos(0x4e);   lcd_wdat(DATA1[0+i]);  lcd_pos(0x4f); lcd_wdat(DATA1[3+j]);LEDR=0;LEDB=1;}

  191.                   if(int1==0&int2==0&int3==1&int4==1|int1==0&int2==1&int3==0&int4==1|int1==0&int2==1&int3==1&int4==0|int1==1&int2==0&int3==0&int4==1|int1==1&int2==0&int3==1&int4==0|int1==1&int2==1&int3==0&int4==0)

  192.                                                                   {lcd_pos(0x4d);   lcd_wdat(DATA1[4-k]); lcd_pos(0x4e);   lcd_wdat(DATA1[0+i]);  lcd_pos(0x4f); lcd_wdat(DATA1[2+j]);LEDR=0;LEDB=1;}

  193.                   if(int1==1&int2==0&int3==0&int4==0|int1==0&int2==1&int3==0&int4==0|int1==0&int2==0&int3==1&int4==0|int1==0&int2==0&int3==0&int4==1)
  194.                              
  195.                                                             {lcd_pos(0x4d);   lcd_wdat(DATA1[4-k]); lcd_pos(0x4e);   lcd_wdat(DATA1[0+i]);  lcd_pos(0x4f); lcd_wdat(DATA1[1+j]);LEDR=0;LEDB=1;}

  196.                   if(int1==0&int2==0&int3==0&int4==0)             {lcd_pos(0x4d);   lcd_wdat(DATA1[4-k]); lcd_pos(0x4e);   lcd_wdat(DATA1[0+i]);  lcd_pos(0x4f); lcd_wdat(DATA1[0+j]);LEDR=1;LEDB=0;}
  197.                   
  198.                    if(CLC==0)
  199.                      delay1(10);        
  200.                             if(CLC==0)                          {lcd_pos(0x4d);   lcd_wdat(DATA1[4]); lcd_pos(0x4e);   lcd_wdat(DATA1[0]);    lcd_pos(0x4f); lcd_wdat(DATA1[0]);LEDR=0;LEDB=1; }
  201.                                 }
  202.                   
  203.          
  204.                            
  205.                   
  206.                  IT1=1;
  207.              EX1=1;
  208.              EA=1;
  209.                  }
  210. }
  211.         
復制代碼




評分

參與人數 1黑幣 +5 收起 理由
小duangduang + 5 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:171206 發表于 2017-3-17 17:13 | 只看該作者
請問為什么用了四路紅外,用兩路一個檢測進入另外一個檢測駛出,就夠了吧
回復

使用道具 舉報

板凳
ID:130231 發表于 2017-3-20 12:17 | 只看該作者
好技能!感謝樓主您的分享。
回復

使用道具 舉報

地板
ID:185860 發表于 2017-4-3 22:07 | 只看該作者
你還,仿真圖有一點沒看懂。可以請教一下嗎?謝謝了
回復

使用道具 舉報

5#
ID:205469 發表于 2017-5-28 14:32 | 只看該作者
親,你這仿真的無車位提示燈一直是亮著,而有車位指示燈一直是滅著的,請問這是程序的問題嗎?我直接用您的程序仿真的,沒做任何修改
回復

使用道具 舉報

6#
ID:219811 發表于 2017-7-17 11:24 | 只看該作者
請問這個有沒有紅外模塊啊 還是要自己動手焊
回復

使用道具 舉報

7#
ID:739355 發表于 2020-4-27 15:29 | 只看該作者
樓主,可以單就這個坐一期的仿真說明嗎  ,有的地方實在是看不懂
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费视频在线观看 | 日韩av成人在线 | 国产精品久久久久久久久图文区 | 国产不卡一区 | 国产精品免费高清 | 97综合在线| 男人的天堂中文字幕 | 欧美一区二区免费 | jizz18国产| 精品一区二区三区中文字幕 | 羞羞视频网站 | 久久99国产精一区二区三区 | 久久亚洲综合 | 欧美日韩高清在线一区 | 99热这里有精品 | 精品国产乱码久久久久久牛牛 | 蜜桃av一区二区三区 | 国产日韩久久 | 国产乱肥老妇国产一区二 | 看片国产 | 欧美亚洲免费 | 久久精品久久久 | 日韩视频在线一区 | 成人在线精品视频 | 日韩影院在线 | 国产精品亚洲综合 | 成年免费大片黄在线观看岛国 | 情侣黄网站免费看 | 91精品久久久久久久久中文字幕 | 欧美日韩国产一区二区三区 | 91视视频在线观看入口直接观看 | 日韩免费在线视频 | 中文字幕第二十页 | 浮生影院免费观看中文版 | 欧美 日韩 在线播放 | 久久久久久网站 | 老妇激情毛片免费 | 夜夜草视频 | 国产成人啪免费观看软件 | 国产激情一区二区三区 | 九色.com |