標(biāo)題: 用vb上位機(jī)控制單片機(jī)測(cè)距的設(shè)計(jì) [打印本頁(yè)]

作者: 大青衣    時(shí)間: 2018-12-30 15:56
標(biāo)題: 用vb上位機(jī)控制單片機(jī)測(cè)距的設(shè)計(jì)
上午是我第一次發(fā)帖,,竟然通過(guò)了而且還獎(jiǎng)勵(lì)了88幣,嘖嘖太美了,迫不及待的再發(fā)一個(gè)!如題也是上位機(jī)控制的單片機(jī),不過(guò)這次高級(jí)一點(diǎn):測(cè)距。

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

也是用vb編寫(xiě)的。



單片機(jī)源程序:
  1. /*****************************************
  2. *    項(xiàng)目: 單片VB上位機(jī)視頻教程        *
  3. *  單片機(jī): STC89C52                                         *
  4. *    晶振: 11.0592M                                         *
  5. *    開(kāi)發(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.    說(shuō)明:對(duì)串口進(jìn)行初始化
  20.    參數(shù):無(wú)
  21. 返回值:無(wú)
  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;                                        // 開(kāi)啟定時(shí)器1
  32.         EA   = 1;                                        // 開(kāi)啟總中斷
  33. }


  34. /***********************************
  35.    函數(shù):void DelayMs(uint ms)
  36. ----------------------
  37.    說(shuō)明:毫秒級(jí)程序延時(shí)
  38.    參數(shù):ms代表要延時(shí)的毫秒數(shù)
  39. 返回值:無(wú)
  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.    說(shuō)明:?jiǎn)?dòng)超聲波模塊
  51.    參數(shù):無(wú)
  52. 返回值:無(wú)
  53. ***********************************/
  54. void  StartModule()
  55. {
  56.         Trig=1;
  57.         DelayMs(1);
  58.         Trig=0;
  59. }


  60. /***********************************
  61.    函數(shù):uint Conut(void)
  62. ------------------------
  63.    說(shuō)明:計(jì)算測(cè)到的距離
  64.    參數(shù):無(wú)
  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.    說(shuō)明:將測(cè)得的距離通過(guò)串口發(fā)送出去
  89.    參數(shù):dat是測(cè)得的距離
  90. 返回值:無(wú)
  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.    說(shuō)明:主函數(shù)
  108.    參數(shù):無(wú)
  109. 返回值:無(wú)
  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;                            // 開(kāi)啟計(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ì)算的值通過(guò)串口發(fā)送出去
  126.                         DelayMs(800);
  127.                 }
  128.         }

  129. }  


  130. /***********************************
  131. 函數(shù):void Inter() interrupt 4
  132. ------------------------------
  133.    說(shuō)明:串口中斷處理
  134.    參數(shù):無(wú)
  135. 返回值:無(wú)
  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.    說(shuō)明:T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍則置flag為1
  156.    參數(shù):無(wú)
  157. 返回值:無(wú)
  158. ***********************************/
  159. void zd0() interrupt 1
  160. {
  161.         flag=1;                                
  162. }            
復(fù)制代碼

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

源碼都在一起。



作者: admin    時(shí)間: 2019-1-6 16:00
好資料,51黑有你更精彩
作者: 帥鵬    時(shí)間: 2019-1-9 20:22
好資料,51有你更精彩
作者: ys519277123    時(shí)間: 2019-1-14 11:18
好資料,51有你更精彩




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1