用尺子靠近
無聊寫的簡易超聲波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);
}
}
|