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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3933|回復: 3
收起左側

用vb上位機控制單片機測距的設計

[復制鏈接]
ID:354681 發表于 2018-12-30 15:56 | 顯示全部樓層 |閱讀模式
上午是我第一次發帖,,竟然通過了而且還獎勵了88幣,嘖嘖太美了,迫不及待的再發一個!如題也是上位機控制的單片機,不過這次高級一點:測距。

vb上位機的運行界面:
捕獲.PNG
也是用vb編寫的。

捕獲2.PNG

單片機源程序:
  1. /*****************************************
  2. *    項目: 單片VB上位機視頻教程        *
  3. *  單片機: STC89C52                                         *
  4. *    晶振: 11.0592M                                         *
  5. *    開發: 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.    函數:void InitUart()
  18. ----------------------
  19.    說明:對串口進行初始化
  20.    參數:無
  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.    函數:void DelayMs(uint ms)
  36. ----------------------
  37.    說明:毫秒級程序延時
  38.    參數:ms代表要延時的毫秒數
  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.    函數:void  StartModule()
  49. ---------------------------
  50.    說明:啟動超聲波模塊
  51.    參數:無
  52. 返回值:無
  53. ***********************************/
  54. void  StartModule()
  55. {
  56.         Trig=1;
  57.         DelayMs(1);
  58.         Trig=0;
  59. }


  60. /***********************************
  61.    函數:uint Conut(void)
  62. ------------------------
  63.    說明:計算測到的距離
  64.    參數:無
  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)                                                   // 如果超出測量距離,則不傳輸數據
  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.    函數:void send(uint dat)
  87. ---------------------------
  88.    說明:將測得的距離通過串口發送出去
  89.    參數:dat是測得的距離
  90. 返回值:無
  91. ***********************************/        
  92. void Send(uint dat)
  93. {
  94.         SBUF=(dat/100)+ 48;                        // 發送 百 位
  95.         while(!TI);
  96.         TI=0;
  97.         SBUF=(dat%100/10)+48;                // 發送 十 位
  98.         while(!TI);
  99.         TI=0;
  100.         SBUF=(dat%10)+48;                        // 發送 個 位
  101.         while(!TI);
  102.         TI=0;
  103. }



  104. /***********************************
  105. 函數:void main(void)
  106. ----------------------
  107.    說明:主函數
  108.    參數:無
  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;                            // 開啟計數
  122.                         while(Echo);                // 當RX為1計數并等待
  123.                         TR0=0;                                // 關閉計數
  124.                         ss=Conut();                        // 計算
  125.                         Send(ss);                        // 將計算的值通過串口發送出去
  126.                         DelayMs(800);
  127.                 }
  128.         }

  129. }  


  130. /***********************************
  131. 函數:void Inter() interrupt 4
  132. ------------------------------
  133.    說明:串口中斷處理
  134.    參數:無
  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. 函數:void zd0() interrupt 1
  154. ------------------------------
  155.    說明:T0中斷用來計數器溢出,超過測距范圍則置flag為1
  156.    參數:無
  157. 返回值:無
  158. ***********************************/
  159. void zd0() interrupt 1
  160. {
  161.         flag=1;                                
  162. }            
復制代碼

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

評分

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

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2019-1-6 16:00 | 顯示全部樓層
好資料,51黑有你更精彩
回復

使用道具 舉報

ID:465321 發表于 2019-1-9 20:22 | 顯示全部樓層
好資料,51有你更精彩
回復

使用道具 舉報

ID:467774 發表于 2019-1-14 11:18 | 顯示全部樓層
好資料,51有你更精彩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲激精日韩激精欧美精品 | 精品一区二区三区免费视频 | 亚洲影视在线 | 欧美日韩视频在线播放 | 99reav| 久久精品一区二区三区四区 | 天天影视亚洲综合网 | 欧一区二区 | 久久亚洲国产 | 久久69精品久久久久久久电影好 | 成人影视网址 | 国产精品免费观看 | 免费一区 | 久久精品亚洲精品国产欧美kt∨ | xx性欧美肥妇精品久久久久久 | 久久久av | 精品国产一区二区三区久久 | 人成在线视频 | 91一区二区三区 | 在线观看中文字幕 | 爱综合| 欧美日韩在线一区二区 | 久久久久久久网 | 精品久久久av | 国产欧美在线 | 日本一本视频 | 成人精品毛片 | 福利社午夜影院 | 视频1区2区| 亚洲人成人一区二区在线观看 | 久久精品一级 | 99久久婷婷 | 91福利在线观看视频 | 国产精品美女久久久久久免费 | 亚洲一区二区三区在线播放 | 成人不卡 | 91亚洲精品在线观看 | 久久午夜精品 | 亚洲欧洲在线视频 | 日韩精品在线观看网站 | 亚洲激情在线观看 |