找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3806|回复: 2
收起左侧

我做的超声波测距LCD1602显示

[复制链接]
ID:148947 发表于 2017-2-25 10:21 | 显示全部楼层 |阅读模式
最近做的一个超声波测距程序,基于51单片机希望能帮到大家 程序挺简单的
超声波模块的工作原理可以百度得到
0.png

单片机源程序:
  1. /* 做一个中断 当按下按键式,触发trig,超声波开始工作,然后将数据显示在lcd显示屏上 */

  2. #include <reg52.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long
  6. uchar distance[5]="0000";
  7. uchar code table[]="  guai xue xi";
  8. uchar code table1[]="distance:";
  9. sbit lcden=P3^4;
  10. sbit lcdrs=P3^5;
  11. sbit dula=P3^5;
  12. sbit wela=P3^6;
  13. uint time=0;
  14. uint s=0;
  15. uchar num;
  16. sbit trig=P1^5;
  17. sbit echo=P1^6;
  18. sbit K=P3^2;
  19. void delay(uchar z)
  20. {                                               
  21.         uchar x,y;
  22.         for(x=z;x>0;x--)
  23.                 for(y=122;y>0;y--);
  24. }
  25. void csbinit()         //定时器的初始化
  26. {
  27.         EA=1;
  28.         EX0=1;
  29.         IT0=1;
  30.         TMOD=0x90;
  31.         TH1=0;TL1=0;TR1=0;
  32. }
  33. void write_com(uchar com)
  34. {
  35.         lcdrs=0;
  36.         P0=com;
  37.         delay(5);
  38.         lcden=1;
  39.         delay(5);
  40.         lcden=0;
  41. }
  42. void write_data(uchar date)
  43. {
  44.         lcdrs=1;
  45.         P0=date;
  46.         delay(5);
  47.         lcden=1;
  48.         delay(5);
  49.         lcden=0;
  50. }
  51. void lcdinit()
  52. {
  53.         dula=0;
  54.         wela=0;
  55.         lcden=0;
  56.         write_com(0x38);  //设置双行全数据显示
  57.         write_com(0x0c);  //设置开显示,不显示光标
  58.         write_com(0x06);  //写一个字符后地址加1
  59.         write_com(0x01);  //显示清0

  60. }
  61. void jldq() //xianshichengxu
  62. {  uchar num1,num2,num3;
  63.        
  64.         if(s>=12000)
  65.         {
  66.                 distance[0]='E';
  67.                 distance[1]='R';
  68.                 distance[2]='R';
  69.                 distance[3]='O';
  70.         write_com(0x80+0x40+0x9);
  71.         for(num=0;num<4;num++)
  72.         {
  73.                 write_data(distance[num]);
  74.                 delay(5);
  75.         }   
  76.         }
  77.         if((s>=10000)&&(s<12000))
  78.         {        distance[1]='.';
  79.                 distance[4]='m';
  80.                 num1=s/10000;
  81.                 num2=(s%10000)/1000;
  82.                 num3=(s%1000)/100;
  83.                 write_com(0x80+0x40+0x9);
  84.                 write_data(0x30+num1);
  85.                 write_com(0x80+0x40+0xa);
  86.                 write_data(0x30+num2);
  87.                 write_com(0x80+0x40+0xb);
  88.                 write_data(distance[1]);
  89.                 write_com(0x80+0x40+0xc);
  90.                 write_data(0x30+num3);
  91.                 write_com(0x80+0x40+0xd);
  92.                 write_data(distance[4]);
  93.         }
  94.         if((s>=1000)&&(s<10000))
  95.         {       
  96.                 num1=s/1000;
  97.                 num2=(s%1000)/100;
  98.                 num3=(s%100)/10;
  99.                 distance[1]='.';
  100.                 distance[4]='m';
  101.                 write_com(0x80+0x40+0x9);
  102.                 write_data(0x30+num1);
  103.                 write_com(0x80+0x40+0xa);
  104.                 write_data(distance[1]);
  105.                 write_com(0x80+0x40+0xb);
  106.                 write_data(0x30+num2);
  107.                 write_com(0x80+0x40+0xc);
  108.                 write_data(0x30+num3);
  109.                 write_com(0x80+0x40+0xd);
  110.                 write_data(distance[4]);       
  111.         }
  112.         if((s>=100)&&(s<1000))
  113.         {        distance[0]='0';
  114.                 distance[1]='.';
  115.                 distance[4]='m';
  116.                 num1=s/100;
  117.                 num2=(s%100)/10;
  118.                 write_com(0x80+0x40+0x9);
  119.                 write_data(distance[0]);
  120.                 write_com(0x80+0x40+0xa);
  121.                 write_data(distance[1]);
  122.                 write_com(0x80+0x40+0xb);
  123.                 write_data(0x30+num1);
  124.                 write_com(0x80+0x40+0xc);
  125.                 write_data(0x30+num2);
  126.                 write_com(0x80+0x40+0xd);
  127.                 write_data(distance[4]);       
  128.         }
  129.         if(s<100)
  130.         {
  131.                  distance[0]='0';
  132.                 distance[1]='.';
  133.                 distance[2]='0';
  134.                 distance[4]='m';
  135.                 num1=s/10;
  136.                 write_com(0x80+0x40+0x9);
  137.                 write_data(distance[0]);
  138.                 write_com(0x80+0x40+0xa);
  139.                 write_data(distance[1]);
  140.                 write_com(0x80+0x40+0xb);
  141.                 write_data(distance[2]);
  142.                 write_com(0x80+0x40+0xc);
  143.                 write_data(0x30+num1);
  144.                 write_com(0x80+0x40+0xd);
  145.                 write_data(distance[4]);
  146.         }
  147.         if(s<10)
  148.         {        distance[0]='E';
  149.                 distance[1]='R';
  150.                 distance[2]='R';
  151.                 distance[3]='O';
  152.                 write_com(0x80+0x40+0x9);
  153.         for(num=0;num<4;num++)
  154.         {
  155.                 write_data(distance[num]);
  156.                 delay(5);
  157.         }   
  158.        
  159.         }
  160. }

  161. main()
  162. {
  163.         lcdinit();
  164.         csbinit();
  165.         echo=0;
  166.        
  167.        
  168.         write_com(0x80);
  169.         for(num=0;num<13;num++)
  170.         {
  171.                 write_data(table[num]);
  172.                 delay(5);
  173.         }
  174.                 write_com(0x80+0x40);
  175.         for(num=0;num<9;num++)
  176.         {
  177.                 write_data(table1[num]);
  178.                 delay(5);
  179.         }
  180.                 write_com(0x80+0x40+0x9);
  181.         for(num=0;num<4;num++)
  182.         {
  183.                 write_data(distance[num]);
  184.                 delay(5);
  185.         }
  186.         //////////
  187.         while(1)
  188.         {   while(echo!=1);
  189.                 TR1=1;
  190.                 while(echo==1);
  191.                 TR1=0;
  192.                 time=256*TH1+TL1;
  193.                 s=(time*0.17);//算出来的是mm
  194.        
  195.                 write_com(0x80);
  196.         for(num=0;num<11;num++)
  197.         {
  198.                 write_data(table[num]);
  199.                 delay(5);
  200.         }
  201.                 write_com(0x80+0x40);
  202.         for(num=0;num<9;num++)
  203.         {
  204.                 write_data(table1[num]);
  205.                 delay(5);
  206.         }
  207.         jldq();
  208.         }
  209.   }
  210. void int0() interrupt 0
  211. {
  212.         TH1=0;TL1=0;
  213.         trig=1;
  214.         delay(20);
  215.         trig=0;
  216. }
复制代码


超声波测距及实时显示.zip

38.59 KB, 下载次数: 52, 下载积分: 黑币 -5

回复

使用道具 举报

ID:224003 发表于 2017-9-16 20:52 | 显示全部楼层
7.27m,单位搞错了吧,看图上没那么远的吧
回复

使用道具 举报

ID:224003 发表于 2017-9-16 20:53 | 显示全部楼层
7.27m,单位搞错了吧,看图上没那么远吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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