|
这是一款能用的超声波测距程序,三位共阴数码管显示测量结果,主电路较为简单,发送接收电路这里没有具体给出,可使用运放电路,也可以使用CX20106电路等,程序下载:
可用的超声波测距程序.rar
(216.8 KB, 下载次数: 0)
- #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- unsigned char code WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
- unsigned char temp[3];
- sbit RX=P3^2; //
- sbit TX=P2^5; //
- sbit led1=P2^0;
- sbit led2=P2^1;
- sbit led3=P2^2;
- bit flag=0;
- uint time=0;
- uint s=0;
- void delay(int xms)//延时大概x毫秒
- {
- int i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void start() //给至少10us的高电平,启动模块
- {
- uint n;
- n=10;
- while(n--)
- TX=~TX;
- }
- uchar count()
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0; //清零
- s=(time*1.72)/100;//厘米
- return s;
- }
- void dispros()//数据分割
- {
- temp[0]=s%1000/100;//百位
- temp[1]=s%1000%100/10; //十位
- temp[2]=s%100%100%10; //个位
- }
- void display() //显示函数
- {
- led1=1;led2=0;led3=0;
- P0= ~WE0[temp[0]]; delay(2);
- led1=0;led2=1;led3=0;
- P0= ~WE0[temp[1]]; delay(2);
- led1=0;led2=0;led3=1;
- P0= ~WE0[temp[2]]; delay(2);
- led1=0;led2=0;led3=0;
- }
- void main()
- {
- TMOD=0X01; //定时器工作方式0
- TH0=0;
- TL0=0;
- EA=1; //开总中断
- ET0=1;//开定时器中断
- TX=1;
- while(1)
- {
- start();//启动模块
- while(!RX); //当RX为零时等待
- TR0=1; //启动计数
- while(RX); //当RX为1时计数并等待
- TR0=0; //关闭计数器
- count(); //计数
- dispros(); //处理,分割数据
- display(); //显示
- delay(2);
- }
- }
- void t0() interrupt 0
- {
- flag=1; //溢出标志
- }
复制代码
|
|