当前位置: 代码迷 >> 单片机 >> 超声波测距c语言
  详细解决方案

超声波测距c语言

热度:49   发布时间:2016-04-28 15:43:16.0
超声波测距c语言求助。
请各位大侠指点,以下的程序出不来结果,看看是不是程序的问题,另外对我的程序书写规范有建议的,也欢迎指导。
#include<reg52.h>
#define date P0
#define uchar unsigned char
#define uint unsigned int
sbit D=P2^2;    //段码控制位
sbit W=P2^3;    //位码控制位
sbit T=P1^0;    //发射控制位
//sbit S=P2^0;    //蜂鸣器控制位
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //0-9编码
uchar code wei[]={0xef,0xdf,0xbf,0x7f};    //数码管四个位编码
uchar temp[3];
uint timeh,timel,time;
bit succeed_flag;
void delayus(uchar t)  //延时子函数
{
while(t--);   
}
void delayms(uint o) 
{
while(o--)
{
delayus(245);    //大约延时1ms ,12m晶振
delayus(245);
}
}
void desplay(uint num)      //显示距离子函数
{

uint ge,shi,bai,qian,i;
 ge=(num%1000)%100%10;
 shi=(num%1000)%100/10;
 bai=num%1000/100;
 qian=num/1000; 
temp[3]=duan[ge];
temp[2]=duan[shi];
temp[1]=duan[bai];
temp[0]=duan[qian];
for(i=0;i<4;i++)
{
date=wei[i];
W=1;
W=0;
date=temp[i];
D=1;
D=0;
delayus(20);
}
}
void init_timer0()          //定时器初始化
{
 TMOD|=0x01;
 TH0=(65536-5)/256;
     TL0=(65536-5)%256;

}
void main()
{  
while(1)

 uint distance;    
 EA=0;
 T=1;     
 T=0;  
 delayus(7);    //产生一个20us的脉冲
 T=1;
 init_timer0();
 EA=1; IT0=1;ET0=1; TR0=1; EX0=1;  
// while(succeed_flag==0);    
 if(succeed_flag==1)
 {
  distance=time*7;
  desplay(distance);  
  succeed_flag=0;
  time=0;
 }
 else
 {
    
  desplay(125); 
 }
 }

}

void timer0() interrupt 1      //定时器中断
{     
 TH0=(65536-5)/256;
     TL0=(65536-5)%256;
 time++;
}

void ext() interrupt 0      //外部中断0
{
succeed_flag=1;
EX0=0;
TR0=0;    
}    
------解决方案--------------------
有很多开发板有例子找来看看,
------解决方案--------------------
这样贴程序,估计除了能指出语法上有错误之外,功能上的问题应该没人能知道,这个跟硬件关系很大的
------解决方案--------------------
 while(succeed_flag==0);   
这句才对啊,为什么要注释掉呢?
否则初始化大循环
------解决方案--------------------
帖这么多乱七八糟的拼音字母 想干啥呢
------解决方案--------------------
个人觉得楼主应该把你这个程序的具体功能和最核心的计算过程和变量注释清楚一点,好让别人看的明白点
------解决方案--------------------
T=1;     
 delayus(7);     //产生一个20us的脉冲
 T=0;
 init_timer0();
while(succeed_flag==0);
  EA=1; IT0=1;ET0=1; TR0=1; EX0=1;    
  相关解决方案