HC-SR04超聲波測距儀 基礎(chǔ)代碼
>_<:超聲波測距儀模塊:
>_<:51單片機(jī),11.0592MHz晶振,將采集數(shù)據(jù)發(fā)送到串口的基礎(chǔ)例子:
>_<:代碼:
1 /***********************************************************************************************************/
2 //HC-SR04 超聲波測距模塊 DEMO 程序
3 //晶振:11。0592
4 //接線:模塊TRIG接 P1.2 ECH0 接P1.1
5 //串口波特率9600
6 /***********************************************************************************************************/
7 #include
8 #include
9 #include
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=%fn",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中斷用來計(jì)數(shù)器溢出,超過測距范圍
52 {
53 flag=1; //中斷溢出標(biāo)志
54 }
55 /********************************************************/
56 void StartModule() //T1中斷用來掃描數(shù)碼管和計(jì)800MS啟動(dòng)模塊
57 {
58 TX=1; //800MS 啟動(dòng)一次模塊
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; //設(shè)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; //開啟定時(shí)器
94 TI=1;
95
96 EA=1; //開啟總中斷
97
98
99 while(1)
100 {
101 StartModule();
102 while(!RX); //當(dāng)RX為零時(shí)等待
103 TR0=1; //開啟計(jì)數(shù)
104 while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
105 TR0=0; //關(guān)閉計(jì)數(shù)
106 Conut(); //計(jì)算
107 delayms(10); //100MS
108 }
109 }