|
#include <stc12c2052ad.h>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned short int u16;
sbit Trig = P3^7;
sbit Echo = P3^2;
sbit SEGEN = P1^0;
void initUART();
void startHCSR04();
void display();
void delay200ms();
u16 distanceData = 0;
void main()
{
EX0 = 1;
IT0 = 1;
ET0 = 1;
TMOD |= 0x01; //定時器T0,16位計數(shù)
EA = 1;
initUART();
while(1)
{
startHCSR04();
delay200ms();
display();
}
}
void delay200ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void delay45us() //@11.0592MHz
{
u8 i;
i = 122;
while (--i);
}
//初始化串口 波特率:9600
void initUART()
{
SCON = 0x50; //串口模式1
TMOD |= 0x20; //定時器T1,8位自動重載
TH1 = 0xfd;
PCON &= 0x7f;//SMOD = 0
AUXR &= 0xbf;//T1x12 = 0
TR1 = 1; //啟動定時器T1
}
//啟動超聲波模塊
void startHCSR04()
{
Trig = 0;
Trig = 1;
delay45us();
Trig = 0;
while(!Echo);
TH0 = 0;
TL0 = 0;
TR0 = 1;
}
void sendByte(u8 dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
//向數(shù)碼管模塊發(fā)數(shù)據(jù)(串口通信)
void display()
{
u8 temp = 0;
SEGEN = 1;
sendByte('W');
sendByte(' ');
temp = distanceData / 100;
sendByte(temp + 48);
temp = distanceData % 100 / 10;
sendByte(temp + 48);
temp = distanceData % 100 % 10;
sendByte(temp + 48);
}
void TIMER0() interrupt 1 using 1
{
TR0 = 0;
distanceData = 888; //如果16位計數(shù)溢出觸發(fā)定時器0中斷,則認(rèn)為距離超過測量范圍
}
void EXT0() interrupt 0 using 1
{
u16 t = 0;
TR0 = 0;
t = TH0 * 256 + TL0;
distanceData = t * 1.09 * 17 / 1000; //11.0592MHz晶振一個機(jī)器周期耗時是12MHz的1.09倍
}
|
-
-
超聲波模塊HC-SR04測試.zip
2020-5-30 08:51 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
40.25 KB, 下載次數(shù): 20, 下載積分: 黑幣 -5
|