HC-SR04超声波测距仪 基础代码
扫描二维码
随时随地手机看文章
>_<:超声波测距仪模块:
>_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子:
>_<:代码:
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中断用来计数器溢出,超过测距范围
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 }