找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机 vb上位机程序(超声波测距,温度显示等)

  [复制链接]
跳转到指定楼层
楼主
小弟最近在做超声波测距的上位机显示,上位机用VB显示,找了好长时间没有找到设计资料,索性x了一套,有视频讲解和源程序的那种,再次跟大家分享一下。

vb上机位及源码:


单片机源程序如下:
  1. #include <reg52.h>

  2. #define uchar unsigned  char
  3. #define uint  unsigned  int  

  4. sbit  Echo = P2^0;                            // 接Echo端
  5. sbit  Trig = P2^1;                                // 接Trig端

  6. bit flag =0;                                        // 定时器0是否溢出的标志,1表示溢出
  7. bit enable=0;                                        // 用于判断是否允许测量,1表示允许

  8. /***********************************
  9.    函数:void InitUart()
  10. ----------------------
  11.    说明:对串口进行初始化
  12.    参数:无
  13. 返回值:无
  14. ***********************************/
  15. void InitUart()
  16. {
  17.     TMOD = 0x21;                                // 高4位(定时器1)用于串口,低4位(定时器0)用于超声波计时
  18.         SCON = 0x50;       
  19.         TH1  = 0xFD;                                // 波特率 9600
  20.         TL1  = 0xFD;
  21.         ES   = 1;                                        // 允许串口中断
  22.         ET0  = 1;                                        // 允许定时器0中断
  23.         TR1  = 1;                                        // 开启定时器1
  24.         EA   = 1;                                        // 开启总中断
  25. }


  26. /***********************************
  27.    函数:void DelayMs(uint ms)
  28. ----------------------
  29.    说明:毫秒级程序延时
  30.    参数:ms代表要延时的毫秒数
  31. 返回值:无
  32. ***********************************/
  33. void DelayMs(uint ms)
  34. {
  35.         uint x,y;
  36.         for(x=ms;x>0;x--)
  37.                 for(y=110;y>0;y--);
  38. }


  39. /***********************************
  40.    函数:void  StartModule()
  41. ---------------------------
  42.    说明:启动超声波模块
  43.    参数:无
  44. 返回值:无
  45. ***********************************/
  46. void  StartModule()
  47. {
  48.         Trig=1;
  49.         DelayMs(1);
  50.         Trig=0;
  51. }


  52. /***********************************
  53.    函数:uint Conut(void)
  54. ------------------------
  55.    说明:计算测到的距离
  56.    参数:无
  57. 返回值:测得的距离
  58. ***********************************/
  59. uint Conut(void)
  60. {
  61.         uint time;                                               // 用于记录测得的时间
  62.         uint ss;                                                // 用于记录测得的距离
  63.         time = (TH0*256+TL0)*1.09;                // 总时间               
  64.         TH0=0;
  65.         TL0=0;
  66.         if(flag==1)                                                   // 如果超出测量距离,则不传输数据
  67.         {
  68.                 flag=0;
  69.                 ss=0;
  70.         }
  71.         else
  72.         {
  73.                 ss=time*1.7/100;                           // 空气中声音的速度是340m/s
  74.         }
  75.         return ss;
  76. }


  77. /***********************************
  78.    函数:void send(uint dat)
  79. ---------------------------
  80.    说明:将测得的距离通过串口发送出去
  81.    参数:dat是测得的距离
  82. 返回值:无
  83. ***********************************/       
  84. void Send(uint dat)
  85. {
  86.         SBUF=(dat/100)+ 48;                        // 发送 百 位
  87.         while(!TI);
  88.         TI=0;
  89.         SBUF=(dat%100/10)+48;                // 发送 十 位
  90.         while(!TI);
  91.         TI=0;
  92.         SBUF=(dat%10)+48;                        // 发送 个 位
  93.         while(!TI);
  94.         TI=0;
  95. }



  96. /***********************************
  97. 函数:void main(void)
  98. ----------------------
  99.    说明:主函数
  100.    参数:无
  101. 返回值:无
  102. ***********************************/
  103. void main(void)
  104. {  
  105.         uint ss;                                        // 记录测量到的距离
  106.         InitUart();
  107.         while(1)
  108.         {
  109.                 if(enable==1)
  110.                 {
  111.                         StartModule();
  112.                         while(!Echo);                // 当RX为零时等待
  113.                         TR0=1;                            // 开启计数
  114.                         while(Echo);                // 当RX为1计数并等待
  115.                         TR0=0;                                // 关闭计数
  116.                         ss=Conut();                        // 计算
  117.                         Send(ss);                        // 将计算的值通过串口发送出去
  118.                         DelayMs(800);
  119.                 }
  120.         }

  121. }  


  122. /***********************************
  123. 函数:void Inter() interrupt 4
  124. ------------------------------
  125.    说明:串口中断处理
  126.    参数:无
  127. 返回值:无
  128. ***********************************/
  129. void Inter() interrupt 4
  130. {
  131.         if(RI==1)
  132.         {
  133.                 RI=0;
  134.                 if(SBUF == 0x01)
  135.                 {
  136.                         enable = 1;
  137.                 }
  138.                 if(SBUF == 0x02)
  139.                 {
  140.                         enable = 0;
  141.                 }
  142.         }       
  143. }


  144. /***********************************
  145. 函数:void zd0() interrupt 1
  146. ------------------------------
  147.    说明:T0中断用来计数器溢出,超过测距范围则置flag为1
  148.    参数:无
  149. 返回值:无
  150. ***********************************/
  151. void zd0() interrupt 1
  152. {
  153.         flag=1;                               
  154. }            
复制代码

所有资料51hei提供下载:
单片机程序.zip (40.35 KB, 下载次数: 52)
VB上位机程序.zip (8.04 KB, 下载次数: 68)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:482017 发表于 2019-4-26 22:49 | 只看该作者
没有人顶一下吗 这么好的精华帖

评分

参与人数 1黑币 +8 收起 理由
zqy181818 + 8

查看全部评分

回复

使用道具 举报

板凳
ID:484435 发表于 2019-4-27 11:01 | 只看该作者
感谢楼主分享
回复

使用道具 举报

地板
ID:51321 发表于 2019-4-28 12:28 | 只看该作者

感谢楼主分享
回复

使用道具 举报

5#
ID:431514 发表于 2019-4-29 07:27 | 只看该作者
没有人顶一下吗 这么好的精华帖
回复

使用道具 举报

6#
ID:405273 发表于 2019-5-28 10:49 | 只看该作者
这个程序不行啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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