无聊写的简易超声波C51源程序
#include <reg52.h>
#include <ultrasonic.h>
sbit Trig = P1^1; //RX
sbit Echo = P1^2; //TX
sbit Test = P1^3; //测试输出IO
unsigned char flag;
unsigned int Time_sum; //距离转换变量
unsigned int S;
/****************************************/
/**--- 不精准的延时 ---**/
/****************************************/
void Delay_us(void)
{
unsigned int a = 5550;
while(--a);
}
/*****************************************/
/**--- 发出脉冲 ---**/
/*****************************************/
void Pulse(void)
{
Trig = 1; //要求10us以上的TTL脉冲
Delay_us();
Trig = 0;
}
/*****************************************/
/**--- 计算函数 ---**/
/*****************************************/
void Count_num(void)
{
Time_sum = TH0 * 256 + TL0;
TH0 = 0;
TL0 = 0;
S = (Time_sum * 1.56672)/100; //计算得cm
if(S>200||S<2) {Test = 0; }
else {Test = 1; }
}
/******************************************/
/**--- 回向信号输出 ---**/
/******************************************/
void Response(void)
{
Pulse();
while(!Echo);
TR0 = 1;
while(Echo); //等待并计数
TR0 = 0;
Count_num(); //计算测量结果
}
/*****************************************/
/**--- 定时器初始化 ---**/
/*****************************************/
void Time_init(void)
{
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
EA = 1;
ET0 = 1;
TR0 = 0;
}
/******************************************/
/**--- 中断服务函数 ---**/
/******************************************/
void Interrupt_0(void) interrupt 1
{
flag = 1; //中断溢出标志
}
/************************************/
extern unsigned int S;
void Response(void); //回响信号
void Time_init(void);
/**************************************************************************************/
/* @file main.c
/* @author huahsi
/* @date 2017-2-24
/* @brief 超声波测距程序
/**************************************************************************************/
/*
/* 超声波模块与单片机IO连接
/* Trig ----> P1^1
/* Echo ----> P1^2
/*
/* 5110液晶连接IO
/* RST ----> P2^4
/* CE ----> P2^3
/* DC ----> P2^2
/* Din ----> P2^1
/* Clk ----> P2^0
/* Vcc ---->电源VCC
/* Bl ---->电源的VCC
/* Gnd ---->电源GND
/***************************************************************************************/
#include <lcd_5110.h>
#include <ultrasonic.h>
void main(void)
{
Time_init();
LCD5510_Init();
LCD_showsh(0,0,"创新实验室");
LCD_showsh(0,1,"超声波检测");
while(1)
{
Response();
LCD_clr_row(2,4);
LCD_printn(2,4,S);
}
}
|