功能:
超聲波測距儀,測量距離,用LCD12864顯示信息。 lcd_writestr(0,0," 超聲波測距儀 "); lcd_writestr(1,0,"********"); lcd_writestr(2,0,"當(dāng)前被測距離為:"); lcd_writestr(3,0," 厘米 ");
原理圖:
/*****************************************************
* 功能:超聲波測距
******************************************************/
#include <reg52.h>
#include "intrins.h"
#include "12864LCDdriver.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define V=173
sbit CSOut=P1^7;
sbit Start=P1^4;
ulong TIME;
uchar DISTANCE;
uchar code discode[11]={'0','1','2','3','4','5','6','7','8','9',' '};
ulong data disnum[5];
bit data ReceiveOK=0;
bit data TOut;
bit data FLAG;
/*********************************************************
* 函數(shù)名稱:void delay2(uchar x)
* 功??? 能:延時(shí)函數(shù)
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************/
void delay2(uchar x)
{
uchar a,b;
for(a=0;a<x;a++)
for(b=0;b<255;b++);
}
/*********************************************************
* 函數(shù)名稱:void init(void)
* 功??? 能:初始化
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************/
void init(void)
{
lcd_init();//LCD初始化,開機(jī)調(diào)用一次
IT0=0;//INT0負(fù)邊沿觸發(fā)
IP=0x01;//INT0高優(yōu)先級
EA=1;//開總中斷
}
/*********************************************************
* 函數(shù)名稱:
* 功??? 能:超聲波發(fā)射函數(shù)
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************/
void CCOut(void)
{
TR0=1;
//40KHz
CSOut=0;//1
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();
CSOut=1;//2
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();
CSOut=0;//3
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();
CSOut=1;//4
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();
CSOut=0;//5
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();
CSOut=1;//6
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();
CSOut=0;//7
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();
CSOut=1;//8
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();
CSOut=0;//9
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();
CSOut=1;//10
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();
CSOut=0;//11
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();
CSOut=1;//12
}
/*********************************************************
* 函數(shù)名稱:void DataProcess(void)
* 功??? 能:數(shù)據(jù)處理函數(shù)
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************/
void DataProcess(void)
{
ulong time=0;
TIME=TH0;
TIME=(TIME<<8)|TL0;
TIME*=173;//距離
TIME=TIME/10000;//單位:CM
disnum[0]=(uchar)TIME%10;??????? //個(gè)位
disnum[4]=TIME/10;
disnum[1]=(uchar)disnum[4]%10;//十位
disnum[4]=disnum[4]/10;
disnum[2]=(uchar)disnum[4]%10;//百位
disnum[4]=disnum[4]/10;
disnum[3]=(uchar)disnum[4]%10;//千位
}
/*********************************************************
* 函數(shù)名稱:void TimeOut(void) interrupt 1
* 功??? 能:超時(shí)處理函數(shù) T0
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************/
void TimeOut(void) interrupt 1
{
TR0=0;
ET0=0;
EX0=0;
ReceiveOK=0;
TOut=1;
}