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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3626|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)超聲波車位系統(tǒng)Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在proteus中通過(guò)3個(gè)超聲波檢測(cè)距離實(shí)現(xiàn)對(duì)車位剩余數(shù)量的檢測(cè)

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


單片機(jī)源程序如下:
  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. // 毫秒級(jí)的延時(shí)函數(shù),time是要延時(shí)的毫秒數(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點(diǎn)陣,8位數(shù)據(jù)口
  60.         LcdWriteCmd(0x0C);        // 開(kāi)顯示,不顯示光標(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);                                // 個(gè)位
  92. }


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

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

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

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

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

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

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

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

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

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

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

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

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

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

  138.         sa=((TH0*256+TL0)*0.034)/2;                // 距離cm=(時(shí)間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;                                                                                        // 選擇定時(shí)器0,并且確定是工作方式1(為了超聲波模塊測(cè)量距離計(jì)時(shí)用的)

  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();                                                        // 通過(guò)超聲波模塊獲取距離
  190.                   LcdGotoXY(0,2);                                                           // 定位到第1行第2列
  191.                   LcdPrintNum(distS);                                                        // 將獲取到的距離在液晶上面顯示
  192.                   detection(distS,'S');
  193.                
  194.                   distP=GetDistanceP();                                                        // 通過(guò)超聲波模塊獲取距離
  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提供下載:
超聲波車位檢測(cè)Y.zip (82.03 KB, 下載次數(shù): 73)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:89286 發(fā)表于 2020-3-3 22:10 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報(bào)

板凳
ID:708403 發(fā)表于 2020-3-24 16:46 | 只看該作者
這個(gè)超聲波測(cè)距是怎么畫出來(lái)的,為啥我找不到啊

回復(fù)

使用道具 舉報(bào)

地板
ID:404470 發(fā)表于 2020-3-26 14:06 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区黄 | 狠狠骚| 伊人精品在线视频 | 国产精品久久久久久久久大全 | 人人干人人干人人干 | 欧美激情va永久在线播放 | 国产精品视频不卡 | 中文字幕在线观 | 国产欧美精品一区二区色综合朱莉 | 国产精品视频一二三区 | 91大神在线资源观看无广告 | 欧美精品久久久久久久久久 | 在线成人免费视频 | 羞视频在线观看 | 欧美国产日本一区 | 欧美日韩亚洲国产 | 精品国产一区二区三区成人影院 | 在线观看日韩精品视频 | 91久久国产精品 | 天天操夜夜看 | 国产一区二区在线播放 | 蜜臀久久99精品久久久久久宅男 | av激情在线 | 色婷婷亚洲国产女人的天堂 | 1000部精品久久久久久久久 | 午夜欧美一区二区三区在线播放 | 超碰97免费在线 | 日韩精品视频在线 | 欧美乱人伦视频 | 久久久久久久一级 | 91操操操 | 久久青视频| 日日干日日操 | 国产极品粉嫩美女呻吟在线看人 | 亚洲成在线观看 | 久久精品视频网站 | 高清视频一区二区三区 | 亚洲激情在线观看 | 欧美黄 片免费观看 | 中文字幕一区二区三区不卡在线 | 中文天堂网 |