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

標(biāo)題: 51單片機超聲波車位系統(tǒng)Proteus仿真程序 [打印本頁]

作者: bioo97    時間: 2020-3-1 16:24
標(biāo)題: 51單片機超聲波車位系統(tǒng)Proteus仿真程序
在proteus中通過3個超聲波檢測距離實現(xiàn)對車位剩余數(shù)量的檢測

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char        // 以后unsigned char就可以用uchar代替
  4. #define uint  unsigned int       

  5. uint dis_temp=50;
  6. uint Margin;
  7. uint cwA,cwP,cwS;

  8. sbit LcdRs_P   = P2^7;                // 1602液晶的RS管腳      
  9. sbit LcdRw_P   = P2^6;                // 1602液晶的RW管腳
  10. sbit LcdEn_P   = P2^5;                // 1602液晶的EN管腳
  11. sbit Trig_P    = P2^2;                // 超聲波模塊的Trig管腳
  12. sbit Echo_P    = P2^3;                // 超聲波模塊的Echo管腳
  13. sbit Trig_A    = P2^0;                // 超聲波模塊的Trig管腳
  14. sbit Echo_A    = P2^1;                // 超聲波模塊的Echo管腳
  15. sbit Trig_S    = P1^6;                // 超聲波模塊的Trig管腳
  16. sbit Echo_S    = P1^7;                // 超聲波模塊的Echo管腳


  17. /*********************************************************/
  18. // 毫秒級的延時函數(shù),time是要延時的毫秒數(shù)
  19. /*********************************************************/
  20. void DelayMs(uint time)
  21. {
  22.         uint i,j;
  23.         for(i=0;i<time;i++)
  24.                 for(j=0;j<112;j++);
  25. }


  26. /*********************************************************/
  27. // 1602液晶寫命令函數(shù),cmd就是要寫入的命令
  28. /*********************************************************/
  29. void LcdWriteCmd(uchar cmd)
  30. {
  31.         LcdRs_P = 0;
  32.         LcdRw_P = 0;
  33.         LcdEn_P = 0;
  34.         P0=cmd;
  35.         DelayMs(2);
  36.         LcdEn_P = 1;   
  37.         DelayMs(2);
  38.         LcdEn_P = 0;       
  39. }


  40. /*********************************************************/
  41. // 1602液晶寫數(shù)據(jù)函數(shù),dat就是要寫入的數(shù)據(jù)
  42. /*********************************************************/
  43. void LcdWriteData(uchar dat)
  44. {
  45.         LcdRs_P = 1;
  46.         LcdRw_P = 0;
  47.         LcdEn_P = 0;
  48.         P0=dat;
  49.         DelayMs(2);
  50.         LcdEn_P = 1;   
  51.         DelayMs(2);
  52.         LcdEn_P = 0;
  53. }


  54. /*********************************************************/
  55. // 1602液晶初始化函數(shù)
  56. /*********************************************************/
  57. void LcdInit()
  58. {
  59.         LcdWriteCmd(0x38);        // 16*2顯示,5*7點陣,8位數(shù)據(jù)口
  60.         LcdWriteCmd(0x0C);        // 開顯示,不顯示光標(biāo)
  61.         LcdWriteCmd(0x06);        // 地址加1,當(dāng)寫入數(shù)據(jù)后光標(biāo)右移
  62.         LcdWriteCmd(0x01);        // 清屏
  63. }


  64. /*********************************************************/
  65. // 液晶光標(biāo)定位函數(shù)
  66. /*********************************************************/
  67. void LcdGotoXY(uchar line,uchar column)
  68. {
  69.         // 第一行
  70.         if(line==0)        
  71.                 LcdWriteCmd(0x80+column);
  72.         // 第二行
  73.         if(line==1)        
  74.                 LcdWriteCmd(0x80+0x40+column);
  75. }



  76. /*********************************************************/
  77. // 液晶輸出字符串函數(shù)
  78. /*********************************************************/
  79. void LcdPrintStr(uchar *str)
  80. {
  81.         while(*str!='\0')
  82.                         LcdWriteData(*str++);
  83. }


  84. /*********************************************************/
  85. // 液晶輸出數(shù)字
  86. /*********************************************************/
  87. void LcdPrintNum(uint num)
  88. {
  89.         LcdWriteData(num/100+0x30);                                // 百位
  90.         LcdWriteData(num%100/10+0x30);                // 十位
  91.         LcdWriteData(num%10+0x30);                                // 個位
  92. }


  93. /*********************************************************/
  94. // 計算測到的距離
  95. /*********************************************************/
  96. uint GetDistanceP(void)
  97. {
  98.         uint sp;                                        // 用于記錄測得的距離

  99.         TH0=0;
  100.         TL0=0;

  101.         Trig_P=1;                                        // 給超聲波模塊一個開始脈沖
  102.         DelayMs(1);
  103.         Trig_P=0;

  104.         while(!Echo_P);                // 等待超聲波模塊的返回脈沖
  105.         TR0=1;                                                // 啟動定時器,開始計時
  106.         while(Echo_P);                // 等待超聲波模塊的返回脈沖結(jié)束
  107.         TR0=0;                                                // 停止定時器,停止計時

  108.         sp=((TH0*256+TL0)*0.034)/2;                // 距離cm=(時間us * 速度cm/us)/2

  109.         return sp;
  110. }
  111. uint GetDistanceS(void)
  112. {
  113.         uint ss;                                        // 用于記錄測得的距離

  114.         TH0=0;
  115.         TL0=0;

  116.         Trig_S=1;                                        // 給超聲波模塊一個開始脈沖
  117.         DelayMs(1);
  118.         Trig_S=0;

  119.         while(!Echo_S);                // 等待超聲波模塊的返回脈沖
  120.         TR0=1;                                                // 啟動定時器,開始計時
  121.         while(Echo_S);                // 等待超聲波模塊的返回脈沖結(jié)束
  122.         TR0=0;                                                // 停止定時器,停止計時

  123.         ss=((TH0*256+TL0)*0.034)/2;                // 距離cm=(時間us * 速度cm/us)/2

  124.         return ss;
  125. }
  126. uint GetDistanceA(void)
  127. {
  128.         uint sa;                                        // 用于記錄測得的距離

  129.         TH0=0;
  130.         TL0=0;

  131.         Trig_A=1;                                        // 給超聲波模塊一個開始脈沖
  132.         DelayMs(1);
  133.         Trig_A=0;

  134.         while(!Echo_A);                // 等待超聲波模塊的返回脈沖
  135.         TR0=1;                                                // 啟動定時器,開始計時
  136.         while(Echo_A);                // 等待超聲波模塊的返回脈沖結(jié)束
  137.         TR0=0;                                                // 停止定時器,停止計時

  138.         sa=((TH0*256+TL0)*0.034)/2;                // 距離cm=(時間us * 速度cm/us)/2

  139.         return sa;
  140. }
  141. void detection(uint dis,uchar buf)
  142. {
  143. if(dis>=dis_temp)
  144. {
  145. switch(buf)
  146.    {
  147.           case'S':RD = 0;cwS=1;break;     
  148.           case'P':WR = 0;cwP=1;break;
  149.           case'A':T1 = 0;cwA=1;break;                  

  150.    }
  151. }
  152. if(dis<dis_temp)
  153. {
  154.         switch(buf)
  155.    {
  156.           case'S':RD = 1;cwS=0;break;     
  157.           case'P':WR = 1;cwP=0;break;
  158.           case'A':T1 = 1;cwA=0;break;                  

  159.    }
  160. }
  161.   Margin=cwS+cwP+cwA;
  162.   LcdGotoXY(1,13);                                                          // 定位到第1行第11列
  163.         LcdWriteData(Margin%10+0x30);                                // 顯示車位余量

  164. }
  165. /*********************************************************/
  166. // 主函數(shù)
  167. /*********************************************************/
  168. void main()
  169. {
  170. //        uchar dat1,dat2;
  171.         uint distP,distA,distS;
  172.        
  173.         Trig_P=0;
  174.         Trig_A=0;
  175.         Trig_S=0;
  176.        
  177.         LcdInit();                                                                                                // 執(zhí)行液晶初始化
  178.         TMOD = 0x01;                                                                                        // 選擇定時器0,并且確定是工作方式1(為了超聲波模塊測量距離計時用的)

  179.         LcdGotoXY(0,0);                                                                    // 定位到第0行第0列
  180.         LcdPrintStr("S=   cm");        // 第0行顯示“HC-SR04 System”
  181.         LcdGotoXY(0,9);                                                                    // 定位到第0行第0列
  182.         LcdPrintStr("P=   cm");        // 第0行顯示“HC-SR04 System”
  183.         LcdGotoXY(1,0);                                                                    // 定位到第1行第0列
  184.         LcdPrintStr("A=   cm");        // 第1行顯示“S=   cm”
  185.         LcdGotoXY(1,9);                                                                    // 定位到第1行第0列
  186.         LcdPrintStr("KY:  /3");        // 第1行顯示“S=   cm”



  187.         while(1)
  188.         {
  189.             distS=GetDistanceS();                                                        // 通過超聲波模塊獲取距離
  190.                   LcdGotoXY(0,2);                                                           // 定位到第1行第2列
  191.                   LcdPrintNum(distS);                                                        // 將獲取到的距離在液晶上面顯示
  192.                   detection(distS,'S');
  193.                
  194.                   distP=GetDistanceP();                                                        // 通過超聲波模塊獲取距離
  195.                   LcdGotoXY(0,11);                                                          // 定位到第1行第11列
  196.                   LcdPrintNum(distP);                                                        // 將獲取到的距離在液晶上面顯示
  197.                          detection(distP,'P');
  198.                
  199.             distA=GetDistanceA();                                                       
  200.                   LcdGotoXY(1,2);                                                            // 定位到第2行第11列
  201.                   LcdPrintNum(distA);                                                       
  202.                          detection(distA,'A');
  203.                


  204.         }
  205. }
復(fù)制代碼

所有資料51hei提供下載:
超聲波車位檢測Y.zip (82.03 KB, 下載次數(shù): 73)




作者: faridzled    時間: 2020-3-3 22:10
thanks for sharing
作者: dddaaabbb    時間: 2020-3-24 16:46
這個超聲波測距是怎么畫出來的,為啥我找不到啊


作者: lj9862_26    時間: 2020-3-26 14:06
好資料,51黑有你更精彩!!!




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久天天 | 久久综合久色欧美综合狠狠 | 欧美极品在线 | 成人福利在线 | 天啪 | 成人在线电影在线观看 | 亚洲天堂久久新 | 999热视频 | 亚洲看片网站 | 亚洲高清视频一区 | 热久久国产| 免费精品在线视频 | 欧美电影在线观看网站 | 电影午夜精品一区二区三区 | 欧美精品1区2区 | 在线91 | 成人免费视频在线观看 | 中文字幕精品一区 | 九九热在线精品视频 | 国产精品久久久久久亚洲调教 | 国产精品一区二区不卡 | 99精品视频一区二区三区 | 亚洲天堂中文字幕 | 天天综合操| 国产成人99久久亚洲综合精品 | 欧美午夜精品 | 亚洲欧美综合 | 日韩一区二区在线播放 | 久久久久国产一区二区三区 | 中文字幕视频在线观看免费 | 一级做a爰片性色毛片 | 一区二区久久 | 日韩欧美在线免费观看 | 欧美日韩综合一区 | 尤物视频在线免费观看 | 亚洲欧美在线视频 | 亚洲性人人天天夜夜摸 | 国产美女永久免费无遮挡 | 福利片在线观看 | 久久久久久国产 | 在线黄色影院 |