资源简介

HC-SR04 超声波测距 资料 例程代码 51单片机 绝对能用

资源截图

代码片段和文件信息


/*============================================================
//HC-SRO4 超声波测距模块 DEMO 程序
//  QQ: 517535000
//淘宝店铺:http://shop58246706.taobao.com
     
==============================================================
SMC1602A(16*2)模拟口线接线方式
连接线图:
       ---------------------------------------------------
       |LCM-----51   | LCM-----51   | LCM------51      |
       --------------------------------------------------|
       |DB0-----P1.0 | DB4-----P1.4 | RW-------P3.4    |
       |DB1-----P1.1 | DB5-----P1.5 | RS-------P3.3    |
       |DB2-----P1.2 | DB6-----P1.6 | E--------P3.5    |
       |DB3-----P1.3 | DB7-----P1.7 | VLCD接1K电阻到GND|
       ---------------------------------------------------
接线:模块TRIG接 P2.6  ECH0 接P2.7

本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。

[注:AT89x51使用12M或11.0592M晶振实测使用11.0592M]
=============================================================*/
#include “reg52.H“ //器件配置文件
#include “intrins.h“
#define Busy    0x80 //用于检测LCM状态字中的Busy标识

sbit  RX=P1^0;
sbit  TX=P1^1;

sbit LCM_RW=P2^6; //定义LCD引脚
sbit LCM_RS=P2^5;
sbit LCM_E =P2^7;
sbit LCM_Data=P0;

sbit Key_Data=P3^3; //定义Keyboard引脚
sbit Key_CLK=P3^2;


void LCMInit(void);
void DisplayOneChar(unsigned char X unsigned char Y unsigned char DData);
void DisplayListChar(unsigned char X unsigned char Y unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
void Decode(unsigned char ScanCode);
void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCMBuysC);

unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(void);
unsigned char code mcustudio[] ={“mcustudio.com.cn“};
unsigned char code email[] =    {“fhwxaoo@163.com “};
unsigned char code Cls[] =      {“                “};
unsigned char code ASCII[15] =    {‘0‘‘1‘‘2‘‘3‘‘4‘‘5‘‘6‘‘7‘‘8‘‘9‘‘.‘‘-‘‘M‘};

static unsigned char DisNum = 0; //显示用指针   
       unsigned int  time=0;
   unsigned long S=0;
   bit      flag =0;
   unsigned char disbuff[4]    ={ 0000};


//写数据
void WriteDataLCM(unsigned char WDLCM) 
{
ReadStatusLCM(); //检测忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0; //若晶振速度太高可以在这后加小的延时
LCM_E=0; //延时
LCM_E=1;
}

//写指令
void WriteCommandLCM(unsigned char WCLCMBuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCM(); //根据需要检测忙
LCM_Data=WCLCM;
LCM_RS=0;
LCM_RW=0;
LCM_E=0;
LCM_E=0;
LCM_E=1;
}

//读数据
unsigned char ReadDataLCM(void)
{
LCM_RS=1; 
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
return(LCM_Data);
}

//读状态
unsigned char ReadStatusLCM(void)
{
LCM_Data=0xFF; 
LCM_RS=0;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
while (LCM_Data & Busy); //检测忙信号
return(LCM_Data);
}

void LCMInit(void) //LCM初始化
{
LCM_Data = 0;
WriteCommandLCM(0x380); //三次显示模式设置,不检测忙信号
Delay5Ms(); 
WriteCommandLCM(0x380);
Delay5Ms(); 
WriteCommandLCM(0x380);
Delay5Ms(); 

WriteCommandLCM(0x381); //显示模式设置开始要求每次检测忙信号
WriteCommandLCM(0x081); //关闭显示
Writ

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5287  2009-12-22 22:40  超声波测距51C程序\51.C

     目录          0  2010-03-12 19:25  超声波测距51C程序

----------- ---------  ---------- -----  ----

                 5287                    2


评论

共有 条评论