>_<:超聲波測距儀模塊:
>_<:51單片機,11.0592MHz晶振,將采集數據發送到串口的基礎例子:
>_<:代碼:
1 /***********************************************************************************************************/ 2 //HC-SR04 超聲波測距模塊 DEMO 程序 3 //晶振:11。0592 4 //接線:模塊TRIG接 P1.2 ECH0 接P1.1 5 //串口波特率9600 6 /***********************************************************************************************************/ 7 #include <AT89X51.H> 8 #include <intrins.h> 9 #include <STDIO.H> 10 11 #define uchar unsigned char 12 #define uint unsigned int 13 #define RX P1_1 14 #define TX P1_2 15 16 17 unsigned int time=0; 18 unsigned int timer=0; 19 float S=0; 20 bit flag =0; 21 22 23 /********************************************************/ 24 void Conut(void) 25 { 26 time=TH0*256+TL0; 27 TH0=0; 28 TL0=0; 29 S=(time*1.87)/100; //算出來是CM 30 if(flag==1) //超出測量 31 { 32 flag=0; 33 printf("-----\n"); 34 } 35 printf("S=%f\n",S); 36 } 37 /********************************************************/ 38 void delayms(unsigned int ms) 39 { 40 unsigned char i=100,j; 41 for(;ms;ms--) 42 { 43 while(--i) 44 { 45 j=10; 46 while(--j); 47 } 48 } 49 } 50 /********************************************************/ 51 void zd0() interrupt 1 //T0中斷用來計數器溢出,超過測距范圍 52 { 53 flag=1; //中斷溢出標志 54 } 55 /********************************************************/ 56 void StartModule() //T1中斷用來掃描數碼管和計800MS啟動模塊 57 { 58 TX=1; //800MS 啟動一次模塊 59 _nop_(); 60 _nop_(); 61 _nop_(); 62 _nop_(); 63 _nop_(); 64 _nop_(); 65 _nop_(); 66 _nop_(); 67 _nop_(); 68 _nop_(); 69 _nop_(); 70 _nop_(); 71 _nop_(); 72 _nop_(); 73 _nop_(); 74 _nop_(); 75 _nop_(); 76 _nop_(); 77 _nop_(); 78 _nop_(); 79 _nop_(); 80 TX=0; 81 } 82 /********************************************************/ 83 void main(void) 84 { 85 TMOD=0x21; //設T0為方式1,GATE=1; 86 SCON=0x50; 87 TH1=0xFD; 88 TL1=0xFD; 89 TH0=0; 90 TL0=0; 91 TR0=1; 92 ET0=1; //允許T0中斷 93 TR1=1; //開啟定時器 94 TI=1; 95 96 EA=1; //開啟總中斷 97 98 99 while(1) 100 { 101 StartModule(); 102 while(!RX); //當RX為零時等待 103 TR0=1; //開啟計數 104 while(RX); //當RX為1計數並等待 105 TR0=0; //關閉計數 106 Conut(); //計算 107 delayms(10); //100MS 108 } 109 }