|
/***********************************************************************************************************/ //HC-SR04 超聲波測(cè)距模塊 DEMO 程序 //晶振:11。0592 //接線:模塊模塊 TRIG接 P2.0 ECH0 接P2.1 VCC接單片供電正極5V,GND接單片系統(tǒng)板的GND //蜂鳴器接p2.7 /***********************************************************************************************************/ #include <AT89X51.H> #include <intrins.h> #include <STDIO.H> #define uchar unsigned char #define uint unsigned int #define RX P2_1 #define TX P2_0 #define buzzer P2_7 unsigned int time=0; unsigned int timer=0; float S=0; bit flag =0; /********************************************************/ void delayms(unsigned int ms) { unsigned char i=60,j; for(;ms;ms--) { while(--i) { j=10; while(--j); } } } /********************************************************/ void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.87)/100; //算出來(lái)是CM if((S>=42000)||flag==1) //超出測(cè)量 { flag=0; buzzer=1;//printf("S=-----CM\n"); } else { buzzer=1; //delayms(500); delayms(S); //printf("S=%fCM\n",S); buzzer=0; delayms(S); } } /********************************************************/ void zd0() interrupt 1 //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍 { flag=1; //中斷溢出標(biāo)志 } /********************************************************/ void StartModule() //T1中斷用來(lái)掃描數(shù)碼管和計(jì)800MS啟動(dòng)模塊 { TX=1; //800MS 啟動(dòng)一次模塊 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } /********************************************************/ void main(void) { TMOD=0x21; //設(shè)T0為方式1,GATE=1; SCON=0x50; TH1=0xFD; TL1=0xFD; TH0=0; TL0=0; TR0=0; ET0=1; //允許T0中斷 TR1=1; //開(kāi)啟定時(shí)器 TI=1; EA=1; //開(kāi)啟總中斷 //delayms(100); //printf("超聲波串口測(cè)量系統(tǒng)\n"); //delayms(100); while(1) { StartModule(); while(!RX); //當(dāng)RX為零時(shí)等待 TR0=1; //開(kāi)啟計(jì)數(shù) while(RX); //當(dāng)RX為1計(jì)數(shù)并等待 TR0=0; //關(guān)閉計(jì)數(shù) Conut(); //計(jì)算 //delayms(50); } } |
|