欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

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

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

vb上位機(jī)的運(yùn)行界面:

也是用vb編寫的。



單片機(jī)源程序:
  1. /*****************************************
  2. *    項(xiàng)目: 單片VB上位機(jī)視頻教程        *
  3. *  單片機(jī): STC89C52                                         *
  4. *    晶振: 11.0592M                                         *
  5. *    開發(fā): E動(dòng)力電子工作室                         *
  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;                                        // 定時(shí)器0是否溢出的標(biāo)志,1表示溢出
  15. bit enable=0;                                        // 用于判斷是否允許測(cè)量,1表示允許

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


  34. /***********************************
  35.    函數(shù):void DelayMs(uint ms)
  36. ----------------------
  37.    說明:毫秒級(jí)程序延時(shí)
  38.    參數(shù):ms代表要延時(shí)的毫秒數(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.    說明:?jiǎn)?dòng)超聲波模塊
  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.    說明:計(jì)算測(cè)到的距離
  64.    參數(shù):無
  65. 返回值:測(cè)得的距離
  66. ***********************************/
  67. uint Conut(void)
  68. {
  69.         uint time;                                               // 用于記錄測(cè)得的時(shí)間
  70.         uint ss;                                                // 用于記錄測(cè)得的距離
  71.         time = (TH0*256+TL0)*1.09;                // 總時(shí)間               
  72.         TH0=0;
  73.         TL0=0;
  74.         if(flag==1)                                                   // 如果超出測(cè)量距離,則不傳輸數(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.    說明:將測(cè)得的距離通過串口發(fā)送出去
  89.    參數(shù):dat是測(cè)得的距離
  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ā)送 個(gè) 位
  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;                                        // 記錄測(cè)量到的距離
  114.         InitUart();
  115.         while(1)
  116.         {
  117.                 if(enable==1)
  118.                 {
  119.                         StartModule();
  120.                         while(!Echo);                // 當(dāng)RX為零時(shí)等待
  121.                         TR0=1;                            // 開啟計(jì)數(shù)
  122.                         while(Echo);                // 當(dāng)RX為1計(jì)數(shù)并等待
  123.                         TR0=0;                                // 關(guān)閉計(jì)數(shù)
  124.                         ss=Conut();                        // 計(jì)算
  125.                         Send(ss);                        // 將計(jì)算的值通過串口發(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中斷用來計(jì)數(shù)器溢出,超過測(cè)距范圍則置flag為1
  156.    參數(shù):無
  157. 返回值:無
  158. ***********************************/
  159. void zd0() interrupt 1
  160. {
  161.         flag=1;                                
  162. }            
復(fù)制代碼

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

源碼都在一起。


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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