找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51hei板,超声波测距

[复制链接]
跳转到指定楼层
楼主
ID:42637 发表于 2012-7-24 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用51hei预留接口,用US-100超声波模块,1602显示,精度还行。

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd P0
sbit trig=P1^0;
sbit echo=P1^1;
sbit en=P3^4;
sbit rw=P2^7;
sbit rs=P3^5;
sbit busybit=P0^7;
sbit P24=P2^4;
sbit P26=P2^6;
sbit P27=P2^7;
bit test_flag;
uchar tab[]="0123456789";
void wr_com(uchar com,busyflag);

void delay(uint temp)
{
 while(temp--);
 //1620-14.99ms
 //520-5ms
 //5-450ns
}
void lcd_init(void)
{
 delay(1650);//time
 wr_com(0x38,0);
 delay(550);//time
 wr_com(0x38,0);
 delay(550);
 wr_com(0x38,0);
 wr_com(0x38,1);
 wr_com(0x08,1);
 wr_com(0x01,1);
 wr_com(0x06,1);
 wr_com(0x0c,1);
}
void init(void)
{
 P24=0;
 P26=1;
 P0=0x00;
 P26=0;
 P27=1;
 P0=0xff;
 P27=0;
 TMOD=0x01;
 TH0=0;
 TL0=0;
 TR0=0;//
 IT0=1;
 EX0=1;
 EA=1;
 lcd_init();
}
void testbusy(void)//read com
{
 busybit=1;
 en=0;
 rs=0;
 rw=1;
 delay(5);
 en=1;
 delay(5);
 while (busybit);
 en=0;
}
void wr_dat(uchar dat,busyflag)
{
 if(busyflag)
 testbusy();
 en=0;
 rs=1;
 rw=0;
 lcd=dat;
 delay(5);
 en=1;
 delay(5);
 en=0;
}
void wr_com(uchar com,busyflag)
{
 if(busyflag)
 testbusy();
 en=0;
 rs=0;
 rw=0;
 lcd=com;
 delay(5);
 en=1;
 delay(5);
 en=0;
}
uint test_distance(void)
{
 uint value;
 TH0=0;
 TL0=0;
 trig=0;
 _nop_();
 trig=1;
 _nop_();_nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();_nop_();
 trig=0;
 while(!echo);
 TR0=1;
 while(echo);
 TR0=0;
 value=TH0*256+TL0;
 return value;
}
void int0_srv() interrupt 0
{
 test_flag=1;
}
void main()
{
 uint value;
 uint a,b,c,d; 
 init();
 while(1)
 {
  if(test_flag)
  {
   test_flag=0;  
   EA=0;
   value=test_distance();
   a=value/100;
   b=a/2;
   c=b*340;
   d=c/10;
   a=d/1000;
   b=(d%1000)/100;
   c=((d%1000)%100)/10;
   d=d%10;
   EA=1;
  }
  wr_com(0x80,1);
  delay(5);
  wr_dat(tab[a],1);
  delay(5);
  wr_dat('.',1);
  delay(5);
    wr_dat(tab,1);
  delay(5);
   wr_dat(tab[c],1);
  delay(5);
  wr_dat(tab[d],1);
  delay(5);
  wr_dat('m',1);
  delay(5);
 }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2012-7-24 14:47 | 只看该作者

有图就更完美了哦

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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