我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1260|回复: 1

超声波测距代码

[复制链接]

该用户从未签到

3

主题

0

回帖

3

积分

一级逆天

积分
3

社区居民

QQ
发表于 2015-3-31 16:06:45 | 显示全部楼层 |阅读模式
#include<reg52.h>//#include<delay.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^3;sbit lcden=P2^2;sbit trig=P2^0;               //超声波发送//sbit echo=P3^2;               //超声波接受//P0____________DB0-DB7uchar dis[]="Disp_HC-SR04";uchar num[]="0123456789";uint distance;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=121;y>0;y--);}void HC_init(){    TMOD=0x09;    TR0=1;    TH0=0;TL0=0;}uint HC_jisuan(){    uint dist,timer;    timer=TH0;    timer<<=8;    timer=timer|TL0;    dist=timer/53;                //晶振11.0592MHz 距离cm=微秒us/58    return dist;                  //1个机器周期是12个时钟周期   timer*12/(58*11.0592)=timer/53}                                    void HC_run(){    uint tempH=0x00,tempL=0x00;    TH0=0;TL0=0;    trig=0;    trig=1;    delay(1);    trig=0;    while((TH0-tempH!=0||TL0-tempL!=0)||(TH0==0&&TL0==0))        {            tempH=TH0;            tempL=TL0;        }    delay(1);}void lcd_write_com(uchar com)  //LCD写指令{    lcdrs=0;    P0=com;    delay(1);    lcden=1;    delay(1);    lcden=0;}void lcd_write_data(uchar date)  //LCD写数据{    lcdrs=1;    P0=date;    delay(1);    lcden=1;    delay(1);    lcden=0;}void lcd_init()  //LCD初始化{    lcden=0;    lcd_write_com(0x38);    lcd_write_com(0x0c);    lcd_write_com(0x06);    lcd_write_com(0x01);}void lcd_display(uchar temp){    uint i;    lcd_write_com(0x82);    for(i=0;i<12;i++)        {            lcd_write_data(dis);        }    lcd_write_com(0x80+0x41);    lcd_write_data('D');    lcd_write_data('i');    lcd_write_data('s');    lcd_write_data('t');    lcd_write_data('a');    lcd_write_data('n');    lcd_write_data('c');    lcd_write_data('e');    lcd_write_data(':');    lcd_write_data(num[temp/100]);    lcd_write_data(num[temp/10%10]);    lcd_write_data(num[temp%10]);    lcd_write_data('c');    lcd_write_data('m');    }void main(){    lcd_init();    HC_init();    while(1)    {        HC_run();        distance=HC_jisuan();        lcd_display(distance);        delay(200);    }}
回复

使用道具 举报

该用户从未签到

0

主题

6

回帖

7

积分

一级逆天

积分
7

社区居民

QQ
发表于 2015-3-31 20:00:23 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表