找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用vb上位機控制單片機測距的設(shè)計

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:354681 發(fā)表于 2018-12-30 15:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
上午是我第一次發(fā)帖,,竟然通過了而且還獎勵了88幣,嘖嘖太美了,迫不及待的再發(fā)一個!如題也是上位機控制的單片機,不過這次高級一點:測距。

vb上位機的運行界面:

也是用vb編寫的。



單片機源程序:
  1. /*****************************************
  2. *    項目: 單片VB上位機視頻教程        *
  3. *  單片機: STC89C52                                         *
  4. *    晶振: 11.0592M                                         *
  5. *    開發(fā): E動力電子工作室                         *
  6. *    作者: LinHill                                         *
  7. *    郵箱: power_e@126.com                         *
  8. ******************************************/

  9. #include <reg52.h>

  10. #define uchar unsigned  char
  11. #define uint  unsigned  int  

  12. sbit  Echo = P2^0;                            // 接Echo端
  13. sbit  Trig = P2^1;                                // 接Trig端

  14. bit flag =0;                                        // 定時器0是否溢出的標志,1表示溢出
  15. bit enable=0;                                        // 用于判斷是否允許測量,1表示允許

  16. /***********************************
  17.    函數(shù):void InitUart()
  18. ----------------------
  19.    說明:對串口進行初始化
  20.    參數(shù):無
  21. 返回值:無
  22. ***********************************/
  23. void InitUart()
  24. {
  25.     TMOD = 0x21;                                // 高4位(定時器1)用于串口,低4位(定時器0)用于超聲波計時
  26.         SCON = 0x50;        
  27.         TH1  = 0xFD;                                // 波特率 9600
  28.         TL1  = 0xFD;
  29.         ES   = 1;                                        // 允許串口中斷
  30.         ET0  = 1;                                        // 允許定時器0中斷
  31.         TR1  = 1;                                        // 開啟定時器1
  32.         EA   = 1;                                        // 開啟總中斷
  33. }


  34. /***********************************
  35.    函數(shù):void DelayMs(uint ms)
  36. ----------------------
  37.    說明:毫秒級程序延時
  38.    參數(shù):ms代表要延時的毫秒數(shù)
  39. 返回值:無
  40. ***********************************/
  41. void DelayMs(uint ms)
  42. {
  43.         uint x,y;
  44.         for(x=ms;x>0;x--)
  45.                 for(y=110;y>0;y--);
  46. }


  47. /***********************************
  48.    函數(shù):void  StartModule()
  49. ---------------------------
  50.    說明:啟動超聲波模塊
  51.    參數(shù):無
  52. 返回值:無
  53. ***********************************/
  54. void  StartModule()
  55. {
  56.         Trig=1;
  57.         DelayMs(1);
  58.         Trig=0;
  59. }


  60. /***********************************
  61.    函數(shù):uint Conut(void)
  62. ------------------------
  63.    說明:計算測到的距離
  64.    參數(shù):無
  65. 返回值:測得的距離
  66. ***********************************/
  67. uint Conut(void)
  68. {
  69.         uint time;                                               // 用于記錄測得的時間
  70.         uint ss;                                                // 用于記錄測得的距離
  71.         time = (TH0*256+TL0)*1.09;                // 總時間               
  72.         TH0=0;
  73.         TL0=0;
  74.         if(flag==1)                                                   // 如果超出測量距離,則不傳輸數(shù)據(jù)
  75.         {
  76.                 flag=0;
  77.                 ss=0;
  78.         }
  79.         else
  80.         {
  81.                 ss=time*1.7/100;                           // 空氣中聲音的速度是340m/s
  82.         }
  83.         return ss;
  84. }


  85. /***********************************
  86.    函數(shù):void send(uint dat)
  87. ---------------------------
  88.    說明:將測得的距離通過串口發(fā)送出去
  89.    參數(shù):dat是測得的距離
  90. 返回值:無
  91. ***********************************/        
  92. void Send(uint dat)
  93. {
  94.         SBUF=(dat/100)+ 48;                        // 發(fā)送 百 位
  95.         while(!TI);
  96.         TI=0;
  97.         SBUF=(dat%100/10)+48;                // 發(fā)送 十 位
  98.         while(!TI);
  99.         TI=0;
  100.         SBUF=(dat%10)+48;                        // 發(fā)送 個 位
  101.         while(!TI);
  102.         TI=0;
  103. }



  104. /***********************************
  105. 函數(shù):void main(void)
  106. ----------------------
  107.    說明:主函數(shù)
  108.    參數(shù):無
  109. 返回值:無
  110. ***********************************/
  111. void main(void)
  112. {  
  113.         uint ss;                                        // 記錄測量到的距離
  114.         InitUart();
  115.         while(1)
  116.         {
  117.                 if(enable==1)
  118.                 {
  119.                         StartModule();
  120.                         while(!Echo);                // 當RX為零時等待
  121.                         TR0=1;                            // 開啟計數(shù)
  122.                         while(Echo);                // 當RX為1計數(shù)并等待
  123.                         TR0=0;                                // 關(guān)閉計數(shù)
  124.                         ss=Conut();                        // 計算
  125.                         Send(ss);                        // 將計算的值通過串口發(fā)送出去
  126.                         DelayMs(800);
  127.                 }
  128.         }

  129. }  


  130. /***********************************
  131. 函數(shù):void Inter() interrupt 4
  132. ------------------------------
  133.    說明:串口中斷處理
  134.    參數(shù):無
  135. 返回值:無
  136. ***********************************/
  137. void Inter() interrupt 4
  138. {
  139.         if(RI==1)
  140.         {
  141.                 RI=0;
  142.                 if(SBUF == 0x01)
  143.                 {
  144.                         enable = 1;
  145.                 }
  146.                 if(SBUF == 0x02)
  147.                 {
  148.                         enable = 0;
  149.                 }
  150.         }        
  151. }


  152. /***********************************
  153. 函數(shù):void zd0() interrupt 1
  154. ------------------------------
  155.    說明:T0中斷用來計數(shù)器溢出,超過測距范圍則置flag為1
  156.    參數(shù):無
  157. 返回值:無
  158. ***********************************/
  159. void zd0() interrupt 1
  160. {
  161.         flag=1;                                
  162. }            
復(fù)制代碼

所有資料51hei提供下載:
新建文件夾.zip (44.63 KB, 下載次數(shù): 50)

源碼都在一起。


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-1-6 16:00 | 只看該作者
好資料,51黑有你更精彩
回復(fù)

使用道具 舉報

板凳
ID:465321 發(fā)表于 2019-1-9 20:22 | 只看該作者
好資料,51有你更精彩
回復(fù)

使用道具 舉報

地板
ID:467774 發(fā)表于 2019-1-14 11:18 | 只看該作者
好資料,51有你更精彩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表