找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3161|回复: 3
打印 上一主题 下一主题
收起左侧

用vb上位机控制单片机测距的设计

[复制链接]
跳转到指定楼层
楼主
上午是我第一次发帖,,竟然通过了而且还奖励了88币,啧啧太美了,迫不及待的再发一个!如题也是上位机控制的单片机,不过这次高级一点:测距。

vb上位机的运行界面:

也是用vb编写的。



单片机源程序:
  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, 下载次数: 49)

源码都在一起。


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
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 单片机教程网

快速回复 返回顶部 返回列表